webentwicklung-frage-antwort-db.com.de

Beschleunigen Sie den Gradle-Build in Multidex-Anwendungen

Meine Anwendung verfügt über eine Reihe von Bibliotheken, die unbedingt erforderlich sind. Aus diesem Grund musste ich die Multidex-Unterstützungsbibliothek verwenden, und es funktioniert einwandfrei. Aber wo sich das Problem zeigt, liegt in der graduellen Geschwindigkeit. Es dauert durchschnittlich 2 Minuten, um zu bauen, und wenn ich entwickle und teste, ist das ziemlich ärgerlich. 

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

22
Tadej Vengust

Sie können Ihre Entwicklung-Builds beschleunigen, indem Sie die Mindest-SDK-Version = 21 angeben.
Offizielle Dokumentation enthält einen ganzen Abschnitt darüber. 

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'
}

Nachdem Sie die Produktvarianten hinzugefügt haben, können Sie die Aufgabe devDebug (anstelle der Standardaufgabe debug) für Ihre Entwicklungsbuilds verwenden:
- von der Kommandozeile aus: ./gradlew installDevDebug ausführen
- aus Android Studio: Öffnen Sie das Fenster Build Variants und wählen Sie die Buildvariante devDebug aus.

Sie sollten natürlich gegen ein Gerät arbeiten, dessen SDK> 21 ist. 


Es gibt auch eine Lösung für diejenigen, die keine Aromen verwenden möchten. Wie in this Gist vorgeschlagen, den Wert der minSdkVersion dynamisch berechnen:

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

Android {
    ...
    defaultConfig {
        minSdkVersion minSdk
        ...
    }
}

In diesem Beispiel überprüfen wir, ob die devMinSdk -Eigenschaft definiert ist, und wenn true, verwenden wir sie. Ansonsten gehen wir von 14 aus. 

Wie übergeben wir einen devMinSdk-Wert, um ein Skript zu erstellen? Zwei Optionen: 

Befehlszeile verwenden: 

./gradlew installDebug -PdevMinSdk=21

Verwenden der Android Studio-Einstellungen: 

Gehen Sie zu Einstellungen (Einstellungen unter Windows) -> Erstellen, Ausführen, Bereitstellen -> Compiler -> Fügen Sie -PdevMinSdk=21 in Befehlszeilenoptionen Textfeld.

 Android Studio compiler options

60
Alex Lipov

Vor kurzem wurde ein Build-Cache von einem Team erstellt, das an dem Android Gradle-Plugin arbeitet. Sie können es aktivieren, indem Sie Android.enableBuildCache=true zu gradle.properties hinzufügen.

Weitere Informationen hier http://tools.Android.com/tech-docs/build-cache

Für mich erhöhte sich die inkrementelle Bauzeit um ~ 30 Sekunden.

Es funktioniert nicht mit Legacy Multidex (com.Android.support:multidex), das als Teil der Support-Bibliothek eingeführt wurde. Es ist daher nur für minSDK> = 21 geeignet. Sie können es nur für Ihre Entwicklungs-Builds festlegen und Release-Builds mit minSDK <21 erstellen.

Es funktioniert auch ohne aktiviertes Multidexing.

3
sealskej

Android Studio 1.3 (derzeit in Preview 3 ) verwendet ein neues Build-System, das die Build-Zeit für Abstufungen verbessert (wirklich um etwa 10-30x schneller). 

Weitere Informationen in der Live-Sitzung bei Google I/O 2015

1
Hugo Gresse

Multidexing benötigt mehr Speicher. Wenn Sie sich der maximalen Größe Ihres Heapspeichers in Java nähern, werden Sie feststellen, dass Java mehr Zeit für die GC-Bearbeitung als für die eigentliche Arbeit aufwenden muss.

Ich würde dringend empfehlen, die maximale Heap-Größe zu erhöhen, wenn Sie Multidex verwenden. Fügen Sie der Android-Schließung in Ihrer build.gradle-Datei Folgendes hinzu, um die maximale Größe des Heapspeichers von 4 GB zu erreichen (verkleinern Sie sie, wenn Sie möchten):

dexOptions {
    javaMaxHeapSize "4g"
}
1
Will Calderwood

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

0
N Jay

Durch die Änderung von MinSdk auf 21 wurde alles für mich wieder normal. Jetzt ist alles wie 6s kompiliert

0
Santhej Kallada