Accélérer le temps de construction du projet Android dans IntelliJ IDEA

Je me demande, s'il y a un moyen, comment définir skip packaging and dexing dans IntelliJ IDEA comme dans Eclipse et ADT. Il y a Additional VM Options champ dans la section du compilateur Android DX dans IntelliJ Preferences, peut-être que cela pourrait être un moyen, comment le définir. J'apprécierais également d'autres conseils, comment accélérer la construction du projet IntelliJ Android.

28
demandé sur CrazyCoder 2012-11-12 01:32:54

4 réponses

Dans les préférences Eclipse, le nom complet de skip packaging and dexing auquel vous faites référence est Skip packaging and dexing until export or launch. (Speeds up automatic builds on file save), qui est une fonctionnalité ajoutée depuis ADT 12 dans orde pour résoudre le problème de compilation incrémentale Eclipse (qui ralentit le développement sur Eclipse), consultez les révisions 12.0.0 (juillet 2011) et ce lien pour plus de détails, notez que l'empaquetage et le dexing sont des étapes fondamentales lorsque vous déboguez/exécutez un projet quel que soit L'IDE (ou non) que vous utilisez. entrez la description de l'image ici

Comme CrazyCoder mentionné dans ses commentaires, IntelliJ ne prend pas en charge la compilation incrémentale de type Eclipse et le volet problèmes par défaut, en un autre mot, il ne compile pas automatiquement votre projet lorsque le fichier est modifié. Donc, ce n'est vraiment pas un problème ni une fonctionnalité dans IntelliJ.

Votre goulot d'étranglement du processus de construction vient probablement d'un autre endroit. AFAIK dans un projet de taille moyenne, le processus de construction passe le plus de temps à compiler des ressources (commande AAPT, consultez diagramme de processus de construction ). Certaines personnes intelligentes de xdadevelopers a trouvé le goulot d'étranglement et créer une version de correction de AAPT:

Http://forum.xda-developers.com/showthread.php?t=1907281

Je l'utilise moi-même et je dirais que le boost de vitesse est perceptible dans Eclipse, notez qu'il ne fait que stimuler L'étape AAPT, pas l'emballage ad dexing. Si vous utilisez InteliJ, cela n'aide probablement pas beaucoup car il n'a pas besoin de compiler le projet assez souvent.

11
répondu yorkw 2012-11-15 04:22:07

J'utilise IntelliJ 12. J'ai gagné du temps à déployer et à exécuter des applications Android permettant à IntelliJ de "créer automatiquement un projet". Pour l'activer, allez simplement dans Préférences -> compilateur et cochez "créer le projet automatiquement". Dans la même fenêtre, cochez "compiler des modules indépendants en parallèle".

L'activation de "créer automatiquement un projet" vous permet d'ignorer la tâche "Créer" avant le lancement D'une application Android. Vous pouvez le supprimer dans "Run/Debug Configurations", en sélectionnant votre Android Application et suppression de la tâche" Make "dans la section" avant le lancement".

31
répondu Jake Andreu 2013-02-20 14:11:32

Je n'ai pas de solution, mais j'ai une explication sur pourquoi il y a une énorme différence de temps de compilation entre Eclipse et IntelliJ. Parce qu'il y est. Chaque fois que vous dépendez de modules externes ou de bibliothèques: IntellIJ toujours DEX'es modules dépendants . Eclipse semble les mettre en cache.

Moi aussi j'avais connu cette énorme différence dans un de mes projets. J'ai fait quelques tests de synchronisation de base et j'ai constaté que mon projet qui a été construit en 40 secondes dans IntellIJ n'en a pris que 20 dans Eclipse. Un beaucoup de temps a été passé dans le processus où IntelliJ a le statut exécutant DEX , c'est ainsi que j'ai trouvé cette question. J'ai ensuite cherché à faire une expérience plus approfondie et reproductible et c'est ce que j'ai trouvé.

Configuration du projet

  • un projet Hello World du modèle nouvelle Application Android dans Eclipse.
  • dépendance sur le projetAndEngine Open Source Android Game Engine*.
  • Eclipse: Projet AndEngine défini comme "bibliothèque Android". Ajouté comme référence sous L'onglet Android et le projet requis sous L'onglet Java Build Path/Projects-tab.
  • IntelliJ: AndEngine défini comme "Module". Définir comme dépendance pour le module principal HelloWorld, avec la case à cocher Exporter pas cochée (pas que je pense que cela compte).

*) j'aurais pu utiliser n'importe quel module ici mais c'était un bon exemple car a) est assez grand et b) est un module Android, ce qui signifie que je dois lien comme un projet Android et pas seulement comme un POT, car dbm suggèrent dans un post ci-dessus.

J'ai ajouté du code de journalisation dans la méthode onCreate de MainActivity.java (l'activité de démarrage de HelloWorld) qui a également appelé une méthode dans AndEngine qui a également enregistré une ligne. (J'ai modifié le constructeur de SoundManager pour sortir une ligne et appelé le constructeur de MainActivity.java). Cela m'a permis de voir quand l'application a fini de se déployer et qu'elle s'était également déployée correctement.

J'ai ensuite fait ce qui suit change et chronométré chacun d'eux trois fois dans chaque IDE:

  • a: modifié uniquement la ligne de journalisation dans le module principal
  • A + B: modifié à la fois la ligne de journalisation dans le module principal et dans le module AndEngine.

J'ai fait des chronométrages manuels avec un chronomètre standard, puis arrondi à la seconde la plus proche. J'ai fait trois timings dans chaque cas et calculé la moyenne arithmétique.

Les résultats:

Graphiques de IntellIJ vs Eclipse compiler et déployer le temps

remarque: je n'ai ne pas inclure une sous-colonne séparée pour "exécuter DEX" dans Eclipse car elle génère simplement "make" ou "refreshing workspace" dans l'ensemble du processus de construction.

Lors de L'exécution à partir D'Eclipse, vous pouvez voir à partir des chiffres que je gagne du temps lorsque je ne modifie que le module principal - ce qui est comme prévu. Mais dans IntelliJ, le temps de compilation est le même dans les deux cas!

Conclusion:

IntelliJ fait beaucoup de DÉX'ing inutile. Si quelqu'un sait si cela est configurable, je pense que nous résoudrait ce queJe crois être la cause profonde du problème.

11
répondu Nilzor 2013-04-29 15:20:34

Parfois, lorsque j'ajoute de gros pots externes à mon projet (Eclipse), il semble ralentir considérablement le processus de construction.

J'ai cependant remarqué qu'au lieu d'ajouter les pots comme d'habitude (Project -> Properties -> Java Build Path -> Libraries -> Add External JARs...) on peut ajouter un utilisateur de la bibliothèque de la place (Project -> Properties -> Java Build Path -> Libraries -> Add Library... -> User Library) et ajouter l'externe Pots à cette bibliothèque à la place.

Cela a toujours résolu mes problèmes de construction de gros pots. Certains gars intelligents m'ont également expliqué pourquoi c'est le cas, mais malheureusement, je ne me souviens pas vraiment de l'explication. Je n'ai aucune expérience dans IntelliJ-Je ne sais pas si cela est du tout applicable dans votre cas, néanmoins, vous pourriez obtenir d'autres idées à partir d'ici...

0
répondu dbm 2012-11-16 13:33:19