Ich habe ein Multiprojekt (~10 Module), dessen Aufbau jedes Mal etwa 20-30 Sekunden dauert. Wenn ich in Android Studio auf Ausführen drücke, muss ich jedes Mal warten, um die App neu zu erstellen, was extrem langsam ist.
Ist es möglich, den Erstellungsprozess in Android Studio zu automatisieren? Oder haben Sie einen Rat, wie man diesen Prozess beschleunigen kann?
In Eclipse dauert die Ausführung desselben Projekts auf einem Emulator dank der automatischen Erstellung etwa 3-5 Sekunden.
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
}
}
Es tut mir leid, aber die Aufrüstung der Entwicklungsstation auf SSD und tonnenweise Ram hat wahrscheinlich einen größeren Einfluss als die folgenden Punkte zusammen.
Die Steigerung der Build-Performance hat für die Entwicklungsteams höchste Priorität, also stellen Sie sicher, dass Sie die neuesten Gradle und Android Gradle Plugin verwenden.
Erstellen Sie eine Datei namens "Gradle.properties" in einem beliebigen Verzeichnis:
/home/<benutzername>/.gradle/
(Linux)/Benutzer/<Benutzername>/.gradle/
(Mac)Anhängen:
# IDE (e.g. Android Studio) users:
# Settings specified in this file will override any Gradle settings
# configured through the IDE.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
# TODO: disable daemon on CI, since builds should be clean and reliable on servers
org.gradle.daemon=true
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# 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
# 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
org.gradle.parallel=true
# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true
# Set to true or false to enable or disable the build cache.
# If this parameter is not set, the build cache is disabled by default.
# 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. Die Eigenschaften werden angewendet, wenn Sie Gradle-Aufgaben von der Konsole oder direkt von idea ausführen:
Es ist möglich, die Gradle-IntelliJ-Integration über die IDE-Einstellungs-GUI zu optimieren. Das Aktivieren von "offline work" (siehe Antwort von yava unten) wird echte Netzwerkanfragen bei jeder "sync gradle file" deaktivieren.
Einer der langsamsten Schritte des apk-Builds ist die Konvertierung von Java-Bytecode in eine einzelne Dex-Datei. Das Aktivieren von nativem Multidex (minSdk 21 nur für Debug-Builds) hilft dem Tooling, den Arbeitsaufwand zu reduzieren (siehe Antwort von Aksel Willgert unten).
Bevorzugen Sie @aar
-Abhängigkeiten gegenüber Bibliotheksunterprojekten.
Suchen Sie das aar-Paket auf mavenCentral, jCenter oder verwenden Sie jitpack.io, um eine Bibliothek von github zu bauen. Wenn Sie die Quellen der abhängigen Bibliothek nicht bearbeiten, sollten Sie sie nicht jedes Mal mit den Quellen Ihres Projekts bauen.
Ziehen Sie in Erwägung, Projekt- und Cache-Dateien von Antiviren-Scans auszuschließen. Dies ist natürlich ein Kompromiss in Bezug auf die Sicherheit (probieren Sie das nicht zu Hause aus!). Aber wenn Sie häufig zwischen Zweigen wechseln, wird Antivirus die Dateien erneut scannen, bevor der Gradle-Prozess sie verwenden kann, was die Erstellungszeit verlangsamt (insbesondere AndroidStudio synchronisiert das Projekt mit Gradle-Dateien und Indizierungsaufgaben). Messen Sie die Erstellungszeit und die Prozess-CPU mit und ohne aktiviertem Antivirus, um zu sehen, ob es einen Zusammenhang gibt.
Gradle hat eingebaute Unterstützung für das Profiling von Projekten. Verschiedene Projekte verwenden eine unterschiedliche Kombination von Plugins und benutzerdefinierten Skripten. Die Verwendung von --profile
wird helfen, Engpässe zu finden.
Ich habe überall danach gesucht und schließlich eine Lösung gefunden, die für uns funktioniert. Das Aktivieren von parallelen Builds (Auf OSX: Preferences -> compiler -> gradle -> "Compile independent modules in parallel"
) und das Aktivieren von 'make project automatically' brachte es von ~1 min auf ~20 sec. Dank an /u/Covalence.
http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_android_studio_way_slower_to_build/
Sie könnten den Prozess beschleunigen, wenn Sie gradle von der Kommandozeile aus verwenden. Es gibt eine Menge Optimierungsmöglichkeiten für die IDE-Entwickler zu tun. Aber es ist nur eine frühe Version.
Für weitere Informationen lesen Sie diese Diskussion auf g+ mit einigen der Entwickler.