33 votes

La compilation Android est lente (avec Eclipse)

Quand je change tout .fichier java et de la construction, la compilation a 16 secondes. Je ne comprends pas pourquoi il devrait être si lent!?

Je l'ai activé la sortie verbeuse pour Andoroid.

Window > Preferences > Android > Build output > Verbose.

Le résultat de sortie (une Console > Android) est:

[19:46:10] Refreshing resource folders.
[19:46:10] Starting incremental Pre Compiler: Checking resource changes.
[19:46:10] Nothing to pre compile!
[19:46:10] Starting incremental Package build: Checking resource changes.
[19:46:10] ignored resource ...\bin\.\classes.dex
[19:46:10] processing ...\A.class
[19:46:10] processing ...\B.class
    ...
[19:46:21] processing com/google/inject/util/Providers.class...
[19:46:21] processing com/google/inject/util/Types.class...
[19:46:24] Using default debug key to sign package
[19:46:24] Packaging ...\bin\resources.ap_
[19:46:24] Packaging classes.dex
    ...
[19:46:25] Packaging ...\annotations.jar
[19:46:25] Build Success!
[19:46:25] Refreshing resource folders.
[19:46:25] Starting incremental Pre Compiler: Checking resource changes.
[19:46:26] Nothing to pre compile!

Le "traitement" de .les fichiers de classe a pris 14 secondes. Et il "traitées" tous les fichiers, même auprès de tous .jar fichiers liés. Je pense que quelque chose de mal se passe ici, comme un seul .java fichier a été modifié.

Que puis-je faire pour améliorer la vitesse de compilation?

55voto

lencinhaus Points 2499

Je pense qu'il y a un malentendu ici. Comme vous le dites, seulement la modification de classes sont recompilés (par Eclipse en quelques millisecondes); après cela, cependant, le plugin ADT prend chaque classe compilée et les traduit en Dalvik du bytecode format via le dx outil. Le résultat de ce processus est un fichier classes.dex, qui contient toutes les classes de votre application, y compris celles provenant de bibliothèques référencées. Cette dernière, "la traduction", l'étape est celle qui prend le plus de temps car c'est vraiment mal optimisé: le plugin ADT ne cache rien, c'est juste retranslates chaque classe, à chaque génération (et c'est terriblement lent). Pour les moyennes et les gros projets, c'est vraiment frustrant... j'espère que Google va s'améliorer à l'avenir de l'ADT/SDK.

9voto

oae Points 441

Une autre solution consiste à:

  • désactiver le générateur de packages Android (clic droit sur le projet # Propriétés # Constructeurs)
  • ant pour la construction et le déploiement d'apk

voir android-workaround-for-slow-building-workspace-problem-in-eclipse pour plus de détails

4voto

Xavier Ducrohet Points 10342

ADT 21 pré-dex toutes les bibliothèques. Cela signifie qu'une compilation régulière ne retend que la sortie de votre projet (plus rapidement), puis fusionne le résultat avec les bibliothèques pré-indexées (assez rapidement).

0voto

iceheart Points 9

L'augmentation de la mémoire disponible pour Eclipse semble aider beaucoup. Essayez de le lancer comme ceci:

 eclipse -vmargs -Xms1024m -Xmx2048m
 

0voto

Vysakh Prem Points 28

Comme alex2k8 l'a mentionné, j'ai activé la sortie prolixe. Le coupable était le fichier jar AdMob.

J'utilise ADT 22.0. Mon application inclut AdMob et, au cours de l'étape d'exécution ou de débogage, les fichiers de classe dans admob jar sont convertis en fichiers dex, ce qui était très lent.

J'ai supprimé temporairement le code d'administrateur et le fichier jar de mon projet et le processus de construction est redevenu normal.

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