Question

à l'heure actuelle, nous sommes dans une situation où les temps de construction sont de 2 minutes 30 secondes pour un changement très simple.Ceci (par rapport à ANT) est incroyablement lent et tue la productivité de toute l'équipe.J'utilise Android Studio et j'utilise "Utiliser la distribution Gradle locale".J'ai essayé de donner plus de mémoire pour gradle :

org.gradle.jvmargs=-Xmx6096m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Beaucoup plus de mémoire.ET IL DONNE TOUJOURS DES ERREURS DE MÉMOIRE de temps en temps.

Exception dans le thread "pool-1-thread-1" java.lang.OutOfMemoryError :Limite de frais généraux du GC dépassée

Incroyable.J'utilise l'option parallèle et le démon :

org.gradle.parallel=true

org.gradle.daemon=true

Cela n'aide pas vraiment.

J'ai mis les paramètres susmentionnés dans ~/.gradle/gradle.properties (et je doutais même que le studio Android l'ignore, alors j'ai testé - il ne l'ignore pas).

Toujours à partir du terminal, j'obtiens un temps de construction de 1h30 contre 2h30 dans Android Studio, donc je ne sais pas ce qui ne va pas.1h30, c'est TOUJOURS FOLLE par rapport à Ant.Si vous savez ce que fait Android Studio (ou ignore ou réécrit en tant que configuration progressive), je serais reconnaissant de le savoir.

Donc, juste CMD + B (compilation simple) est super rapide après les modifications, comme 7 secondes.Mais lorsqu'il s'agit d'exécuter l'application, elle démarre la tâche dexXxxDebug, qui est en train de nous tuer.J'ai essayé de mettre

dexOptions {
    preDexLibraries = false
}

Cela n'aide pas.

Je comprends que Gradle n'est probablement pas encore prêt pour les environnements de production, mais je commence à regretter notre décision d'y passer si tôt.Nous avons beaucoup de modules, ce qui fait probablement partie du problème, mais ce n'était pas un problème avec Ant.

Toute aide appréciée, Dan

Quelques informations supplémentaires sur les temps d'exécution :

Description Durée

Total Build Time    1m36.57s
Startup 0.544s
Settings and BuildSrc   0.026s
Loading Projects    0.027s
Configuring Projects    0.889s
Task Execution  1m36.70s

Le mangeur de temps ::app:dexDebug 1m16.46s

Était-ce utile?

La solution

Je ne sais pas vraiment pourquoi Android Studio est plus lent que la ligne de commande, mais vous pouvez accélérer vos builds en activant le dexing incrémentiel.Dans le fichier de build de votre module, ajoutez cette option à votre android bloc:

dexOptions {
    incremental true
}

En cela dexOptions block, vous pouvez également spécifier la taille du tas pour le processus dex, par exemple :

dexOptions {
    incremental true
    javaMaxHeapSize "4g"
}

Ces options sont extraites d'un fil de discussion sur la liste de diffusion adt-dev (https://groups.google.com/forum/#!topic/adt-dev/r4p-sBLl7DQ) qui a un peu plus de contexte.

Autres conseils

Notre équipe était confrontée au même problème. Notre projet dépasse la limite de méthode pour Dex (> 65k). Donc, dans le projet de bibliothèque, nous mettons ci-dessous des options dans Build.Gradle:

dexOptions {
    jumboMode = true
    preDexLibraries = false
}

Dans notre projet Build.Gradle:

 dexOptions {
    jumboMode = true
//  incremental true
}

Auparavant, nous avions incrémental vrai.Après avoir commenté cela, il faut environ 20 ans pour fonctionner par rapport à 2 minutes de 30 secondes. Je ne sais pas que cela peut résoudre votre problème.Mais cela peut aider aux autres.:)

Disclaimer: Ce n'est pas une solution - c'est une déclaration qu'il n'y a pas de solution avec sources de liaison pertinentes pour prouver .

Étant donné que toutes les réponses ici ne résolvent pas un problème qui se pose depuis 2014, je vais aller de l'avant et poster quelques liens qui décrivent un problème très similaire et présentent des modifications spécifiques au système d'exploitation qui pourraient ou non aider, Depuis que OP ne semblait pas la spécifier, et des solutions varient beaucoup à travers eux.

premier est le Problème réel AOSP Bug-Tracker, faisant référence à la parallélisation < / a>, avec beaucoup de choses pertinentes, toujours ouvertes et toujours avec beaucoup de gens se plaignant comme la version 2.2.1. J'aime le gars qui note la question (une high-priotity un à cet égard) ID, y compris "666", ne pas être une coïncidence. La façon dont la plupart des gens décrivent que les programmes de musique et le mouvement de la souris bégayant pendant les constructions se sent comme regarder dans un miroir ...

Vous devriez noter que les gens signalent de bonnes choses avec le processus Lasso pour Windows, tandis que je ne vois aucune signalement de rien de bien avec la Renise ou la limitation de la CPU dans * Nix variantes.

Ce gars (qui indique-t-il qu'il n'utilise pas Gradle) présente des trucs très gentils dans une demande ubuntu, qui ne fait malheureusement pas 't fonctionne dans mon cas.

Voici une autre alternative qui limite les fils d'exécution des grades, mais cela ne s'est pas vraiment amélioré dans mon scénario probablement dû à ce que quelqu'un dit sur un autre lien sur Studio frayant plusieurs instances de grades (tandis que le paramètre n'affecte que le parallélisme d'un instance).

Notez que tout cela remonte à l'original «666», problème de grande priorité ...

Personnellement, je ne pouvais pas tester de nombreuses solutions parce que je travaille sur une machine à Ubuntu gérée (sans root privé) et que je ne peux pas apt-get / rence, mais je peux vous dire que j'ai un I7-4770, 8 Go de RAM et un SSD hybride, et j'ai ce problème même après beaucoup de mémoire et grades ajustements au fil des ans . C'est une question de résolvabilité et je ne comprends pas comment Google n'a pas commis les ressources humaines nécessaires au projet de gradle pour fixer quelque chose qui est au cœur du développement de la plate-forme la plus importante qu'ils construisent.

Une chose à noter sur mon environnement est la suivante: je travaille dans un projet de studio multi-dépendances, avec environ 10 sous-projets, tous construisant eux-mêmes et remplissant le pipeline des grades.

Lorsque vous passez une valeur, vous pouvez ajouter la lettre «K» pour indiquer des kilo-octets, «M» pour indiquer des mégaoctets ou «G» pour indiquer des gigaoctets.

'- hors ligne a résolu mon problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top