Les meilleures pratiques en développement Android
Quelques habitudes qui feront de vous de meilleurs développeurs Android
Appliquer les bonnes pratiques de développement est le moyen le plus adéquat pour concevoir une application robuste, maintenable, adaptable et évolutive. Ainsi, au fil du temps plusieurs habitudes ont vu le jour afin de démocratiser la façon de coder mais également afin de résoudre des problèmes d’architecture, de mémoire, de performances, de structuration, et de conception d’applications Android. Il s’agit ici non pas de les énumérer toutes, mais de proposer une liste de points majeurs qui tiennent en compte les bases acquises de la programmation sous Android et ses technologies actuelles. Ses points sont les suivants:
Suivez les spécifications de Google Material Design
Google met à la disposition des développeurs et des designers des outils puissants, notamment des guides permettant de suivre les bonnes règles de développement et d’expérience utilisateur. Ainsi, à travers Material Design Guidelines, il définit clairement les spécifications techniques et les recommandations à suivre pour produire un design équilibré, sobre et normé respectant les règles de la philosophie « Material » propre à Android et adapté au Web.
Il s’articule autour des points suivants :
- Définition des tailles
- Gestion des couleurs
- Navigation
- Motion Design
- Dispositions des vues
- Bonnes pratiques pour l’UX
- Iconographie
- Typographie etc…
Cessez d’utiliser les PNGs ! Utilisez les vecteurs XML. Pourquoi ?
Les images PNG perdent grandement en qualité lorsqu’elles subissent un agrandissement ou un changement drastique de taille du smartphone.
Les avantages d’utilisation des images vectorielles sont multiples, on peut notamment citer :
- La puissance de scalabilité : Si vous essayez d’augmenter la taille des images vectorielles vous ne perdrez pas en qualité contrairement aux images matricielles telles que les PNG qui agrandissent individuellement chaque pixel de manière à dégrader globalement la qualité l’image.
- L’édition facile, rapide et sans perte : Chaque ligne d’une image vectorielle représente un objet précis au sein de l’image pouvant etre modifié à plusieurs reprises. Par exemple : Si vous prenez un fichier my_drawable_vector.xml contenant un cercle en arrière-plan, en fonction de vos désirs vous pourrez changer la couleur ou remplacer le cercle par un rectangle et réutiliser l’image sans que cela n’affecte la qualité du fichier.
- La réduction du poids : Une autre raison d’utiliser les vecteurs graphiques au lieu des images matricielles est le poids. Les objets vectoriels ont un format beaucoup plus réduit que celui des images matricielles. A contenu similaire, une image xml sera en général 3 fois plus légère qu’un fichier PNG ou JPEG, bien que le CPU prend plus de temps à les interpréter.
- Le soutien de la communauté Android : Android Studio donne la possibilité de convertir les images du format .svg au format .xml pour des raisons de performances et d’optimisation des ressources. Il existe également des sites qui fournissent des ressources vectorielles comme Material Design Icons.
Migrez vers AndroidX
Tout d’abord, c’est quoi AndroidX ?
AndroidX est un projet open-source utilisé par la team Android pour developper, tester, déployer, versionner, et publier les librairies qui tournent sous Jetpack. C’est de ce fait une amélioration majeure du projet d’origine Android Support Library.
AndroidX voit le jour principalement par le besoin de regrouper, organiser et uniformiser les différentes librairies d’Android dont les versions portaient grandement à confusion.
Par exemple : android.support.v7.app.AppCompatActivity devient androidx.appcompat.app.AppCompatActivity. Par conséquent, Android Support Library est désormais obsolète et son développement a été stoppé depuis la version 28 au profit d’AndroidX, qui se veut plus « propre » et disposant d’une taxinomie de classes plus structurée.
Android Studio met à la disposition des développeurs une fonctionnalité permettant de migrer facilement un projet à AndroidX. Jetez-y un coup d’œil si vous n’avez pas encore fait le saut.
Utilisez les librairies tierces populaires
Les librairies tierces offrent des avantages énormes en termes de productivité et de flexibilité en développement Android. Il en existe de toutes les catégories (Base de données, Boite de dialogues, Injection de dépendance, monitoring, débogage, composants personnalisés…). Ceci dans le but de faciliter le travail des développeurs.
Ses avantages sont les suivants :
- Gain de temps : Pas besoin de réinventer la roue, L’avantage le plus important de l’utilisation de bibliothèques tierces est qu’il vous fait gagner du temps car vous n’avez pas besoin de développer les fonctionnalités fournies par la bibliothèque. Au lieu de cela, vous pouvez vous concentrer sur la logique métier principale de votre application : les fonctionnalités qui comptent vraiment. Bien sûr, vous aurez encore besoin de passer du temps à lire la documentation de la bibliothèque et à comprendre comment l’intégrer, mais cela ne représente généralement qu’une fraction du temps comparé à ce qui serait nécessaire pour développer et tester ses fonctionnalités à partir de zéro.
- Support de la communauté : L’un des avantages d’utiliser des librairies populaires est l’interactivité de la communauté autour, beaucoup de développeurs pourront vous venir en aide aisément
- Code pre-testé : La majeure partie des librairies populaires sont testées à chaque déploiement et donc bien plus stables.
Beaucoup de librairies fournissent des fonctionnalités variées, mais pour des besoins de sécurité, de support et de maintenabilité, privilégiez les plus populaires, sauf si vous faites confiance au code-source.
Ecrivez les tests unitaires ! C’est ennuyeux mais faites-le !
Certainement un des points que la majorité des développeurs ont tendance à mettre de côté à tort. Bien plus qu’une bonne pratique en développement Android, il fait partie des règles importantes de programmation en général.
Ecrire des tests unitaires est le meilleur moyen d’assurer la logique individuelle de chaque bloc que votre code. Il permet de vous assurer qu’une fonctionnalité se comporte de manière effective selon plusieurs cas de figure bien définis par vos soins.
Les tests unitaires pour Android peuvent être classés en :
- Tests unitaires locaux — tests pouvant s’exécuter sur la JVM.
- Tests unitaires instrumentés — tests qui nécessitent le système Android.
Votre test doit se concentrer sur la logique métier de votre application. Une bonne règle de base est d’avoir la distribution de tests suivante :
- Tests unitaires de 70 à 80% pour assurer la stabilité de votre base de code
- 20–30% de tests fonctionnels pour s’assurer que l’application fonctionne vraiment
- Quelques tests inter fonctionnels si votre application s’intègre avec d’autres composants d’applications tierces
Mais tests unitaires signifient préalablement code testable. Donc avant de commencer à écrire vos tests unitaires, demandez vous si votre code respecte les règles d’une architecture modulable. Sinon, adoptez un des design patterns recommandés dans le point suivant.
Adoptez un design pattern
Selon Wikipédia : un patron de conception (souvent appelé design pattern) est un arrangement caractéristique de modules, reconnu comme bonne pratique en réponse à un problème de conception d’un logiciel. Il décrit une solution standard, utilisable dans la conception de différents logiciels.
Les design patterns ont trois principaux avantages :
- La simplicité
- La testabilité
- La maintenabilité
Les plus utilisés et les meilleurs en développement Android sont les suivantes :
- MVC (Model — View — Controller)
- MVP (Model — View — Presenter)
- MVVM (Model — View — ViewModel)
- Clean Architecture
En fonction de vos dispositions, vos préférences et votre compréhension, vous choisirez celui qui vous convient le mieux.
Il existe également un design pattern en développement Android qu’il est très important de mentionner bien qu’il est utilisé comme une approche de codage complémentaire aux autres : L’injection des dépendances. La réutilisabilité du code, la facilitation de refactoring et de testabilité ont fait de lui, avec le temps, une bonne pratique véritablement incontournable.
Apprenez à utiliser le Constraint Layout ! ! !
Le Constraint Layout, qui est désormais la vue par défaut d’Android Studio, est un composant d’une puissance et d’une flexibilité incroyable. Il vous donne la possibilité de « contraindre » ou lier les éléments de votre vue à son conteneur, les uns aux autres ou aux directives que vous aurez vous-même définies, ce qui le rend bien plus adaptable qu’un Relative Layout, peu importe la taille de l’écran sur lequel il est affiché. Cela vous permet de créer des vues complexes, dynamiques et réactives suivant une hiérarchie plate. Il prend même en charge les animations !
Apprenez RxJava et la programmation réactive
Vous avez certainement déjà entendu parler de RxJava, RxKotlin, extensions réactives etc.…, et si vous ne l’avez pas encore utilisé, vous vous demandez certainement pourquoi il est devenu aussi incontournable. La réponse est simple, c’est une technologie qui est devenue au fil du temps une des révolutions majeures du développement Android à travers un concept : La programmation réactive.
Alors, c’est quoi la programmation réactive ?
Selon Wikipédia, la programmation réactive est un paradigme de programmation visant à conserver une cohérence d’ensemble en propageant les modifications d’une source réactive (modification d’une variable, entrée utilisateur, etc.) aux éléments dépendants de cette source.
RxJava/RxKotlin intervient dans plusieurs cas en developpement Android, notamment:
- Le traitement des événements utilisateur tels que la saisie au clavier, les signaux GPS changeant au fil du temps lorsque les utilisateurs se déplacent avec leur appareil, les signaux du gyroscope de l’appareil, les événements tactiles, etc.
- La reponse et le traitement des requêtes asynchrones liées au changement reseau et au stockage de fichiers dans le disque
- La gestion d’événements ou les données transmis à une application par un service externe(événements d’un serveur, événements utilisateur susmentionnés, signaux du matériel, événements déclenchés par le circuit analogique à partir de capteurs, etc.).
Utilisez Android ProGuard
Proguard est un réducteur, optimiseur, obfuscateur et vérificateur de fichiers de classe Java open-source. Il détecte et supprime les classes, champs, méthodes et attributs inutilisés. Il optimise le bytecode et supprime les instructions inutilisées. Il renomme les classes, champs et méthodes restants en utilisant des noms courts sans signification.
Ses avantages sont multiples :
- Securité: L’obfuscation rend difficile le Reverse Engineering et diminue ainsi le risque de failles exploitables par des individus ou des programmes malveillants.
- Optimisation : Un des points majeurs de Proguard est la performance de compilation, il supprime les classes et methodes non utilitisées et reduit le code en y apportant des optimisations afin de rendre l’apk plus leger.
Créez vos propres outils de facilitation
Prenez l’habitude de concevoir vos propres classes ou composants réutilisables afin de vous faciliter le développement au quotidien, cela peut etre un ensemble de routines regroupant des fonctionnalités semblables (traitement d’images, stockage de fichiers dans la mémoire externe, notifications, Networking…) ou des vues customisées selon vos propres besoins. Vous gagnerez ainsi considérablement en temps et en productivité.
Vous pouvez consulter mes gists pour avoir accès à quelques-uns.
Si vous avez aimé cet article, n’hesitez pas à applaudir et à partager pour beaucoup plus de visibilité ! 😁