web-dev-qa-db-fra.com

Gradle construit vraiment lentement avec une structure multi-projets

Lors de la construction avec gradle sur une configuration multi-projets contenant environ 140 projets/bibliothèques, le temps de construction a pris 1 heure et 22 minutes. Et j'utilisais --parallel. Et notre build ANT prend moins de 20 minutes sans construction parallèle.

Voici exactement ce que j'ai fait.

./gradlew clean
./gradlew build --parallel

J'ai fait un petit test, il semble que le dexing prenne le plus de temps. Existe-t-il un moyen d'obtenir que le processus Gradle réutilise les éléments qu'il a déjà déxés? Si les bibliothèques ont déjà été construites, il devrait réutiliser les bibliothèques déjà dexées.

J'ai vu l'option --no-rebuild, mais quand je cours avec cette option, il dit ce qui suit

File '/path/to/project/build/libs/project.aar' specified for property 'bundle' does not exist.

J'ai remplacé le chemin du fichier et le nom du projet par des éléments génériques.

Utilisation de Gradle 1.9-rc-3


Informations complémentaires (15 janvier 2014):

preDexDebug et preDexRelease ont pris TRÈS longtemps sur chaque projet. Beaucoup plus longtemps que toute autre tâche.


Progrès (15 janvier 2014):

Ok, pour l'instant, je mets preDexLibraries = false dans tous les build.gradle des dossiers. Cependant, je voudrais toujours connaître un endroit centralisé où je peux mettre cette entrée et cela affecte tous les autres build.gradle des dossiers.

Cependant, dexRelease et dexDebug prennent maintenant beaucoup de temps. Existe-t-il un moyen de dire à la génération de ne faire que dexDebug ou dexRelease et d'ignorer l'autre?


Progrès (15 janvier 2014):

L'utilisation de assembleDebug a fonctionné. Cependant, il semble toujours qu'il ne réutilise pas les bibliothèques déjà dexées. Parce que le dexing prend toujours une éternité. Cela prend environ une minute pour chaque projet. Existe-t-il un moyen d'obtenir gradle pour réutiliser les bibliothèques déjà dexées? Ou y a-t-il une autre raison pour laquelle la construction prend encore environ une heure? Notre processus ANT prend moins de 15 minutes.

24
prolink007

En faisant un clean vous supprimez en fait les bibliothèques déjà prédéfinies.
Comme suggéré dans ce fil vous pourriez gagner du temps sur les builds clean en désactivant le prédexage (car lors de la prochaine build, ils seront supprimés):

Android {
  dexOptions {
    preDexLibraries = false
  }
}
21
rciovati

Selon cet article .

À l'heure actuelle, chaque projet pré-décompose ses dépendances par lui-même. Cela signifie que 2 composants dépendant de la même bibliothèque exécuteront tous les deux un pré-dex sur classes.jar de cette bibliothèque, ce qui est idiot. Nous cherchons à résoudre ce problème.

7
prolink007

Avez-vous essayé de définir les paramètres du compilateur Gradles?

Si vous avez des dépendances distantes, chaque fois que vous exécutez le projet, il sera exploité avec des ressources distantes utilisant le réseau. Vous devez définir l'instruction du compilateur Gradles pour qu'il travaille hors ligne en utilisant:

--offline

Ici, je vous laisse une capture d'écran des paramètres du compilateur pour de meilleures performances:

enter image description here

Ou quelle est la même chose ...

enter image description here

Source: http://gradle.org/docs/current/userguide/gradle_command_line.html

2
pablopatarca