Le studio Android Gradle accélère

Depuis la dernière mise à jour (à partir du 25 juin), tout changement dans le studio Android Gradle est extrêmement lent. Et il semble aussi que les modifications du système soient automatiques lorsque vous éditez le fichier et que vous le recomstackz au clavier.

Chaque changement prend plusieurs minutes sur mon i5.

Une idée de la façon dont je peux accélérer mes changements Gradle?

Les développeurs y travaillent. Comme je l’ai posté dans cette réponse, la solution la plus rapide à l’heure actuelle consiste à utiliser gradle à partir de la ligne de commande et à passer à des bibliothèques binarys pour tous les modules que vous ne développez pas. Sur g +, il y a une discussion avec les développeurs à ce sujet.

Fait définitivement la différence: Comment… Accélérer le temps de construction de Gradle

Créez simplement un fichier nommé gradle.properties dans le répertoire suivant:

 /home//.gradle/ (Linux) /Users//.gradle/ (Mac) C:\Users\\.gradle (Windows) 

Ajoutez cette ligne au fichier:

 org.gradle.daemon=true 

Après avoir modifié ces parameters, mon temps de compilation a été réduit de 10 minutes à 10 secondes.

Étape 1:

Paramètres (Ctrl + Alt + S) ->

Construire, exécuter, déployer ->

Compilateur ->

Tapez ” --offline ” dans la zone Options de ligne de commande.

Étape 2:

cochez la case «Comstackr des modules indépendants en parallèle».

& cliquez sur Appliquer -> OK

entrer la description de l'image ici

Étape 3: Dans votre fichier gradle.properties -> Ajouter les lignes suivantes

 org.gradle.jvmargs=-Xmx2048M -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.configureondemand=true org.gradle.daemon=true 

Mettre à jour:

Si vous utilisez le studio Android 2.0 ou supérieur, essayez Instant Run

Paramètres → Créer, exécuter, déployer → Exécuter instantanément → Activer l’exécution instantanée.

Plus d’infos sur Instant Run – https://developer.android.com/studio/run/index.html#instant-run

J’ai pu réduire la construction de mon gradle de 43 secondes à 25 secondes sur mon ancien ordinateur portable core2duo (sous Linux mint) en ajoutant ce qui suit au fichier gradle.properties dans android studio.

 org.gradle.parallel=true org.gradle.daemon=true 

source sur la raison pour laquelle la configuration du démon accélère la construction: https://www.timroes.de/2013/09/12/speed-up-gradle/

Suivre les étapes le rendra 10 fois plus rapide et réduira le temps de construction de 90%

Commencez par créer un fichier nommé gradle.properties dans le répertoire suivant:

 /home//.gradle/ (Linux) /Users//.gradle/ (Mac) C:\Users\\.gradle (Windows) 

Ajoutez cette ligne au fichier:

 org.gradle.daemon=true org.gradle.parallel=true 

Et cochez ces options dans Android Studio

entrer la description de l'image ici

entrer la description de l'image ici

Il existe une version plus récente de gradle (ver 2.4).

Vous pouvez définir cela pour vos projets en ouvrant la boîte de dialog “Structure du projet” à partir du menu Fichier.

Project Structure -> Project -> Gradle version

et réglez-le sur «2.4».
Vous pouvez en savoir plus sur l’amélioration des performances à ce lien .

Avec Android Studio 2.1, vous pouvez activer “Dex In Process” pour des applications plus rapides.

entrer la description de l'image ici

Vous pouvez obtenir plus d’informations à ce sujet ici: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e#.vijksflyn

C’est ce que j’ai fait et ma vitesse de construction graduellement améliorée! de 1 minute à 20 secondes pour la première construction et les versions suivantes sont passées de 40 à 5 secondes.

Dans le fichier gradle.properties Ajoutez ceci:

 org.gradle.jvmargs=-Xmx8192M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 

Dans les arguments de la ligne de commande via Aller à Fichier> Autres parameters> Paramètres par défaut> Construire, exécuter, déployer> Complier et append les arguments suivants aux arguments de la ligne de commande

Ajoute ça:

 --debug --stacktrace -a, --no-rebuild -q, --quiet --offline 

Voir l'image ici

Essayez d’éviter d’utiliser un Mac / PC ne disposant que de 8 Go de RAM lors du développement Android. Dès que vous lancez un seul émulateur (Genymotion ou autre), vos temps de construction deviennent extrêmement lents dans Android Studio avec des versions progressives. Cela se produit même si vous effectuez un simple changement d’une ligne sur 1 fichier source.

Fermer l’émulateur et utiliser un appareil réel aide beaucoup, mais bien sûr, cela est très limitatif et moins flexible. Réduire le paramètre d’utilisation de la RAM de l’émulateur peut aider, mais le meilleur moyen est de vous assurer que votre ordinateur portable dispose d’au moins 12 à 16 Go de RAM.

Mise à jour (juin 2017): Il existe maintenant plusieurs articles sur good medium.com qui expliquent comment accélérer le développement d’Android Studio en détail, et même sur des machines de 8 Go:

Le consensus résumé est le suivant:

Créez un fichier gradle.properties (global à ~/.gradle/gradle.properties ou local pour projeter) et ajoutez les lignes suivantes:

 org.gradle.daemon=true org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.configureondemand=true 
 dexOptions { incremental true javaMaxHeapSize "4g" } 
  1. Activer le travail hors ligne

  2. Améliorez les performances de Gradle en ajoutant le code suivant dans gradle.properties

org.gradle.daemon = true
org.gradle.parallel = true

Guide étape par étape: http://www.viralandroid.com/2015/08/how-to-make-android-studio-fast.html

Selon cette page de l’ équipe Android de Wikimedia Apps , une bonne façon d’optimiser les versions de Gradle consiste à append ces lignes à votre fichier ~ / .gradle / gradle.properties.

 org.gradle.daemon=true org.gradle.parallel=true org.gradle.configureondemand=true org.gradle.jvmargs=-Xmx2048M 

Pour ceux qui n’ont pas le fichier, il y a deux façons de le faire:

  1. Ajoutez le fichier localement dans votre projet en créant un fichier appelé gradle.properties dans la racine du projet ou,

  2. Vous pouvez les définir globalement pour tous vos projets en créant le même fichier dans votre répertoire personnel (% UserProfile% .gradle sous Windows , ~ / .gradle sous Linux et Mac OS X )

    Il est recommandé de définir les propriétés dans votre répertoire personnel plutôt que dans un projet.

Vous pouvez également utiliser la ligne de commande pour obtenir de meilleures performances. Vous pouvez utiliser la commande ./gradlew depuis le dossier racine de votre projet depuis Linux ou utiliser le fichier gradlew.bat comme gradlew Parmi les commandes ci-dessus pour une version Gradle donnée, il télécharge la dissortingbution Gradle correspondante et l’utilise pour exécuter la génération.

Lors de l’importation d’un projet Gradle via son wrapper, votre EDI peut demander à utiliser la dissortingbution Gradle ‘tout’. Ceci est parfaitement correct et aide l’EDI à compléter le code pour les fichiers de construction. Non seulement cela signifie que vous n’avez pas à installer manuellement Gradle vous-même, mais vous êtes également sûr d’utiliser la version de Gradle pour laquelle la version est conçue. Cela rend vos historiques plus fiables. pour plus d’informations, reportez-vous à la section Exécution d’une construction avec le wrapper

Pour des versions plus rapides, augmentez la taille maximale de segment de mémoire pour le démon Gradle à plus de 2048 Mo.

Faire ce set
org.gradle.jvmargs=-Xmx2048M
dans le projet gradle.properties .

Ajoutez un fichier build.gradle :

 android { ... dexOptions { javaMaxHeapSize "4g" //specify the heap size for the dex process } ... } 

J’espère que ça aide.

Je lance un i7 de 5ème génération avec Windows 10 et un Solid State de 1 To. J’ai compressé le dossier Android Studio Projects et obtenu environ 80% de gain. J’espère que cela t’aides.

Je l’ai ensuite combiné avec les solutions ci-dessus, à savoir (org.gradle.parallel = true, org.gradle.daemon = true). Le gain de performance a été assez impressionnant.

Aditionellement:

Toutes les réponses ci-dessus sont tout à fait correctes, mais je dois dire qu’en tant que développeur Android d’expérience (de 4 ans et demi): Aucun développeur Android / Gradle ne devrait travailler sur une machine avec un disque dur, État solide. Nous frappons tous ce bouton de lecture dans l’IDE ​​100 fois par jour. Quand je suis passé de spinner à SSD (post Gradle), ma vitesse et mon efficacité étaient littéralement 2 à 4 fois plus rapides et je vous promets que je n’exagère PAS ici.

Maintenant, je ne parle pas d’avoir une machine avec un petit SSD et un gros disque, je parle d’un gros SSD. Si vous avez déjà une machine avec un petit SSD et un gros disque dur, vous pouvez mettre à niveau le petit disque avec un SSD de 500 Go et configurer le disque SSD en tant que disque principal de votre système d’exploitation avec vos outils de développement.

Donc, si vous travaillez dans un environnement dynamic, montrez ce message à votre patron. Un SSD de 1 To vous coûtera environ £ 300 (TVA incluse), soit environ £ 160 pour un SSD de 500 Go. Selon si vous êtes un développeur Android junior ou senior, le lecteur paiera lui-même (en dépenses salariales) en 1 à 2 semaines de travail, ou environ 2 à 5 jours ouvrables si vous investissez dans un plus petit; disons SSD 500Go.

Beaucoup de développeurs peuvent prétendre que ce n’est pas le cas, mais c’est le cas pour Gradle, car le système Gradle est très difficile sur l’access direct au disque. Si vous travaillez avec .NET / C # / VB Net ou d’autres outils de développement, vous ne remarquerez pas beaucoup de différence, mais la différence avec Gradle est énorme. Si vous agissez sur ce post, je vous le promets, vous ne serez pas déçu. Personnellement, j’utilise la cinquième génération i7 avec 8 Go de RAM qui était à l’origine livrée avec un 1 To Spinner et je l’ai mise à niveau vers un Samsung SSD 840 EVO 1 To et je n’ai jamais regretté depuis. J’ai acheté le mien depuis: https://www.aria.co.uk .

J’espère que cela t’aides. Aussi, je dois dire que ce n’est PAS un poste commercialement motivé, je recommande simplement Aria comme je les ai déjà utilisé plusieurs fois et ils ont toujours été fiables.

Quelques commandes que nous pouvons append au fichier gradle.properties:

org.gradle.configureondemand = true – Cette commande indiquera à graduel de ne construire que les projets qu’il a réellement besoin de construire. Use Daemon – org.gradle.daemon = true – Daemon maintient l’instance de gradation en arrière-plan, même après la fin de la génération. Cela supprimera le temps nécessaire à l’initialisation de la gradation et diminuera considérablement la synchronisation de votre build.

org.gradle.parallel = true – Autorise graduellement à construire votre projet en parallèle. Si vous avez plusieurs modules dans votre projet, puis en les activant, gradle peut exécuter des opérations de génération pour des modules indépendants parallèlement.

Augmenter la taille du tas – org.gradle.jvmargs = -Xmx3072m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8 – Depuis Android Studio 2.0, grade utilise dex dans le processus pour réduire les délais de construction du projet. Généralement, lors de la création des applications, plusieurs processus dx s’exécutent sur différentes instances de machine virtuelle. Mais à partir d’Android Studio 2.0, tous ces processus dx s’exécutent dans la seule VM et cette VM est également partagée avec le gradle. Cela réduit considérablement le temps de génération car tout le processus dex s’exécute sur les mêmes instances de machine virtuelle. Mais cela nécessite une plus grande mémoire pour accueillir tous les processus dex et décomposer. Cela signifie que vous devez augmenter la taille de segment de mémoire requirejse par le démon gradle. Par défaut, la taille de tas du démon est d’environ 1 Go.

Assurez-vous que la dépendance dynamic n’est pas utilisée. c’est-à-dire n’utilisez pas l’implémentation “com.android.support:appcompat-v7:27.0.+”. Cette commande signifie que gradle ira en ligne et vérifiera la dernière version à chaque fois qu’elle créera l’application. Au lieu de cela, utilisez des versions fixes, par exemple “com.android.support:appcompat-v7:27.0.2”

Cela se produit souvent lorsque vous avez activé le multidex dans votre projet. Cela peut potentiellement ralentir votre processus de développement! Selon doc :

La configuration multidex nécessite une augmentation significative du temps de traitement de la génération car le système de génération doit prendre des décisions complexes sur les classes à inclure dans le fichier DEX principal et sur les classes pouvant être incluses dans les fichiers DEX secondaires. Cela signifie que les versions incrémentielles utilisant multidex prennent généralement plus de temps et peuvent potentiellement ralentir votre processus de développement.

mais vous pouvez optimiser ceci:

Pour atténuer les temps de génération incrémentiels plus longs, vous devez utiliser le pré-traitement pour réutiliser les sorties multidex entre les versions.

Si vous utilisez Android Studio 2.3 ou version ultérieure, l’EDI utilise automatiquement cette fonctionnalité lors du déploiement de votre application sur un périphérique exécutant Android 5.0 (API niveau 21) ou supérieur.

Donc, vous devez définir le minSdkVersion à 21 ou supérieur !

Mais si votre version de production doit prendre en charge minSdkVersion inférieure à 21, par exemple 19

vous pouvez utiliser productFlavors pour définir minSdkVersion 21 pour votre version dev :

  android { defaultConfig { ... multiDexEnabled true // The default minimum API level you want to support. minSdkVersion 15 } productFlavors { // Includes settings you want to keep only while developing your app. dev{ //the IDE automatically uses pre-dexing feature to mitigate longer incremental when deploying your app to a device running Android 5.0 ! minSdkVersion 21 } prod { } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { comstack 'com.android.support:multidex:1.0.3' }