Fonctionnalités et bibliothèques prises en charge
Un point important à prendre en compte lors du choix de la technologie est la sélection des bibliothèques déjà disponibles et l’étendue des fonctionnalités du langage. Pendant le développement, des questions se posent, par exemple : combien de fonctions doivent être implémentées soi-même et où peut-on utiliser des bibliothèques existantes ? Les trois méthodes prennent désormais en charge presque tout ce qui est nécessaire pour une application complexe. Néanmoins, chaque technologie a ses avantages lorsqu’il s’agit de certains aspects du développement d’applications.
Développement natif
Le développement natif a ses points forts dans la communication avec les interfaces de l’appareil. L’utilisation de la caméra, du GPS ou du Bluetooth ne nécessite pas de passer par des conteneurs d’applications comme Apache Cordova, mais l’application peut accéder directement aux interfaces de l’appareil mobile. Si l’accent de l’application est mis sur un échange plus complet avec les interfaces de l’appareil, le développement natif est la seule solution raisonnable. À cet égard, le langage natif d’un appareil offre (encore) de loin la plus grande étendue de fonctionnalités et les meilleures possibilités d’adaptation.
Des outils d’automatisation de gestion de build comme Gradle offrent également la possibilité d’utiliser une multitude de bibliothèques prêtes à l’emploi et de les intégrer facilement dans une application. Comme le développement natif était longtemps la seule solution dans le développement d’applications, le choix est maintenant tout à fait considérable.
Technologies Web
Les frameworks basés sur le Web offrent l’avantage que, à quelques exceptions près, toutes les fonctions JavaScript qui fonctionnent dans le navigateur peuvent être utilisées. JavaScript, sur lequel TypeScript est basé, a ses points forts surtout dans le chargement asynchrone de données, comme il est utilisé sur presque tous les sites Web. L’utilisation de promesses et de fonctions de rappel permet aux développeurs de charger des données en arrière-plan de l’application sans affecter le thread de l’interface utilisateur. Cela a l’avantage que l’application semble très fluide pour l’utilisateur. Il est maintenant également possible avec les frameworks Web d’accéder aux fonctions de l’appareil comme la caméra. Cependant, l’étendue des fonctionnalités est nettement plus limitée qu’avec les technologies natives.
En ce qui concerne la conception de l’application, les applications Web offrent l’avantage de pouvoir utiliser les feuilles de style en cascade (CSS). Il existe d’innombrables exemples de cela sur Internet. Si nécessaire, l’interface utilisateur d’un site Web peut également être copiée avec relativement peu d’effort, ce qui est utile, par exemple, pour les entreprises qui ont déjà un site Web et souhaitent s’inspirer de son style pour leur application.
Grâce au gestionnaire de paquets Node (npm), il est très facile d’accéder à une multitude de bibliothèques prêtes à l’emploi. Comme JavaScript est utilisé depuis 1995, il existe maintenant une solution prête à l’emploi pour tout, et la probabilité est relativement faible que des fonctions en dehors de la logique métier doivent être implémentées soi-même.
Technologies hybrides
Comme les technologies hybrides sont de loin les plus récentes sur le marché, c’est ici que l’étendue des fonctionnalités est encore la plus petite. Cependant, avec de grandes entreprises comme Google en soutien, on peut s’attendre à ce qu’elle continue de croître. Toutes les fonctions importantes comme le chargement asynchrone de données ou l’accès aux fonctions de l’appareil sont déjà possibles sans problème ici aussi.
Le gestionnaire de paquets pub.dev permet également une intégration facile des bibliothèques avec Flutter. Tous les packages importants de grandes entreprises ou technologies sont déjà disponibles ici. Des exemples seraient sqlite pour une base de données locale ou firebase.core pour une connexion à la plateforme cloud de Google.
Comme beaucoup voient l’avenir du développement d’applications dans les technologies hybrides et que la popularité des frameworks comme Flutter continue d’augmenter, on peut s’attendre à ce que de nombreux autres développeurs publient des bibliothèques à l’avenir. Ainsi, avec le temps, de moins en moins d’efforts devront être consacrés à l’écriture de fonctions standard.
Interface utilisateur et création de design
Un facteur important, qui peut signifier beaucoup d’efforts de développement et faire la différence entre de bonnes et de mauvaises applications, est l’interface utilisateur. Par conséquent, les outils qui visent à faciliter la création de la mise en page sont analysés et comparés.
Éditeur de mise en page Android Studio
Android fournit une interface graphique avec l’éditeur de mise en page Android Studio, dans laquelle l’interface utilisateur peut être « assemblée » à l’aide d’éléments glisser-déposer. L’éditeur de mise en page convient bien au prototypage rapide ou à la mise en œuvre approximative d’un modèle, mais dès que des modifications plus fines, par exemple le comportement de défilement d’une liste, doivent être effectuées, il est parfois assez compliqué à utiliser. Dans ce cas, il est généralement plus efficace d’apporter le changement souhaité directement dans le code. Néanmoins, ici aussi, comme pour Java, il faut écrire beaucoup plus de code que pour la même mise en page dans l’une des autres technologies.
Un autre point à prendre en compte est le grand nombre de mises en page disponibles. Si les exigences de conception sont connues avec précision, cela peut être une aide, mais au début, cela semble souvent déroutant. Des interfaces utilisateur plus complexes peuvent être mises en œuvre sans problème avec Android Studio, c’est juste relativement laborieux.
Ionic Creator
L’éditeur de mise en page basé sur le navigateur semble beaucoup plus léger et plus ordonné que l’éditeur Android Studio. L’utilisation semble également plus simple et plus fluide. Ionic fournit un grand nombre de composants d’interface utilisateur préfabriqués qui peuvent être glissés et déposés dans un cadre similaire à un téléphone portable. Ainsi, même des éléments plus complexes, comme une carte ou un lecteur vidéo, n’ont pas besoin d’être implémentés soi-même. Finalement, du HTML peut être généré à partir de la mise en page, qui peut être utilisé directement dans le projet Ionic. Si l’on ne souhaite pas utiliser un éditeur graphique, on a alternativement la possibilité d’utiliser HTML avec CSS. Cela offre l’avantage que de nombreuses mises en page préfabriquées existent sur Internet et peuvent être directement adoptées.
Flutter Widget Maker
Flutter n’offre pas encore d’éditeur officiel. Cependant, plusieurs projets open-source sont actuellement en phase de développement et semblent prometteurs. L’un d’entre eux est le Flutter Widget Maker, également basé sur le navigateur. Il est, à quelques différences près, analogue à l’Ionic Creator et offre des possibilités d’importer directement des modèles en tant que widgets dans les projets Flutter.
Des designs complexes et des animations d’interface utilisateur peuvent être mis en œuvre avec les trois technologies. Ionic peut utiliser toutes les technologies web disponibles et ainsi s’appuyer sur une grande quantité d’exemples. Le développement natif avec Java est un peu plus compliqué et parfois un peu fastidieux dans la mise en œuvre. Flutter se distingue nettement par sa simplicité. De nombreux widgets préfabriqués comme Center ou Row accélèrent énormément la réalisation d’un design. Même des animations complexes peuvent être mises en œuvre relativement facilement en peu de temps.
Documentation
Les documentations disponibles jouent un rôle important dans l’orientation et le développement avec de nouvelles technologies. Les questions qui se posent sont entre autres : À quel point sont-elles détaillées et complètes ? Puis-je trouver de l’aide si je suis bloqué sur un problème ? Quelqu’un a-t-il déjà eu le même problème que moi et l’a-t-il résolu ?
On trouve des documentations détaillées pour les trois possibilités de développement. Il convient toutefois de souligner que la documentation Android de Java n’est pas très pratique. On trouve beaucoup d’explications sur les paramètres de classe et les fonctions disponibles, mais pas sur la manière de les appliquer. Ionic et Flutter font mieux et brillent avec des exemples de code détaillés. Ionic a intégré dans sa documentation une vue en direct du code expliqué dans un cadre de téléphone portable. On voit ainsi immédiatement ce que fait exactement un composant et à quoi il peut ressembler. Cela est énormément utile pour l’imagination et sert d’inspiration pour sa propre application. Flutter, quant à lui, fournit entre autres des vidéos sur des widgets individuels qui expliquent leur fonctionnement. De nombreux exemples sont destinés à montrer les possibilités et à aider dans le choix des bons composants.
Efficacité du flux de travail
Pour comparer les différences dans le flux de travail de développement, il faut examiner de plus près les interfaces en ligne de commande et les environnements de développement respectifs. Ceux-ci servent entre autres à générer automatiquement du code qui a toujours la même apparence.
En Java, ce serait l’Activity, pour Flutter le Widget. Les deux peuvent être générés relativement facilement via des commandes dans Android Studio. Un composant dans Ionic peut également être créé avec peu d’effort via l’Ionic-CLI. L’effort nécessaire peut être considéré comme à peu près équivalent.
Pour une meilleure compréhension, voici le déroulement typique du développement d’applications, qui se répète plusieurs fois par jour :
- Écriture du code dans l’environnement de développement
- Sauvegarde du fichier
- Compilation de l’application
- Démarrage de l’application sur un émulateur ou dans le navigateur
- Examen et test de la fonctionnalité du code développé
Les étapes un, deux et cinq sont analogues pour toutes les technologies. La différence significative se trouve dans la compilation aux étapes trois et quatre. Cela est dû à la différence dans la technologie du compilateur. Ionic et Flutter utilisent un compilateur Just-in-Time (JIT), tandis qu’Android avec Java utilise généralement un compilateur Ahead-of-Time (AOT).
Compilateur Just-in-Time
Ils ont le grand avantage en développement de ne compiler le code qu’au moment de l’exécution et non avant le démarrage de l’application. Ainsi, tout n’est compilé que lorsque c’est nécessaire. Cela est particulièrement utile pendant la phase de développement, car l’application n’a besoin de recharger que la partie correspondante qui a été modifiée par le développeur.
Compilateur Ahead-of-Time
Ils sont généralement utilisés pour les versions de production et ont l’avantage par rapport aux compilateurs JIT que le programme généré s’exécute de manière nettement plus performante. Cet avantage peut cependant être négligé dans le développement. L’inconvénient est que la durée du processus de compilation est significativement augmentée.
Concrètement, pour le développement, cela signifie : Alors que pour l’application Java, on doit toujours recompiler manuellement l’ensemble de l’application, les technologies web et Flutter utilisent ce qu’on appelle le rechargement à chaud (Hot-Reload). Via des paramètres dans l’environnement de développement,
le Hot-Reload peut être déclenché dès qu’un fichier est sauvegardé. Ensuite, la partie de l’application qui a été modifiée est automatiquement rechargée directement. Lorsque l’application fonctionne dans un émulateur ou dans le navigateur, elle est toujours à jour et n’a pas besoin d’être redémarrée manuellement. Les étapes deux et trois sont donc supprimées et sont automatiquement lancées par le compilateur JIT dès que l’étape deux a été exécutée. Avec un compilateur JIT, il faut donc passer beaucoup moins de temps à attendre. Bien que seulement quelques secondes soient économisées pour un seul processus de compilation, cela s’accumule au fil de la journée pour atteindre une durée non négligeable.
Aperçu comparatif du développement d’applications natives, hybrides et basées sur le web
| native (Java) | hybride (Flutter) | basée sur le web (Ionic) |
Complexité du langage | + bonne lisibilité du langage – trop de code répétitif | + choix entre programmation orientée objet ou fonctionnelle + facile à comprendre et sans complication | + nombreuses possibilités (par exemple, animations UI) + choix entre programmation orientée objet ou fonctionnelle |
Clarté & Étendue du code | – volume de code accru | + bonne clarté + volume de code réduit | + bonne clarté + volume de code réduit |
Étendue des fonctionnalités & bibliothèques prises en charge | + bonne communication avec les interfaces de l’appareil + multitude de bibliothèques prêtes à l’emploi | – étendue des fonctionnalités encore relativement limitée | + chargement asynchrone des données + multitude de bibliothèques prêtes à l’emploi |
Création d’UI et de design | – fastidieux pour les ajustements fins + nombreuses mises en page disponibles | + utilisation simple – pas encore d’éditeur officiel | + nombreux composants UI préfabriqués + utilisation simple |
Documentation | – non axé sur la pratique | + exemples de code détaillés + vidéos sur le fonctionnement de widgets individuels | + exemples de code détaillés + vue en direct |
Efficacité du flux de travail | – compilation manuelle – durée de compilation accrue | + rechargement à chaud + durée de compilation réduite | + rechargement à chaud + durée de compilation réduite |
Conclusion et perspectives
Il y a encore quelques années, il n’y avait guère de véritables alternatives au développement d’applications natives. Dans le sillage de la numérisation, la demande d’applications ne cesse de croître. Ainsi, de vrais concurrents se sont désormais établis sur le marché, ayant déjà surmonté de nombreux défis initiaux. De nombreux frameworks offrent maintenant des avantages significatifs par rapport au développement natif et simplifient de nombreux processus. Quiconque développe une nouvelle application en 2020 devrait sérieusement envisager les applications hybrides et web, car elles simplifient et accélèrent considérablement le processus de développement grâce à des fonctionnalités telles que le rechargement à chaud. De nombreux autres problèmes ou faiblesses du développement natif sont également résolus de manière plus élégante. Les technologies web se sont également établies comme une alternative et sont particulièrement populaires auprès des développeurs ayant une expérience frontend. En intégrant des frameworks frontend populaires comme Angular, Vue ou React, les langages et principes déjà appris peuvent être facilement transférés au développement d’applications, ce qui permet d’économiser du temps et surtout de l’argent.