web-dev-qa-db-fra.com

Accélérer la construction de l'application multidex

Mon application possède plusieurs bibliothèques essentielles. C'est pourquoi j'ai été obligée d'utiliser la bibliothèque de prise en charge multidex. Mais là où le problème montre, c’est la vitesse de progression. Cela prend en moyenne 2 minutes à construire et quand je développe et teste c'est assez ennuyant. 

Y at-il un moyen d'accélérer mes générations de débogage? 

22
Tadej Vengust

Vous pouvez accélérer vos builds développement} en spécifiant la version minimale du SDK = 21.
La documentation officielle comprend une section entière à ce sujet. 

Exemple (à partir de la documentation):

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
        }
    }
          ...
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-Android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
  compile 'com.Android.support:multidex:1.0.0'
}

Une fois que vous avez ajouté les variantes de produit, vous pouvez utiliser la tâche devDebug (au lieu de la tâche par défaut debug) pour vos générations de développement:
- à partir de la ligne de commande: exécutez ./gradlew installDevDebug
- depuis Android Studio: ouvre la fenêtre Variantes de construction et sélectionnez la variante de construction devDebug.

Vous devez bien entendu utiliser un périphérique dont le SDK> = 21. 


Il existe également une solution pour ceux qui ne veulent pas utiliser les saveurs. Comme suggéré dans cet Gist , calculez dynamiquement la valeur minSdkVersion:

int minSdk = hasProperty('devMinSdk') ? devMinSdk.toInteger() : 14
apply plugin: 'com.Android.application'

Android {
    ...
    defaultConfig {
        minSdkVersion minSdk
        ...
    }
}

Dans cet exemple, nous vérifions si la propriété devMinSdk est définie et, si elle est vraie, nous l'utilisons. Sinon, nous avons 14 par défaut. 

Comment pouvons-nous passer la valeur devMinSdk pour construire le script? Deux options: 

Utilisation de la ligne de commande: 

./gradlew installDebug -PdevMinSdk=21

Utilisation des préférences d'Android Studio: 

Accédez à Préférences _ (Paramètres sous Windows) -> Construction, Exécution, Déploiement -> Compilateur -> mettez -PdevMinSdk=21 dans Options de ligne de commande zone de texte.

 Android Studio compiler options

60
Alex Lipov

Le cache récemment construit a été introduit par l'équipe travaillant sur le plugin Android Gradle. Vous pouvez l'activer en ajoutant Android.enableBuildCache=true à gradle.properties.

Plus d'infos ici http://tools.Android.com/tech-docs/build-cache

Pour moi, cela augmentait les temps de construction incrémentiels d'environ 30 secondes.

Il ne fonctionne pas avec l'héritage multidex (com.Android.support:multidex) introduit dans la bibliothèque de support. Il ne convient donc que si votre minSDK> = 21. Vous ne pouvez le définir que pour vos versions de développement et les versions publiées avec minSDK <21.

Cela fonctionne également sans multidexing activé.

3
sealskej

Android Studio 1.3 (actuellement dans Preview 3 ) utilise un nouveau système de construction qui améliore le temps de construction de dégradés (en réalité, comme 10-30x plus rapide). 

Plus d'informations sur la Session en direct sur Google I/O 2015

1
Hugo Gresse

Multidexing utilise plus de mémoire. Au fur et à mesure que vous vous rapprochez de la taille maximale de votre tas en Java, vous constaterez que Java passe plus de temps à faire du GC que tout travail réel, ce qui peut ralentir considérablement les choses.

Il est fortement recommandé d’augmenter la taille maximale du tas lors de l’utilisation de multidex. Ajoutez les éléments suivants à la fermeture Android dans votre fichier build.gradle pour réduire la taille maximale du segment de mémoire de 4 Go (à réduire si vous le souhaitez):

dexOptions {
    javaMaxHeapSize "4g"
}
1
Will Calderwood

Ce n'est plus nécessaire avec le dernier Android Studio 3.0

0
N Jay

Changer MinSdk en 21 a tout ramené à la normale pour moi. Maintenant, tout est compilé en 6s

0
Santhej Kallada