22

Meine Anwendung hat eine Reihe von Bibliotheken, die wesentlich sind, warum ich gezwungen wurde, Multidex-Support-Bibliothek verwenden und es funktioniert gut. Aber wo das Problem zeigt, ist in der Gradzahl. Es dauert durchschnittlich 2 Minuten zu bauen und wenn ich es entwickle und teste, ist das ziemlich nervig.Beschleunigen Gradle Build in Multidex-Anwendung

Gibt es eine Möglichkeit, meine Debug-Builds zu beschleunigen?

+0

Kaufen Sie mehr Speicher - mindestens 16 GB. Ich hatte 8 GB und nach dem Upgrade auf 16 GB ist die Buildzeit von 60 auf 30 Sekunden gesunken. –

Antwort

61

können Sie beschleunigen Sie Ihre Entwicklung baut durch die minimale SDK Version Angabe = 21
Offizielle Dokumentation eine whole section darüber enthält.

Beispiel (aus Dokumentation):

android { 
    productFlavors { 
     // Define separate dev and prod product flavors. 
     dev { 
      // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin 
      // to pre-dex each module and produce an APK that can be tested on 
      // Android Lollipop without time consuming dex merging processes. 
      minSdkVersion 21 
     } 
     prod { 
      // The actual minSdkVersion for the application. 
      minSdkVersion 14 
     } 
    } 
      ... 
    buildTypes { 
     release { 
      runProguard true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 
               'proguard-rules.pro' 
     } 
    } 
} 
dependencies { 
    compile 'com.android.support:multidex:1.0.0' 
} 

Sobald Sie die Produkte Aromen hinzugefügt haben, können Sie die devDebug Aufgabe verwenden (anstelle von Standard debug Aufgabe) für Ihre Entwicklung baut:
- von der Kommandozeile: run ./gradlew installDevDebug
- von Android Studio: open Build Variants window und wählen Sie die devDebug Build-Variante.

Sie sollten natürlich Arbeit gegen eine Vorrichtung, deren SDK> = 21.


Es gibt auch eine Lösung für diejenigen, die nicht wollen, Aromen verwenden. Wie in this gist vorgeschlagen, berechnet dynamisch den minSdkVersion Wert:

int minSdk = hasProperty('devMinSdk') ? devMinSdk.toInteger() : 14 
apply plugin: 'com.android.application' 

android { 
    ... 
    defaultConfig { 
     minSdkVersion minSdk 
     ... 
    } 
} 

In diesem Beispiel sind die Überprüfung wir, wenn devMinSdk Eigenschaft definiert, und wenn sie wahr ist - wir verwenden es. Sonst sind wir standardmäßig auf 14.

Wie übergeben wir devMinSdk Wert Skript zu erstellen? Zwei Optionen:

Verwenden von Befehlszeile:

./gradlew installDebug -PdevMinSdk=21 

Mit Android Studio Vorlieben:

Zur Einstellungen (Einstellungen auf Windows) ->Bau, Ausführung, Deployment ->Compiler -> setzen -PdevMinSdk=21 in Befehlszeilenoptionen Textfeld.

Android Studio compiler options

+0

I kann ich nicht tun, wenn ich für niedrigere SDKs entwickle. –

+0

@Tadej Was meinst du? Sie unterstützen keine Geräte, auf denen SDK 21 überhaupt ausgeführt wird (dh Ihre maximale SDK <21)? –

+0

Nein, ich meine, ich benutze ein Gerät, das eine niedrigere Version von Android hat, so dass ich nicht als sdk 21 darauf debuggen kann. –

-1

Gehen Sie in Einstellung, suchen Compiler, geben Sie "--offline" in Befehlszeilenoptionen und dann kompilieren.

+0

Versucht, aber kein Unterschied –

+0

überprüft auf unabhängige Modul kompilieren parallel und dann versuchen Sie es –

+1

immer noch keinen nennenswerten Unterschied :( –

1

Android Studio 1.3 (derzeit in Preview 3) verwendet ein neues Build-System, das die Build-Zeit von Gravel verbessert (wirklich, wie 10-30x schneller).

Weitere Informationen im Live Session at Google I/O 2015

+0

Also warten, bis die stabile Version veröffentlicht wird? Wirklich hoffe, es hilft auch für Multidex-Anwendungen. –

+0

können Sie auch versuchen lade es herunter, um zu sehen, ob es deine Bauzeit verbessert hat –

+0

Kann jemand bestätigen, dass AS1.3P3 tatsächlich 10-30x schneller ist, wenn multiidex Ziele gebaut werden? –

1

Multidexing verwendet mehr Speicher. Je näher Sie Ihrer maximalen Heap-Größe in Java kommen, desto mehr Zeit verbringt Java damit, GC zu erledigen, als wenn es echte Arbeit leistet. Das kann die Dinge erheblich verlangsamen.

Ich empfehle dringend, die maximale Größe des Heapspeichers zu erhöhen, wenn Sie multidex verwenden. Fügen Sie den folgenden auf den Android-Verschluss in Ihrem build.gradle Datei die maximale Speichergröße 4 GB (Machen Sie es kleiner, wenn Sie möchten) zu machen:

dexOptions { 
    javaMaxHeapSize "4g" 
} 
+0

+1, bekomme ich eine merkliche Beschleunigung sogar mit MinSdkVersion = 21, indem ich diese auf 2g erhöhe. Außerdem möchten Sie die Gradle-Heap-Größe um ein zusätzliches halbes Gigabyte vergrößern (in diesem Fall 2560 m), damit (multi) dex im selben Prozess ausgeführt wird. –

0

Ändern MinSdk bis 21 alles wieder normal für me.Now alles gemacht kompiliert in wie 6s

3

Vor kurzem Build-Cache wurde von Team auf Android Gradle Plugin eingeführt. Sie können es aktivieren, indem Sie android.enableBuildCache=true zu gradle.properties hinzufügen.

Mehr Infos hier http://tools.android.com/tech-docs/build-cache

Für mich erhöht es inkrementelle Bauzeiten von ~ 30 Sekunden.

Es funktioniert nicht mit älteren multidex (com.android.support:multidex) als Teil des Support-Bibliothek eingeführt, so geeignet, es ist nur Ihre wenn minSDK> = 21. Sie können es nur für Ihre Entwicklung baut und entbinden mit minSDK baut < 21.

Es funktioniert auch ohne Multidexing aktiviert.

0

Dies ist nicht mehr mit dem neuesten Android Studio 3.0 benötigt