2010-05-21 3 views
33

Wenn ich eine .java-Datei ändern und Build, dauert die Kompilierung 16 Sekunden. Ich verstehe nicht, warum es so langsam sein sollte !?Android Compilation ist langsam (mit Eclipse)

Ich habe ausführliche Ausgabe für Andoroid aktiviert.

Window > Preferences > Android > Build output > Verbose. 

Das Ergebnis Ausgabe (Konsole> Android) ist:

[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! 

Die "Verarbeitung" von Class-Dateien 14 Sekunden dauerte. Und es "verarbeitete" alle Dateien, sogar von allen verknüpften JAR-Dateien. Ich denke, dass etwas falsch läuft, da nur eine .java-Datei geändert wurde.

Was kann ich tun, um die Übersetzungsgeschwindigkeit zu verbessern?

+1

Wie groß ist Ihre APK endet. Wenn es groß ist, dann dauert es Eclipse Zeit, es zu kompilieren, auch wenn Sie nur eine Datei ändern –

+0

~ 800 KB - ist das groß? – alex2k8

+1

BTW, macht es keinen Sinn für mich, dass größeres Projekt länger kompilieren sollte. .. Wenn A von B abhängt und ich A ändere, warum soll ich B neu kompilieren? kompilieren). Ich stimme zu, die Verpackung kann länger sein, aber die Kompilierung sollte theoretisch nicht von der Größe des Projekts abhängen, wenn ich nur eine Datei ändere. – alex2k8

Antwort

55

Ich denke, es gibt ein Missverständnis hier. Wie du sagst, werden nur die modifizierten Klassen neu kompiliert (von Eclipse in Millisekunden); Danach nimmt das ADT-Plugin jedoch jede kompilierte Klasse und übersetzt sie über das dx-Tool in Dalviks Bytecode-Format. Die Ausgabe dieses Prozesses ist eine einzelne Datei, classes.dex, die alle Klassen in Ihrer Anwendung enthält, einschließlich der aus referenzierten Bibliotheken. Dieser letzte "Übersetzungs" -Schritt ist der, der länger braucht, weil er wirklich schlecht optimiert ist: Das ADT-Plugin speichert nichts zwischen, es translatiert nur jede Klasse bei jedem Build neu (und es ist schmerzhaft langsam). Für mittelgroße bis große Projekte wird das wirklich frustrierend ... Ich hoffe Google wird das in einer zukünftigen ADT/SDK-Version verbessern.

+0

Scheint so zu sein :-( – alex2k8

+7

Nebenbei können Sie das automatische Build unter "Projekt" -> "Automatisch erstellen" deaktivieren. Dann wird es nur während des Programmstarts vollständig erstellt, sodass es die Eclipse-Benutzeroberfläche nicht verlangsamt arbeite an dem Code jedes Mal, wenn du eine Datei speicherst – jmbouffard

+4

das Problem mit der Deaktivierung von "Automatisch erstellen", bekomme ich keine aktualisierten Werte von Ressourcen, was viel Platz für Fehler lässt und automatische Vervollständigung unbrauchbar macht .. dann wenn du schließlich erstelle ich es, habe Fehler und muss es erneut erstellen, so dass es nicht viel Zeit spart – Vlad

9

Eine andere Abhilfe ist:

  • deaktivieren Sie den Android Package Builder (Rechtsklick auf Projekt # Immobilien # Builders)
  • Verwendung Ameise für Aufbau und Einsatz von apk

siehe android-workaround-for-slow-building-workspace-problem-in-eclipse für Details

+0

versucht, aber immer noch langsam – max4ever

+0

Es ist natürlich keine Wirkung, wenn Sie wissen, ant, ant Anruf android build.xml, keine Leistungsoptimierung überhaupt – Trinea

0

Den verfügbaren Speicher für Eclipse zu vergrößern, scheint viel zu helfen. Versuchen Sie es wie folgt zu starten:

eclipse -vmargs -Xms1024m -Xmx2048m 
4

ADT 21 pre-dex alle Bibliotheken. Dies bedeutet, dass die regelmäßige Kompilierung nur die Ausgabe Ihres Projekts neu bestimmt (schneller) und dann das Ergebnis mit den vordexierten Bibliotheken zusammenführt (ziemlich schnell).

+0

Hallo Xav, sind Sie [dieses AAPT Engpass] bewusst (http: //forum.xda-developers .com/showthread.php? t = 1907281) und was ist deine Meinung dazu? – yorkw

+2

Ja. Dies wurde über AOSP eingereicht und dann intern zusammengeführt. Es wird Teil des nächsten aapt-Updates sein. –

+0

Cool, dann muss ich die Datei nicht mehr von Dritten umbenennen/kopieren :) – yorkw

0

Wie alex2k8 erwähnt habe ich verbose Ausgabe aktiviert. Der Schuldige war die AdMob-JAR-Datei.

Ich benutze ADT 22.0. Meine Anwendung enthält AdMob und während des Ausführungs- oder Debugging-Schritts werden die Klassendateien in admob jar in dex-Dateien konvertiert, was sehr langsam ist.

Ich habe den Admob-Code und das Glas aus meinem Projekt vorübergehend entfernt und der Build-Prozess ist wieder normal.

0

Bei jedem Speichern, Eclipse-Paket und Dexing alle Dateien. Dies ist jedoch nicht notwendig, da Sie Ihre App bei jedem Speichern nicht in apk bereitstellen müssen.

Wie auch immer, ist der Schlüssel dieses Problems die Option zu deaktivieren.

„Skip Verpackung und Dexing bis zur Ausfuhr oder Start (Beschleunigt automatisches baut auf Datei speichern.)“

Innerhalb von "Window -> Einstellungen -> Android -> Build"

Dieses Ihr Problem beheben wird

Prost