Optimisation d’Android Studio

Vous pouvez aussi cousulter la vidéo qui explique visuellement l’article : https://youtu.be/JV03yYqg3qw
Android Studio, comme beaucoup d’IDE (IntelliJ, Netbeans, etc) est un outil relativement lourd sur les machines faiblottes. Beaucoup d’étudiants, voir de développeurs, trouvent l’outil lent et perdent beaucoup de temps à attendre après divers opérations tel l’indexation des fichiers, la construction d’un projet, ou l’exécution d’un projet dans un émulateur Android.
Il est toutefois possible de faire certaines optimisations afin d’économiser du temps. Je vais ici réunir quelque trucs sans être exhaustif. Si vous désirez partager les vôtres, n’hésitez pas à commenter. J’ajouterai à l’article ce que je juge pertinent.
L’indexation des fichiers
Lors de l’ouverture d’un nouveau projet, l’IDE procédera à l’indexation des fichiers. Concrètement, cela permet, entre autre, de localiser rapidement les éléments du code tel les classes ou les méthodes lors de « l’auto complete ». Vous savez, le moment ou vous commencer à inscrire le nom d’une méthode et l’IDE vous donne des suggestions afin de compléter le mot. Très pratique pour éviter les erreurs de syntaxe ou pour indiquer les possibilités.
Compte tenu des nombreux accès aux fichiers lors de l’indexation ainsi que lors de l’ouverture de l’IDE, je recommanderais dans un premier temps de se procurer un disque dur SSD. Les prix ont baissés dans les dernières années et ça offre un gain de performance très important. Il m’apparaît inconcevable qu’un programmeur utilisant Android Studio, InteliJ ou Netbeans ne l’utilise pas.
Gradle
Grade est l’outil qui permet la construction des projets. Il permet entre autre la compilation et le téléchargement à partir de référentiels externes. C’est simpliste et incomplet comme description mais l’objectif ici n’est pas de s’attarder sur Gradle mais simplement d’optimiser le construction en terme de temps.
Afin d’optmiser le temps utilisé pour le téléchargement des dépendances, il est intéressant d’activer le « Offline work ». Cela permet d’utiliser les dépendances déjà disponible en cache et évite ainsi les accès inutile au réseau.
File->Settings->Build, Execution, Deployment->Gradle Offline Work

L’optmisation de Gradle ne s’arrête pas là.. Il est aussi possible d’ajuster la mémoire qui lui est assigné. Dans mon cas précis, j’ai une machine faible en CPU mais j’ai tout de même 16GB de mémoire. Je peux donc augmenter ce qui est offert à Gradle en terme de mémoire. Sur une machine qui offre moins de mémoire, on pourra être tanté de la baisser un peu. Dans mon cas, je l’ai ajusté à 4096mb.
File->Settings->Appearance & Behavior-> Memory Settings

Si le menu déroulant ne vous offre pas la quantité de mémoire désirée, vous pouvez aussi faire la modification dans le fichier gradle.properties
Il est aussi possible de créer des configurations différentes lorsque vous êtes en debug plutôt que lorsque vous faites une construction destinée à la production. Cela peut permettre d’exclure certaines étapes en développement afin de les inclure seulement lorsque l’on destine le résultat à la production. Par exemple, en développement, je pourrais utiliser seulement les ressources de langue en français et inclure les ressources pour l’anglais à la production. Cette configuration se nomme productFlavors et s’inscrit directement dans le fichier build.gradle. Compte tenu que je ne l’utilise pas encore dans mes projets, je vous laisse le soin de faire vos propres recherches à ce sujet. J’ajouterai peut-être un article ou mettrai à jour celui-ci en lien avec ce sujet.
Finalement, dépendamment des changements que vous faites, il est possible d’avoir des « profils » de performances qui détaille le temps utilisé par Gradle. Afin de les obtenir facilement, vous pouvez utiliser l’argument –profiles.
File->Settings->Build, Execution, Deployment->Gradle->Compiler

Vous retrouverez les statistiques dans des fichiers html déposés dans $buildDir/reports/profile
N’oubliez pas de retirer cette option une fois que votre optimisation est complète.
Java Virtual Machine
N’oublions pas que l’IDE repose sur la JVM. Il est possible d’ajuster certains paramètres afin d’obtenir un peu plus de performance. N’oublions pas que cela doit être adapté à la réalité physique de notre machine. Il ne s’agit pas d’augmenter les valeurs pour avoir plus de performance. Dans certains cas, cela aura pour effet de dégrader les performances.
help->Edit Customs VM Options
Voici mon fichier. Il peut être utilisé à titre de référence.
# custom Android Studio VM options, see https://developer.android.com/studio/intro/studio-config.html
# Sets the initial size (in bytes) of the heap. This value must be a multiple of 1024 and greater than 1 MB
-Xms2048m
# Specifies the maximum size (in bytes) of the memory allocation pool in bytes.
# This value must be a multiple of 1024 and greater than 2 MB.
-Xmx8192m
# Sets the maximum permanent generation space size (in bytes).
-XX:MaxPermSize=2048m
# Sets the maximum code cache size (in bytes) for JIT-compiled code.
-XX:ReservedCodeCacheSize=512m
Les paramètres disponibles sont documentés à l’adresse suivante : https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
L’antivirus
Si vous utilisez un antivirus, il est important d’exclure vos projets des zones analysées par celui-ci. Il y a trop d’antivirus sur le marché pour que je puisse décrire la méthode à suivre de chacun d’eux. Vous devez consulter la documentation de celui que vous utilisez.
Le système d’exploitation
Pour des raisons que je n’ai pas validés, il semblerait que sous l’environnement Windows, l’IDE serait moins performant. Si vous êtes sous PC, vous pouvez valider s’il performe mieux sous Linux. J’utilise personnellement Linux depuis plus de 10 ans et j’ai constaté que de manière générale, les performances de mes appareils semblent supérieurs que sur leur équivalent Windows. Je n’ai jamais validé les raisons qui pourraient expliquer cela. Peut-être que certains ajustements sous Windows permettraient d’obtenir des résultats équivalents.