165 votes

Accélération de la construction d'Android studio Gradle

Depuis la dernière mise à jour (Build du 25 juin), tout changement dans le studio Android Gradle est douloureusement lent. Et il semble également suivre automatiquement les modifications lorsque vous éditez le fichier et recompilez au moment du keyup.

Chaque modification prend plusieurs minutes sur mon i5.

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

1voto

alicanozkara Points 1908

Ajouter un build.gradle fichier :

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

J'espère que cela vous aidera.

1voto

user2288580 Points 41

J'utilise un i7 de 5ème génération avec Windows 10 et un Solid State 1TB. J'ai compressé le dossier Android Studio Projects et j'ai obtenu un gain d'environ 80 %. J'espère que cela vous aidera.

Je l'ai ensuite combiné avec les solutions ci-dessus, c'est-à-dire (org.gradle.parallel=true, org.gradle.daemon=true). L'augmentation des performances était assez impressionnante.

En outre :

Toutes les réponses ci-dessus sont tout à fait correctes, mais je dois dire, en tant que développeur Android expérimenté (depuis 4 ans et demi), que.. : Aucun développeur Android/Gradle ne devrait travailler sur une machine équipée d'un lecteur de type spinner, vous devez acheter un Solid State. Nous appuyons tous sur le bouton de lecture dans l'IDE des centaines de fois par jour. Lorsque je suis passé d'un disque dur à un SSD (après Gradle), ma vitesse et mon efficacité étaient littéralement 2 à 4 fois plus rapides et je vous promets que je n'exagère PAS.

Je ne parle pas d'avoir une machine avec un petit SSD et un gros spinner, je parle d'un gros SSD. Si vous avez déjà une machine avec un petit SSD et un grand disque, vous pouvez mettre à niveau le petit disque vers, par exemple, un SSD de 500 Go et définir le SSD comme votre disque d'OS principal avec vos outils de développement installés dessus.

Si vous travaillez dans un environnement où tout va très vite, montrez ce message à votre patron. Un disque dur SSD de 1 To vous coûtera environ 300 £ (TVA comprise), ou environ 160 £ pour un disque dur SSD de 500 Go. Selon que vous êtes un développeur Android junior ou senior, le disque sera rentabilisé (en frais de salaire) en 1 à 2 semaines de travail, ou environ 2 jours et demi à 5 jours de travail si vous investissez dans un SSD plus petit, disons de 500 Go.

Beaucoup de développeurs pourraient dire que ce n'est pas le cas, mais c'est le cas pour Gradle, car le système Gradle est très dur sur l'accès direct au disque. Si vous travaillez avec .NET/C#/VB Net ou d'autres outils de développement, vous ne remarquerez pas une grande différence, mais la différence dans Gradle est ENORME. Si vous suivez ce post, je vous promets que vous ne serez pas déçu. Personnellement, j'utilise un i7 de cinquième génération avec 8 Go de RAM, livré à l'origine avec un Spinner de 1 To. Je l'ai mis à niveau avec un Samsung SSD 840 EVO 1 To et je n'ai jamais regardé en arrière depuis. J'ai acheté le mien chez : https://www.aria.co.uk .

J'espère que cela vous aidera. Je dois également préciser que ce post n'est PAS motivé par des raisons commerciales, je recommande simplement Aria car je les ai utilisés à plusieurs reprises auparavant et ils ont toujours été fiables.

1voto

Ashish Kumar Points 119

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

org.gradle.configureondemand=true - Cette commande indique à gradle de ne construire que les projets qu'il doit vraiment construire. Utiliser Daemon-org.gradle.daemon=true - Daemon maintient l'instance de gradle opérationnelle en arrière-plan, même après la fin de la construction. Cela supprime le temps nécessaire à l'initialisation de gradle et réduit considérablement le temps de construction.

org.gradle.parallel=true - Permet à gradle de construire votre projet en parallèle. Si vous avez plusieurs modules dans votre projet, en activant cette option, gradle peut exécuter des opérations de construction pour des modules indépendants en parallèle.

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

Assurez-vous que la dépendance dynamique n'est pas utilisée, c'est-à-dire qu'il ne faut pas utiliser 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'il construira l'application. Utilisez plutôt des versions fixes, par exemple 'com.Android.support:appcompat-v7:27.0.2'.

1voto

Rajesh Sharma Points 111

Ouvrir gradle.properties du dossier Android et décommentez les lignes mises en évidence et fournissez les valeurs de mémoire selon la configuration de votre machine. J'ai 8gb de RAM sur ma machine donc j'ai donné un maximum de 4096mb et 1024mb respectivement.

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
//Uncomment below line for providing your system specific configuration
#org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError - Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
#http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 //Uncomment below line to allow parallel process execution.
 #org.gradle.parallel=true

Mon temps de construction a été réduit de moitié après cela. Bonne construction !

0voto

Serg Burlaka Points 674

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 construction car le système de construction doit prendre des décisions complexes concernant les classes qui doivent être incluses dans le fichier DEX primaire et celles qui peuvent être incluses dans les fichiers DEX secondaires. Cela signifie que les constructions incrémentielles utilisant multidex prennent généralement plus de temps et peuvent potentiellement ralentir votre processus de développement.

mais vous pouvez l'optimiser :

Pour limiter les temps de construction incrémentielle plus longs, vous devriez utiliser le pré-dexing pour réutiliser la sortie multidex entre les constructions.

Si vous utilisez Android Studio 2.3 ou une version ultérieure, l'IDE utilise automatiquement cette fonctionnalité lors du déploiement de votre application sur un appareil fonctionnant sous Android 5.0 (niveau API 21) ou une version ultérieure.

Vous devez donc définir le minSdkVersion à 21 ou supérieur !

Mais si votre version de production doit supporter minSdkVersion inférieur à 21, par exemple 19

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

    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 {
    compile 'com.android.support:multidex:1.0.3'
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X