Question La création et l'exécution de l'application via Gradle et Android Studio est plus lente que via Eclipse


J'ai un multi-projet (~ 10 modules) dont la construction prend environ 20-30 secondes à chaque fois. Lorsque j'appuie sur Exécuter dans Android Studio, je dois attendre à chaque fois pour reconstruire l'application, ce qui est extrêmement lent.

Est-il possible d'automatiser le processus de construction dans Android Studio? Ou avez-vous des conseils sur la façon de rendre ce processus plus rapide?

Dans Eclipse, grâce à la construction automatique, exécuter le même projet sur un émulateur prend environ 3-5 secondes.

Ceci est mon fichier build.gradle (module app):

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':libraries:SharedLibs')
    compile project(':libraries:actionbarsherlock')
    compile project(':libraries:FacebookSDK')
    compile project(':libraries:GooglePlayServices')
    compile project(':libraries:HorizontalGridView')
    compile project(':libraries:ImageViewTouch')
    compile project(':libraries:SlidingMenu')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 16
    }
}

436
2018-05-27 14:20


origine


Réponses:


Matériel

Je suis désolé, mais la mise à niveau de la station de développement à SSD et des tonnes de RAM a probablement une plus grande influence que les points ci-dessous combinés.

Versions d'outils

L'augmentation des performances de construction est une priorité majeure pour les équipes de développement, alors assurez-vous d'utiliser les dernières Gradle et Plugin Android Gradle.

Fichier de configuration

Créer un fichier nommé gradle.properties dans n'importe quel répertoire:

  • /home/<username>/.gradle/ (Linux)
  • /Users/<username>/.gradle/ (Mac)
  • C:\Users\<username>\.gradle (Les fenêtres)

Ajouter:

# IDE (e.g. Android Studio) users:
# Settings specified in this file will override any Gradle settings
# configured through the IDE.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
# TODO: disable daemon on CI, since builds should be clean and reliable on servers
org.gradle.daemon=true

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e#.krd1mm27v
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=512m -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
org.gradle.parallel=true

# Enables new incubating mode that makes Gradle selective when configuring projects. 
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true

# Set to true or false to enable or disable the build cache. 
# If this parameter is not set, the build cache is disabled by default.
# http://tools.android.com/tech-docs/build-cache
android.enableBuildCache=true

Les propriétés de Gradle fonctionnent en local si vous les placez à projectRoot\gradle.properties et globalement si vous les placez à user_home\.gradle\gradle.properties. Propriétés appliquées si vous exécutez des tâches Gradle à partir de la console ou directement à partir de l'idée:

Paramètres IDE

Il est possible de modifier l'intégration de Gradle-IntelliJ à partir de l'interface graphique des paramètres IDE. Activer le "travail hors ligne" (vérifier la réponse de yava ci-dessous) désactive les demandes réseau réelles sur chaque "fichier de synchronisation".

IDE settings

Multi-dex natif

L'une des étapes les plus lentes de la construction apk est la conversion de java bytecode en un seul fichier dex. L'activation de multidex natif (minSdk 21 pour les versions de débogage uniquement) aidera l'outil à réduire la quantité de travail (vérifiez la réponse de Aksel Willgert au dessous de).

Dépendances

Préférer @aar dépendances sur les sous-projets de bibliothèque.

Rechercher un package aar sur mavenCentral, jCenter Ou utiliser jitpack.io pour construire une bibliothèque à partir de github. Si vous ne modifiez pas les sources de la bibliothèque de dépendances, vous ne devez pas la générer à chaque fois avec les sources de votre projet.

Antivirus

Envisagez d'exclure les fichiers de projet et de cache de l'analyse antivirus. C'est évidemment un compromis avec la sécurité (ne l'essayez pas à la maison!). Mais si vous changez souvent de branche, l'antivirus va réanalyser les fichiers avant de permettre à Gradle de l'utiliser, ce qui ralentit le temps de construction (en particulier le projet de synchronisation AndroidStudio avec des fichiers gradués et des tâches d'indexation). Mesurer le temps de construction et traiter le processeur avec et sans antivirus activé pour voir si elle est liée.

Profilage d'une construction

Gradle a un support intégré pour projets de profilage. Différents projets utilisent une combinaison différente de plugins et de scripts personnalisés. En utilisant --profile aidera à trouver des goulots d'étranglement.


428
2017-10-21 17:02



Vous pouvez ignorer les vérifications de mise à jour progressive.

enter image description here

Pour Windows exécutant Android Studio 1.5: Accédez à File -> Settings -> Build, Execution, Deployment -> Build tools -> Gradle -> Check Offline work (as shown in image)

de ~ 30 + sec à ~ 3 sec


146
2018-05-14 07:35



Nous avons cherché partout pour cela et avons finalement trouvé une solution qui fonctionne pour nous. Activation des générations parallèles (sur OSX: preferences -> compiler -> gradle -> "Compile independent modules in parallel") et en activant 'make project automatically' l'a ramené de ~ 1 min à ~ 20 sec. Merci à / u / Covalence.

http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_android_studio_way_slower_to_build/


33
2017-08-10 19:03



J'ai récemment acheté un nouveau disque SSD et je suis passé de Windows à Linux. Mes temps de construction sont maintenant d'un ordre de grandeur plus rapide et ne sont plus ennuyants.

Bien qu'il ne réponde pas directement à votre question quant à savoir pourquoi il est plus lent que eclipse, il montre que le processus est limité par le disque et qu'une mise à niveau vers un disque SSD peut être une solution (plutôt coûteuse). Je suppose qu'il y aura des gens googler la question et se retrouver ici, qui pourrait apprécier mon expérience.


23
2018-03-23 22:49



Si vous utilisez des services Google Play, en fonction des bibliothèques dont vous avez besoin au lieu du blob complet, vous pouvez accélérer les choses.

Si votre seul besoin est de cartes, utilisez:

compile 'com.google.android.gms:play-services-maps:6.5.+'

au lieu de:

compile 'com.google.android.gms:play-services:6.5.+'

Ce dernier apporte des méthodes 20k (voir blog) dans le classpath, qui pourrait faire basculer le nombre total de méthodes sur 64k.

Cela forcerait l'utilisation de proguard ou multidex même pour les versions de débogage. Pour l'un de mes projets, j'ai eu les temps de construction suivants

  • multidex build (avec supportlibrary) ~ 40sec
  • proguard build ~ 20sec
  • construire quand la limite de la méthode <64k ~ 5sec

Si vous développez sur SDK 21+, il serait possible d'optimiser les builds multidex comme indiqué dans la documentation android

android {
    productFlavors {
        // Define separate dev and prod product flavors.
        dev {
            // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
            // to pre-dex each module and produce an APK that can be tested on
            // Android Lollipop without time consuming dex merging processes.
            minSdkVersion 21
        }
        prod {
            // The actual minSdkVersion for the application.
            minSdkVersion 14
        }
    }
    ...
}

18
2018-05-06 07:50



La réponse acceptée est pour les anciennes versions de studio Android et la plupart d'entre eux fonctionne encore maintenant. La mise à jour du studio Android a rendu le tout un peu plus rapide. Ne vous souciez pas de spécifier la taille du tas car elle augmentera automatiquement avec l’augmentation de Xms et de Xmx. Voici quelques modifications avec les VMoptions

  1. Dans le dossier bin, il y a un fichier studio.vmoptions pour définir la configuration de l'environnement. Dans mon cas, c'est studio64.vmoptions Ajoutez les lignes suivantes si elles ne sont pas déjà ajoutées et enregistrez le fichier. Dans mon cas, j'ai 8 Go de RAM.

    -Xms4096m
    -Xmx4096m
    -XX:MaxPermSize=2048m
    -XX:+CMSClassUnloadingEnabled
    -XX:+CMSPermGenSweepingEnabled 
    -XX:+HeapDumpOnOutOfMemoryError
    -Dfile.encoding=utf-8`
    
  2. Démarrer le studio android. Allez dans Fichier-> Paramètres-> Générer, Exécution, Déploiement-> Compilateur

    • Vérifier compiler des modules indépendants en parallèle
    • Dans les options de la ligne de commande, écrivez: --offline
    • Vérifier le projet automatiquement
    • Vérifiez la configuration à la demande

En cas d'utilisation de mac, au début, je ne pouvais pas trouver les options vmoptions. Quoi qu'il en soit, voici un bel article sur la façon dont nous pouvons changer les vmoptions dans MAC OSX. Citant de cet article ici.

Ouvrez votre terminal et mettez cette commande pour ouvrir vmoptions dans MAC OSX:

open -e /Applications/Android\ Studio.app/Contents/bin/studio.vmoptions

15
2017-07-26 04:56



Accélérer Build Gradle dans Android Studio 3.0

Avez-vous déjà l'impression que vous attendez que les builds se terminent dans Android Studio pour quelques minutes? Moi aussi. Et c'est plutôt ennuyant. Heureusement, il existe plusieurs façons d'améliorer cela. Android utilise Gradle pour la construction. La dernière version est 2.14.1 a une énorme amélioration des performances par rapport aux versions précédentes (voir les notes de version pour plus de détails).

Étape 1: Mettre à jour la version Gradle Un moyen plus simple d'y parvenir est d'accéder à: Ouvrir les paramètres du module (votre projet)> Structure du projet

enter image description here

METTRE À JOUR

Changer pour Version Gradle: 4.1 et Changer pour Version du plug-in Android: 3.0.0

enter image description here

Télécharger la distribution de Gradle Release de https://services.gradle.org/distributions/gradle-3.1-all.zip Et copiez-le dans le dossier Gradle:

enter image description here

La dernière étape consiste à ajouter votre contribution dans Paramètres> Gradle

enter image description here

N'oubliez pas de cliquer sur Appliquer pour enregistrer les modifications.

Étape 2: Activer le mode hors ligne, le démon Gradle et la construction parallèle pour le projet Le mode hors connexion indique à Gradle d'ignorer les vérifications de mise à jour à jour. Gradle demande des dépendances à chaque fois et avoir cette option fait qu'elle utilise simplement ce qui est déjà sur la machine pour les dépendances. Allez dans Gradle du studio Android Setting et cliquez dans la zone de travail Hors ligne.

enter image description here

  1. Aller au compilateur à partir de android studio Définir et ajouter "- hors ligne" dans la boîte de ligne de commande et cliquez sur Compiler des modules indépendants en parallèle.

enter image description here

L'étape suivante consiste à activer le démon Gradle et la construction parallèle pour votre projet. Les constructions parallèles entraîneront la construction parallèle de vos projets avec plusieurs modules (builds multi-projets dans Gradle), ce qui devrait accélérer la construction de projets volumineux ou modulaires.

enter image description here

Ces paramètres pourraient être activés en modifiant un fichier nommé gradle.properties dans le répertoire des scripts Gradle (c'est-à-dire, ~ / .gradle / gradle.properties). Certaines de ces options (par exemple Complie modules en parallèle) sont disponibles depuis Android Studio et activées par par défaut, mais les mettre dans le fichier gradle.properties les activera lors de la construction à partir du terminal et s'assurera également que vos collègues utiliseront les mêmes paramètres. Mais si vous travaillez en équipe, parfois vous ne pouvez pas commettre ce genre de choses.

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit org.gradle.parallel=true
# When set to true the Gradle daemon is used to run the build. For local developer builds this is our favorite property.
# The developer environment is optimized for speed and feedback so we nearly always run Gradle jobs with the daemon.
 org.gradle.daemon=true

L'utilisation du démon accélérera le démarrage de vos builds car il n'aura pas besoin de démarrer l'application Gradle entière à chaque fois. Le démon Gradle n'est pas activé par défaut, mais il est recommandé de toujours l'activer pour les machines des développeurs (mais en le laissant désactivé pour les serveurs d'intégration continue). FAQ sur ce mode pourrait être trouvé ici https://docs.gradle.org/current/userguide/gradle_daemon.html. Le réglage des builds parallèles peut être dangereux pour certains projets. L'exigence est que tous vos modules doivent être découplés ou votre build pourrait échouer (voir http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects pour plus de détails).

Étape 3: Activer les paramètres de mémoire dexign et tweak incrémentiels Vous pouvez accélérer vos builds en activant le dexing incrémentiel. Dans le fichier de construction de votre module:

enter image description here

Ajoutez cette option à votre bloc Android:

dexOptions {
    incremental true
}

Dans ce bloc dexOptions, vous pouvez également spécifier la taille du tas pour le processus dex, par exemple:

dexOptions {
    incremental true
    javaMaxHeapSize "12g"
}

Où "12g" est de 12 Go de mémoire. Des informations supplémentaires à ce sujet pourraient être trouvées ici google.github.io/android-gradle-dsl/current/ Vous pouvez également configurer les paramètres Gradle dans le fichier de paramètres, par ex. augmentez la taille maximale du tas au cas où vous auriez un grand projet:

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Voir toute la liste des paramètres ici: https://docs.gradle.org/current/userguide/userguide_single.html#sec:gradle_configuration_properties pour plus de détails.

Étape 4: Désactiver l'antivirus Envisagez d'exclure les fichiers de projet et de cache de l'analyse antivirus. C'est évidemment un compromis avec la sécurité. Mais si vous basculez beaucoup entre les branches, l'antivirus va alors réanalyser les fichiers avant d'autoriser le processus progressif pour l'utiliser, ce qui ralentit le temps de création (en particulier le projet de synchronisation Android Studio avec des fichiers dégradés et des tâches d'indexation). Mesurer le temps de construction et traiter le processeur avec et sans antivirus activé pour voir si elle est liée. J'espère que ça aide. Laissez un commentaire si vous avez des questions ou d'autres conseils pour améliorer les performances de la construction.

lien utile 


15
2018-04-24 17:29



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

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

Ajoutez cette ligne au fichier:

org.gradle.daemon=true

Pour moi, la vitesse est maintenant égale à Eclipse.

La source: https://www.timroes.de/2013/09/12/speed-up-gradle/


14
2018-03-12 11:14



Vous pouvez accélérer le processus si vous utilisez gradle à partir de la ligne de commande. Il y a beaucoup d'optimisation à faire pour les développeurs IDE. Mais c'est juste une première version.

Pour plus d'informations, lisez cette discussion sur g + avec certains devs.


12
2018-06-24 22:11



Si quelqu'un travaille sur un projet qui est synchronisé via Subversion et que cela se produit encore, je pense que cela peut ralentir le processus de flux de travail dans Android Studio. Par exemple, si cela fonctionne très lentement tout en: défilant dans une classe, xml etc., alors que mon application est toujours en cours d'exécution sur mon appareil.

  • Accédez à Contrôle de version dans Préférences et définissez-le de Subversion sur Aucune.enter image description here

10
2017-10-08 15:05



Mettre à jour après Android Studio 2.3

Toutes les réponses sont excellentes et je vous encourage à utiliser ces méthodes avec celle-ci pour améliorer la vitesse de construction.

Après la sortie d'Android 2.2 en septembre 2016, Android a publié expérimental construire la fonctionnalité de cache pour accélérer gradle performances de construction, qui est maintenant officielle de Android Studio 2.3 Canary. (Note de sortie officielle) 

Il introduit une nouvelle fonctionnalité de cache de build, activée par défaut, qui permet d'accélérer les temps de compilation (builds complets, builds incrémentaux et exécution instantanée) en stockant et en réutilisant des fichiers / répertoires créés dans des builds précédents du même Android ou différents. projet.

Comment utiliser:

Ajouter la ligne suivante dans votre gradle.properties fichier

android.enableBuildCache = true
# Set to true or false to enable or disable the build cache. If this parameter is not set, the build cache is enable by default.

Nettoyez le cache: 

  • Il y a une nouvelle tâche Gradle appelée cleanBuildCache pour que vous puissiez nettoyer plus facilement le cache de build. Vous pouvez l'utiliser en tapant ce qui suit dans votre terminal:

    ./gradlew cleanBuildCache

  • OU Vous pouvez nettoyer le cache pour Android studio 2.2 en supprimant tous les fichiers stockés à l'emplacement

    C:\Users\<username>\.android\build-cache


7
2017-09-23 06:53