Android Studio Gradle Build beschleunigen

163

Seit dem letzten Update (Build ab 25. Juni) sind alle Änderungen im Android Studio Gradle schmerzhaft langsam. Und es scheint auch Änderungen automatisch zu verfolgen, wenn Sie die Datei bearbeiten und beim Keyup neu kompilieren.

Jede Änderung dauert auf meinem i5 einige Minuten.

Irgendeine Idee, wie ich meine Gradle-Änderungen beschleunigen kann?

Einar Sundgren
quelle
1
Für diejenigen, die sich die Zeit nehmen, die Antwort und die Frage zu lesen, ist dies keine doppelte Frage, wie von @ Dave Jarvis vorgeschlagen. Aber es ist stark mit einer alten Beta-Version von AS verwandt und hat wahrscheinlich wenig bis gar keinen Einfluss auf aktuelle Versionen.
Einar Sundgren
Siehe diese stackoverflow.com/a/36826562/1770868
Ahmad Aghazadeh

Antworten:

41

Die Entwickler arbeiten daran. Wie ich in dieser Antwort gepostet habe, besteht die derzeit schnellste Lösung darin, gradle über die Befehlszeile zu verwenden, und Sie sollten für alle Module, die Sie nicht entwickeln, zu binären Bibliotheken wechseln. Auf g + gibt es a Diskussion mit den Entwicklern darüber.

Rivare
quelle
Ich hätte mich natürlich früher der Tool-Diskussionsgruppe anschließen sollen .
Einar Sundgren
99

Macht definitiv einen Unterschied: Gewusst wie ... Beschleunigen Sie die Bauzeit von Gradle

Erstellen Sie einfach eine Datei mit dem Namen gradle.propertiesim folgenden Verzeichnis:

/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)

Fügen Sie diese Zeile zur Datei hinzu:

org.gradle.daemon=true
Francois
quelle
2
Gute Antwort. Weitere und detaillierte Informationen finden Sie in dieser SO-Antwort.
Sufian
12
Über Ihren Link: "Hinweis: Dies wirkt sich nur auf Konsolen-Builds aus. Android Studio verwendet immer einen Gradle-Daemon (und abhängig von Ihren Einstellungen einige andere Optimierungen)."
ChiefTwoPencils
2
Ich habe ein .gradle- Verzeichnis mit der Datei gradle.properties . Aber nimm dir trotzdem viel Zeit. Jeder Vorschlag
CoDe
4
Macht keinen Unterschied
Vlado Pandžić
Und starten Sie Android Studio neu, nachdem Sie Änderungen vorgenommen haben.
Iman Marashi
78

Nach Änderung dieser Einstellungen reduzierte sich meine Kompilierungszeit um 10 Minuten auf 10 Sekunden.

Schritt 1:

Einstellungen (Strg + Alt + S) ->

Erstellen, Ausführen, Bereitstellen ->

Compiler ->

Geben Sie " --offline" in das Feld Befehlszeilenoptionen ein.

Schritt 2:

Aktivieren Sie das Kontrollkästchen "Unabhängige Module parallel kompilieren".

& klicken Sie auf Übernehmen -> OK

Geben Sie hier die Bildbeschreibung ein

Schritt 3: In Ihrer Datei gradle.properties -> Fügen Sie die folgenden Zeilen hinzu

org.gradle.jvmargs=-Xmx2048M -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true

Aktualisieren:

Wenn Sie Android Studio 2.0 oder höher verwenden, versuchen Sie es mit Instant Run

Einstellungen → Erstellen, Ausführen, Bereitstellen → Sofortausführung → Sofortausführung aktivieren.

Weitere Informationen zu Instant Run - https://developer.android.com/studio/run/index.html#instant-run

Ranjith Kumar
quelle
6
Ich habe es versucht und es beschleunigt meinen Build erheblich. Ich weiß, dass die Option jetzt dazu führt, dass sie offline erstellt wird. Gibt es Nachteile beim Offline-Erstellen?
Simon
5
@Simon - Der Nachteil ist, dass Sie die neuesten Versionen der in Ihrer build.gradle-Datei angegebenen Abhängigkeiten nicht abrufen können. Es wird schneller ausgeführt, da ein zwischengespeicherter Snapshot dieser importierten Bibliotheken verwendet wird. Für einige Entwickler ist Stabilität von größter Bedeutung, aber wenn sie zu lange offline gehen, kann dies zu Problemen führen, wenn sie endgültig online gehen und sich diese Abhängigkeiten entwickelt haben, wodurch das besagte Projekt zurückbleibt.
Mark Lapasa
1
Vielen Dank, Bruder, dieser hat gut für mich funktioniert und meine Gradle-Build-Geschwindigkeit wurde erhöht
Android_programmer_office
@Simon, wenn Sie mit der Entwicklung beginnen, können Sie einfach die obigen Einstellungen festlegen und sie dann nach dem Stoppen ausschalten, sobald die Nacht endet. Führen Sie die App ein letztes Mal aus, damit alles noch synchron ist. Oder würde es ein Problem damit geben?
Sauron
1
es verringerte sich von 33 Sekunden auf 5 Sekunden :))
Miron
62

Ich konnte meinen Gradle-Build auf meinem alten core2duo-Laptop (mit Linux Mint) von 43 Sekunden auf 25 Sekunden reduzieren, indem ich der Datei gradle.properties in Android Studio Folgendes hinzufügte

org.gradle.parallel=true
org.gradle.daemon=true

Quelle, warum die Daemon-Einstellung Builds beschleunigt: https://www.timroes.de/2013/09/12/speed-up-gradle/

Sam
quelle
3
Über Ihren Link: "Hinweis: Dies wirkt sich nur auf Konsolen-Builds aus. Android Studio verwendet immer einen Gradle-Daemon (und abhängig von Ihren Einstellungen einige andere Optimierungen)."
ChiefTwoPencils
2
Die parallele Option hat meinen Build sogar in AS verbessert. Vielen Dank :)
Jonathanrz
3
Die parallele Option hat meinen Build nicht verbessert.
Vlado Pandžić
Vielen Dank. Diese Lösung machte meine Bauzeit von 7 Minuten auf 23 Sekunden ...
Vignesh Bala
Dankeschön machte meinen Build von zwei Minuten auf drei Sekunden
Pouya Samie
12

Das Befolgen der Schritte macht es 10-mal schneller und reduziert die Bauzeit um 90%

Erstellen Sie zunächst eine Datei mit dem Namen gradle.properties im folgenden Verzeichnis:

/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)

Fügen Sie diese Zeile zur Datei hinzu:

org.gradle.daemon=true
org.gradle.parallel=true

Und überprüfen Sie diese Optionen in Android Studio

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Biswajit Karmakar
quelle
7

Es gibt eine neuere Version von gradle (Version 2.4).

Sie können dies für Ihre Projekte festlegen, indem Sie das Dialogfeld "Projektstruktur" im Menü "Datei" öffnen.

Project Structure -> Project -> Gradle version

und setzen Sie es auf '2.4'.
Weitere Informationen zur Leistungssteigerung finden Sie unter diesem Link .

Hamzeen Hameem
quelle
2
Vielen Dank, Gradle Version 2.4 hat fast 14 Sekunden gespart.
Miao1007
5
Dies verlängerte meine Bauzeit
Egemen Hamutçu
6

Dies ist, was ich getan habe und meine Gradle-Build-Geschwindigkeit hat sich dramatisch verbessert! von 1 Minute bis 20 Sekunden für den ersten Build und nachfolgende Builds wurden von 40 Sekunden bis 5 Sekunden.

In der gradle.properties Datei Fügen Sie diese:

org.gradle.jvmargs=-Xmx8192M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

In den BefehlszeilenargumentenGehen Sie in über Gehe zu Datei> Andere Einstellungen> Standardeinstellungen> Erstellen, Ausführen, Bereitstellen> Erfüllen und fügen Sie die folgenden Argumente zu Befehlszeilenargumenten hinzu

Füge das hinzu:

--debug --stacktrace -a, --no-rebuild -q, --quiet --offline

Siehe Bild hier

mangu23
quelle
6

Vermeiden Sie bei der Android-Entwicklung die Verwendung eines Mac / PC mit nur 8 GB RAM. Sobald Sie auch nur einen Emulator (Genymotion oder auf andere Weise) starten, werden Ihre Build-Zeiten in Android Studio mit Gradle-Builds extrem langsam. Dies geschieht auch dann, wenn Sie eine einfache einzeilige Änderung an einer Quelldatei vornehmen.

Das Schließen des Emulators und die Verwendung eines realen Geräts hilft viel, aber dies ist natürlich sehr einschränkend und weniger flexibel. Das Reduzieren der RAM-Auslastung des Emulators kann hilfreich sein. Am besten stellen Sie jedoch sicher, dass Ihr Laptop über mindestens 12 bis 16 GB RAM verfügt.

Update (Juni 2017): Es gibt jetzt mehrere gute Artikel auf medium.com, in denen ausführlich erklärt wird, wie Android Studio Gradle Builds beschleunigt werden können, und es funktioniert sogar auf 8-GB-Computern:

Der zusammengefasste Konsens lautet:

Erstellen Sie eine gradle.properties- Datei (entweder global ~/.gradle/gradle.propertiesoder lokal für das Projekt) und fügen Sie die folgenden Zeilen hinzu:

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
Mr-IDE
quelle
4
  1. Offline-Arbeit aktivieren

  2. Verbessern Sie die Gradle-Leistung, indem Sie folgenden Code hinzufügen gradle.properties

org.gradle.daemon = true
org.gradle.parallel = true

Schritt-für-Schritt-Anleitung: http://www.viralandroid.com/2015/08/how-to-make-android-studio-fast.html

Sajan Rana
quelle
Lassen Sie uns diese Antworten abwechslungsreich halten und uns auf die Einzelheiten der OP-Frage konzentrieren. Betreff : stackoverflow.com/a/34828203 ... stackoverflow.com/a/34827929 ... stackoverflow.com/a/34827858 ... stackoverflow.com/a/34827827 ... stackoverflow.com/a/34827788
Drew
4
dexOptions {
    incremental true
    javaMaxHeapSize "4g"
}
AnupamChugh
quelle
1
'Inkrementelle Struktur' ist in Android Studio 2018 veraltet.
M'aiq the Coder
Dies wurde vor 2 Jahren veröffentlicht.
AnupamChugh
Ich weiß, ich habe es nur für Leute angegeben, die immer noch nach diesen Lösungen suchen;)
M'aiq the Coder
3

Laut dieser Seite des Android-Teams von Wikimedia Apps besteht eine gute Möglichkeit zur Optimierung von Gradle-Builds darin, diese Zeilen zu Ihren ~ / .gradle / gradle.properties hinzuzufügen

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M

Für diejenigen, die die Datei nicht haben, gibt es zwei Möglichkeiten:

  1. Fügen Sie die Datei lokal in Ihr Projekt ein, indem Sie eine Datei mit dem Namen gradle.properties im Projektstamm erstellen oder

  2. Sie können sie global für alle Ihre Projekte festlegen, indem Sie dieselbe Datei in Ihrem Ausgangsverzeichnis erstellen (% UserProfile% .gradle unter Windows , ~ / .gradle unter Linux und Mac OS X ).

    Es wird empfohlen , die Eigenschaften in Ihrem Home-Verzeichnis und nicht auf Projektebene festzulegen.

Jorge Casariego
quelle
2

Sie können auch die Befehlszeile verwenden, um eine bessere Leistung zu erzielen. Sie können den Befehl ./gradlew <task name>aus dem Stammordner Ihres Projekts unter Linux verwenden oder die Datei gradlew.bat wie gradlew verwenden<task name> wenn Sie zum ersten Mal einen der obigen Befehle für einen bestimmten Gradle ausführen In dieser Version wird die entsprechende Gradle-Distribution heruntergeladen und zum Ausführen des Builds verwendet.

Wenn Sie ein Gradle-Projekt über seinen Wrapper importieren, fordert Ihre IDE möglicherweise die Verwendung der Gradle-Verteilung "Alle" an. Dies ist vollkommen in Ordnung und hilft der IDE, die Code-Vervollständigung für die Build-Dateien bereitzustellen. Dies bedeutet nicht nur, dass Sie Gradle nicht manuell installieren müssen, sondern Sie müssen auch die Version von Gradle verwenden, für die der Build entwickelt wurde. Dies macht Ihre historischen Builds zuverlässiger. Weitere Informationen finden Sie unter Ausführen eines Builds mit dem Wrapper

khakishoiab
quelle
2

Erhöhen Sie für schnellere Builds die maximale Heap-Größe für den Gradle-Daemon auf mehr als 2048 MB.

Dazu setzen Sie
org.gradle.jvmargs=-Xmx2048M
im Projekt gradle.properties .

Yuliia Ashomok
quelle
1

build.gradleDatei hinzufügen :

android {
...
dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    }
...
}

Ich hoffe, es hilft.

alicanozkara
quelle
1

Ich verwende ein i7 der 5. Generation mit Windows 10 und einem 1 TB Solid State. Ich habe den Ordner "Android Studio Projects" komprimiert und einen Anstieg von ca. 80% erzielt. Hoffe das hilft.

Ich habe es dann mit den obigen Lösungen kombiniert, dh (org.gradle.parallel = true, org.gradle.daemon = true). Der Leistungsschub war ziemlich beeindruckend.

Zusätzlich:

Alle oben genannten Antworten sind völlig richtig, aber ich muss als erfahrener Android-Entwickler (von viereinhalb Jahren) Folgendes angeben: Kein Android / Gradle-Entwickler sollte auf einem Computer mit einem Spinner-Laufwerk arbeiten Fester Zustand. Wir alle haben diese Wiedergabetaste in der IDE 100 Mal pro Tag gedrückt. Als ich von einem Spinner zu SSD (Post Gradle) wechselte, war meine Geschwindigkeit und Effizienz buchstäblich zwei- bis viermal schneller und ich verspreche Ihnen, dass ich hier NICHT übertreibe.

Jetzt spreche ich nicht von einer Maschine mit einer kleinen SSD und einem großen Spinner, sondern von einer großen SSD. Wenn Sie bereits einen Computer mit einer kleinen SSD und einem großen Spinner haben, können Sie den kleinen Spinner auf eine 500-GB-SSD aktualisieren und die SSD als Ihr Hauptbetriebssystem mit den darauf installierten Entwicklertools festlegen.

Wenn Sie also in einer schnelllebigen Umgebung arbeiten, zeigen Sie diesen Beitrag bitte Ihrem Chef. Eine anständige 1-TB-SSD bringt Ihnen etwa 300 GBP (einschließlich Mehrwertsteuer) oder etwa 160 GBP für eine 500-GB-SSD zurück. Je nachdem, ob Sie ein Junior- oder Senior-Android-Entwickler sind, macht sich das Laufwerk in 1 - 2 Arbeitswochen (in etwa zweieinhalb bis 5 Arbeitstagen) bezahlt, wenn Sie in ein kleineres investieren. sagen wir 500 GB SSD.

Viele Entwickler mögen argumentieren, dass dies nicht der Fall ist, aber es ist der Fall für Gradle, da das Gradle-System den direkten Festplattenzugriff sehr schwer macht. Wenn Sie mit .NET / C # / VB Net oder anderen Entwicklungstools arbeiten, werden Sie keinen großen Unterschied bemerken, aber der Unterschied in Gradle ist RIESIG. Wenn Sie auf diesen Beitrag reagieren, verspreche ich Ihnen, werden Sie nicht enttäuscht sein. Persönlich verwende ich den i7 der fünften Generation mit 8 GB RAM, der ursprünglich mit einem 1-TB-Spinner geliefert wurde, und habe ihn auf eine Samsung SSD 840 EVO 1 TB aktualisiert. Seitdem habe ich nie mehr zurückgeschaut. Ich habe meine gekauft von: https://www.aria.co.uk .

Hoffe das hilft. Außerdem muss ich sagen, dass dies KEIN kommerziell motivierter Beitrag ist. Ich empfehle Aria nur, da ich sie schon oft verwendet habe und sie immer zuverlässig waren.

user2288580
quelle
1

Einige Befehle, die wir der Datei gradle.properties hinzufügen können:

org.gradle.configureondemand = true - Dieser Befehl weist gradle an, nur die Projekte zu erstellen, die wirklich erstellt werden müssen. Use Daemon - org.gradle.daemon = true - Daemon hält die Instanz des Gradles auch nach Abschluss Ihres Builds im Hintergrund aktiv. Dadurch entfällt die Zeit, die zum Initialisieren des Gradles erforderlich ist, und das Build-Timing wird erheblich verkürzt.

org.gradle.parallel = true - Erlaube gradle, dein Projekt parallel zu erstellen. Wenn Ihr Projekt mehrere Module enthält, kann gradle durch Aktivieren dieser Option Build-Operationen für unabhängige Module parallel ausführen.

Heap-Größe erhöhen - org.gradle.jvmargs = -Xmx3072m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8 - Seit Android Studio 2.0 verwendet Gradle Dex, um die Build-Timings für das zu verringern Projekt. Im Allgemeinen werden beim Erstellen der Anwendungen mehrere dx-Prozesse auf verschiedenen VM-Instanzen ausgeführt. Ab Android Studio 2.0 werden alle diese dx-Prozesse in einer einzelnen VM ausgeführt, und diese VM wird auch mit dem Gradle geteilt. Dies verkürzt die Erstellungszeit erheblich, da der gesamte Dex-Prozess auf denselben VM-Instanzen ausgeführt wird. Dies erfordert jedoch einen größeren Speicher, um alle Dex-Prozesse und Gradle aufzunehmen. Das bedeutet, dass Sie die vom Gradle-Daemon benötigte Heap-Größe erhöhen müssen. Standardmäßig beträgt die Heap-Größe für den Daemon etwa 1 GB.

Stellen Sie sicher, dass keine dynamische Abhängigkeit verwendet wird. Verwenden Sie also nicht die Implementierung 'com.android.support:appcompat-v7:27.0.+'. Dieser Befehl bedeutet, dass gradle bei jeder Erstellung der App online geht und nach der neuesten Version sucht. Verwenden Sie stattdessen feste Versionen, z. B. 'com.android.support:appcompat-v7:27.0.2'.

Ashish Kumar
quelle
1

Fügen Sie dies Ihrer gradle.propertiesDatei hinzu

org.gradle.daemon=true                                                          
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048M
Jay
quelle
1

Öffnen Sie gradle.properties aus dem Android-Ordner und kommentieren Sie hervorgehobene Zeilen aus und geben Sie Speicherwerte gemäß Ihrer Computerkonfiguration an. Ich habe 8 GB RAM auf meinem Computer, also habe ich maximal 4096 MB bzw. 1024 MB angegeben.

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
//Uncomment below line for providing your system specific configuration
#org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError - Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
#http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 //Uncomment below line to allow parallel process execution.
 #org.gradle.parallel=true

Danach wurde meine Bauzeit auf die Hälfte reduziert. Fröhliches Bauen !!

Rajesh Sharma
quelle
0

Dies passiert häufig, wenn Sie Multidex in Ihrem Projekt aktiviert haben. Dies kann möglicherweise Ihren Entwicklungsprozess verlangsamen !! Laut doc :

Die Multidex-Konfiguration erfordert eine erheblich längere Build-Verarbeitungszeit, da das Build-System komplexe Entscheidungen darüber treffen muss, welche Klassen in der primären DEX-Datei enthalten sein müssen und welche Klassen in sekundären DEX-Dateien enthalten sein können. Dies bedeutet, dass inkrementelle Builds mit Multidex normalerweise länger dauern und möglicherweise Ihren Entwicklungsprozess verlangsamen können.

Sie können dies jedoch optimieren:

Um längere inkrementelle Build-Zeiten zu verkürzen, sollten Sie Pre-Dexing verwenden, um die Multidex-Ausgabe zwischen Builds wiederzuverwenden.

Wenn Sie Android Studio 2.3 und höher verwenden, verwendet die IDE diese Funktion automatisch, wenn Sie Ihre App auf einem Gerät mit Android 5.0 (API-Stufe 21) oder höher bereitstellen.

Sie müssen also die minSdkVersion auf 21 oder höher einstellen !

Wenn Ihre Produktionsversion jedoch minSdkVersion unter 21 unterstützen muss, z. B. 19

Mit productFlavors können Sie minSdkVersion 21 für Ihre Entwicklungsversion festlegen :

    android {
    defaultConfig {
        ...
        multiDexEnabled true
        // The default minimum API level you want to support.
        minSdkVersion 15
    }
    productFlavors {
        // Includes settings you want to keep only while developing your app.
        dev{
            //the IDE automatically uses  pre-dexing feature to mitigate longer incremental when deploying your app to a device running Android 5.0 !
            minSdkVersion 21
        }
        prod {

        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile 'com.android.support:multidex:1.0.3'
}
Serg Burlaka
quelle
0

Ich bevorzuge das Erstellen über die Befehlszeile, um bessere Erstellungszeiten zu erzielen. Wenn Ihre App-Codebasis groß ist und Sie über mehrere Module verfügen, können Sie den hier beschriebenen lokalen AAR-Ansatz ausprobieren. Dies erhöht die Leistung von Android Studio und die Gradle-Erstellungszeiten erheblich. Es ist auch mit Befehlszeilen-Builds kompatibel

https://blog.gojekengineering.com/how-we-improved-performance-and-build-times-in-android-studio-306028166b79

Demo-Projekt mit Integrationsanweisungen finden Sie hier: https://github.com/akhgupta/AndroidLocalMavenRepoAARDemo

Akhil
quelle