475 Stimmen

Das Erstellen und Ausführen von Apps über Gradle und Android Studio dauert länger als über Eclipse.

Ich habe ein Multi-Projekt (~10 Module), bei dem der Build jedes Mal etwa 20-30 Sekunden dauert. Wenn ich in Android Studio auf "Ausführen" drücke, muss ich jedes Mal warten, bis die App neu erstellt wird, was extrem langsam ist.

Ist es möglich, den Build-Prozess in Android Studio zu automatisieren? Oder haben Sie einen Rat, wie man diesen Prozess schneller machen kann?

In Eclipse dauert es dank des automatischen Buildvorgangs ca. 3-5 Sekunden, um dasselbe Projekt auf einem Emulator auszuführen.

Dies ist meine build.gradle-Datei (app Modul):

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':libraries:SharedLibs')
    compile project(':libraries:actionbarsherlock')
    compile project(':libraries:FacebookSDK')
    compile project(':libraries:GooglePlayServices')
    compile project(':libraries:HorizontalGridView')
    compile project(':libraries:ImageViewTouch')
    compile project(':libraries:SlidingMenu')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 16
    }
}

444voto

Sergii Pechenizkyi Punkte 22179

Hardware

Es tut mir leid, aber das Upgrade der Entwicklungsstation auf eine SSD und eine Menge RAM hat wahrscheinlich einen größeren Einfluss als die unten aufgeführten Punkte zusammen.

Tools Versionen

Die Steigerung der Build-Performance hat oberste Priorität für die Entwicklungsteams, also stellen Sie sicher, dass Sie die neueste Gradle und Android Gradle Plugin verwenden.

Konfigurationsdatei

Erstellen Sie eine Datei mit dem Namen gradle.properties im entsprechenden Verzeichnis:

  • /home//.gradle/ (Linux)
  • /Users//.gradle/ (Mac)
  • C:\Users\\.gradle (Windows)

Anhängen:

# Benutzer von IDEs (z. B. Android Studio):
# In dieser Datei festgelegte Einstellungen überschreiben alle Gradle-Einstellungen,
# die über die IDE konfiguriert sind.

# Für weitere Details zur Konfiguration Ihrer Build-Umgebung besuchen Sie
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Der Gradle-Daemon soll beim Start und während der Ausführung von Gradle die
# Leistungen verbessern.
# Wenn auf true gesetzt, wird der Gradle-Daemon den Build ausführen.
# TODO: Daemon auf CI deaktivieren, da Builds auf Servern sauber und zuverlässig sein sollten
org.gradle.daemon=true

# Legt die JVM-Argumente fest, die für den Daemon-Prozess verwendet werden.
# Die Einstellung ist besonders nützlich zum Einstellen von Speicherparametern.
# https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e#.krd1mm27v
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# Wenn konfiguriert, wird Gradle im inkubierenden Parallelmodus ausgeführt.
# Diese Option sollte nur bei entkoppelten Projekten verwendet werden. Weitere Details finden Sie unter
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

# Aktiviert neuen inkubierenden Modus, der Gradle selektiv beim Konfigurieren von Projekten macht.
# Es werden nur relevante Projekte konfiguriert, was zu schnelleren Builds bei großen Multi-Projekten führt.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true

# Auf true oder false setzen, um den Build-Cache zu aktivieren oder zu deaktivieren.
# Wenn dieser Parameter nicht festgelegt ist, ist der Build-Cache standardmäßig deaktiviert.
# http://tools.android.com/tech-docs/build-cache
android.enableBuildCache=true

Gradle-Eigenschaften funktionieren lokal, wenn Sie sie unter projectRoot\gradle.properties platzieren, und global, wenn Sie sie unter user_home\.gradle\gradle.properties platzieren. Eigenschaften werden angewendet, wenn Sie Gradle-Aufgaben von der Konsole oder direkt aus der IDE ausführen:

IDE-Einstellungen

Es ist möglich, die Gradle-IntelliJ-Integration über die IDE-Einstellungen GUI anzupassen. Die Aktivierung von "offline-Arbeit" (siehe Antwort von yava unten) deaktiviert echte Netzwerkanfragen bei jedem "Synchronisieren der Gradle-Datei".

IDE-Einstellungen

Natives Multi-Dex

Einer der langsamsten Schritte des APK-Builds besteht darin, den Java-Bytecode in eine einzelne Dex-Datei umzuwandeln. Die Aktivierung von nativem Multidex (minSdk 21 nur für Debug-Builds) wird den Aufwand für die Werkzeuge reduzieren, die Menge an Arbeit zu reduzieren (siehe Antwort von Aksel Willgert unten).

Abhängigkeiten

Ziehen Sie @aar Abhängigkeiten den Unterprojekten der Bibliothek vor.

Suchen Sie nach aar-Paket auf mavenCentral, jCenter oder verwenden Sie jitpack.io, um eine Bibliothek von github zu erstellen. Wenn Sie die Quellen der Abhängigkeitsbibliothek nicht bearbeiten, sollten Sie sie nicht jedes Mal mit Ihren Projekquellen erstellen.

Antivirus

Erwägen Sie, Projekt- und Zwischenspeicherdateien von der Antivirenprüfung auszuschließen. Dies ist offensichtlich ein Kompromiss mit der Sicherheit (versuchen Sie dies nicht zu Hause!). Aber wenn Sie oft zwischen Branches wechseln, wird das Antivirenprogramm Dateien erneut überprüfen, bevor es dem Gradle-Prozess erlaubt, sie zu verwenden, was die Build-Zeit verlangsamt (insbesondere das Synchronisieren des AndroidStudio-Projekts mit den Gradle-Dateien und Indexierungsaufgaben). Messen Sie die Build-Zeit und die Prozessor-CPU-Auslastung mit und ohne aktiviertem Antivirus, um zu sehen, ob es damit zusammenhängt.

Build-Profilierung

Gradle bietet eine integrierte Unterstützung für Profiling von Projekten. Verschiedene Projekte verwenden eine unterschiedliche Kombination von Plugins und benutzerdefinierten Skripten. Die Verwendung von --profile hilft dabei, Engpässe zu identifizieren.

150voto

yava Punkte 2511

Sie können die Gradle Update-zu-Datum-Überprüfungen ignorieren.

Bildbeschreibung hier eingeben

Für Windows, auf dem Android Studio 1.5 läuft: Gehen Sie zu Datei -> Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Build-Tools -> Gradle -> Offline-Arbeit überprüfen (wie im Bild gezeigt)

von ~30+ Sekunden auf ~3 Sekunden reduzieren

35voto

odiggity Punkte 4099

Ich habe überall danach gesucht und schließlich eine Lösung gefunden, die für uns funktioniert. Durch das Aktivieren von parallelen Builds (Auf OSX: Einstellungen -> Compiler -> Gradle -> "Unabhängige Module parallel kompilieren") und das Aktivieren von "Projekt automatisch erstellen" konnten wir die Zeit von ungefähr 1 Minute auf ungefähr 20 Sekunden reduzieren. Danke an /u/Covalence.

http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_android_studio_way_slower_to_build/

25voto

Ich habe kürzlich eine neue SSD gekauft und bin von Windows zu Linux gewechselt. Meine Build-Zeiten sind jetzt um ein Vielfaches schneller und nicht mehr nervig.

Auch wenn das nicht direkt auf deine Frage eingeht, warum es langsamer als Eclipse ist, zeigt es doch, dass der Vorgang von der Festplatte begrenzt wird und ein Upgrade auf eine SSD vielleicht eine (etwas teurere) Lösung sein könnte. Ich vermute, dass Leute nach dem Problem googeln und hier landen werden, die meine Erfahrung zu schätzen wissen könnten.

21voto

Ahmad Aghazadeh Punkte 15802

Beschleunigen Sie den Gradle-Build in Android Studio 3.2.1

Fühlen Sie sich auch manchmal wie Minuten lang auf die Builds in Android Studio warten zu müssen? Mir geht es genauso. Und das ist ziemlich nervig. Glücklicherweise gibt es ein paar Möglichkeiten, wie Sie dies verbessern können. Android verwendet Gradle für den Build. Die neueste Version 4.6 bietet einen enormen Leistungsschub gegenüber früheren Versionen (siehe Versionshinweise für Details).

Schritt 1: Gradle-Version aktualisieren Ein einfacherer Weg, dies zu erreichen, ist: Gehen Sie zu: Moduleinstellungen öffnen (Ihr Projekt) > Projektstruktur

Bildbeschreibung eingeben

UPDATE

Wechseln Sie zu Gradle-Version: 4.6 und Wechseln Sie zu Android-Plugin-Version: 3.2.1

Bildbeschreibung eingeben

Laden Sie die Gradle-Release-Verteilung von https://services.gradle.org/distributions/gradle-4.6-all.zip herunter Und kopieren Sie sie in den Gradle-Ordner:

Bildbeschreibung eingeben

Der letzte Schritt besteht darin, Ihre Verteilung in Einstellungen > Gradle hinzuzufügen

Bildbeschreibung eingeben

Vergessen Sie nicht, auf Übernehmen zu klicken, um Änderungen zu speichern.

Schritt 2: Offline-Modus, Gradle-Daemon und parallelen Build für das Projekt aktivieren Im Offline-Modus ignoriert Gradle Update-Checks. Gradle fragt jedes Mal nach Abhängigkeiten und mit dieser Option verwendet er nur das, was bereits auf dem Rechner für Abhängigkeiten vorhanden ist. Gehen Sie zu Gradle von Android Studio Einstellungen und klicken Sie im Offline-Arbeitsfeld.

Bildbeschreibung eingeben

  1. Gehen Sie zu Compiler von Android Studio Einstellungen und fügen Sie "— offline" im Befehlszeilen-Feld hinzu und klicken Sie auf Unabhängige Module parallel kompilieren.

Bildbeschreibung eingeben

Der nächste Schritt besteht darin, den Gradle-Daemon und den parallelen Build für Ihr Projekt zu aktivieren. Parallele Builds führen dazu, dass Ihre Projekte mit mehreren Modulen (Mehrprojekt-Builds in Gradle) parallel erstellt werden, was große oder modulare Projekte schneller erstellen sollte.

Bildbeschreibung eingeben

Diese Einstellungen können durch Bearbeiten einer Datei mit dem Namen gradle.properties im Gradle-Skriptverzeichnis aktiviert werden (z. B. ~/.gradle/gradle.properties). Einige dieser Optionen (z. B. Module parallel kompilieren) sind auch in Android Studio verfügbar und dort standardmäßig aktiviert, jedoch werden sie durch Hinzufügen in die gradle.properties-Datei beim Build vom Terminal aus aktiviert und sicherstellen, dass Ihre Kollegen die gleichen Einstellungen verwenden. Aber wenn Sie im Team arbeiten, können Sie manchmal diese Einstellungen nicht übernehmen.

# Wenn konfiguriert, wird Gradle im inkubierenden Parallelmodus ausgeführt.
# Diese Option sollte nur bei entkoppelten Projekten verwendet werden. Weitere Informationen finden Sie unter org.gradle.parallel=true
# Wenn true gesetzt ist, wird der Gradle-Daemon zum Ausführen des Builds verwendet. Für lokale Entwickler-Builds ist dies unser bevorzugtes Attribut.
# Die Entwicklerumgebung ist auf Geschwindigkeit und Rückmeldung optimiert, daher führen wir fast immer Gradle-Jobs mit dem Daemon aus.
 org.gradle.daemon=true

Durch Verwendung des Daemons wird der Start Ihrer Builds schneller, da er beim Starten nicht jedes Mal die gesamte Gradle-Anwendung starten muss. Der Gradle-Daemon ist standardmäßig nicht aktiviert, aber es wird empfohlen, ihn immer für Entwicklermaschinen zu aktivieren (aber auf Continuous-Integration-Servern deaktiviert zu lassen). FAQ zu diesem Modus finden Sie hier https://docs.gradle.org/current/userguide/gradle_daemon.html. Die Einstellung für parallele Builds kann für einige Projekte unsicher sein. Die Anforderung ist, dass alle Ihre Module entkoppelt sein müssen oder Ihr Build fehlschlagen könnte (siehe http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects für Details).

Schritt 3: Incremental Dexing aktivieren und Speichereinstellungen optimieren Sie können Ihre Builds beschleunigen, indem Sie das inkrementelle Dexing aktivieren. In der Build-Datei Ihres Moduls:

Bildbeschreibung eingeben

Fügen Sie diese Option zu Ihrem Android-Block hinzu:

dexOptions {
    incremental true
}

In diesem dexOptions-Block können Sie auch die Heap-Größe für den Dex-Vorgang festlegen, z. B.:

dexOptions {
    incremental true
    javaMaxHeapSize "12g"
}

Wo "12g" 12 GB Speicher bedeutet. Weitere Informationen dazu finden Sie auf google.github.io/android-gradle-dsl/current/ Sie können auch Gradle-Parameter in der Einstellungsdatei konfigurieren, z. B. die maximale Heap-Größe erhöhen, wenn Sie ein großes Projekt haben:

# Gibt die JVM-Argumente für den Daemon-Prozess an, der für das Optimieren von Speichereinstellungen besonders nützlich ist.
# Standardwert: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Sehen Sie alle Parameter hier: https://docs.gradle.org/current/userguide/userguide_single.html#sec:gradle_configuration_properties für Details.

Schritt 4: Antivirus deaktivieren Betrachten Sie, Projekt- und Cache-Dateien vom Virenscan auszuschließen. Dies ist offensichtlich ein Kompromiss mit der Sicherheit. Aber wenn Sie häufig zwischen Branches wechseln, wird das Antivirenprogramm Dateien erneut scannen, bevor es dem Gradle-Prozess erlaubt, sie zu verwenden, was die Build-Zeit verlangsamt (insbesondere Android Studio synchronisiert Projekte mit Gradle-Dateien und Indizierungsaufgaben). Messen Sie die Build-Zeit und den CPU-Prozess mit und ohne aktiviertes Antivirenprogramm, um zu sehen, ob es zusammenhängt. Ich hoffe, das hilft. Hinterlassen Sie einen Kommentar, wenn Sie Fragen haben oder weitere Tipps zur Verbesserung der Build-Performance haben.

hilfreicher Link

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X