Tengo un proyecto múltiple (~10 módulos) cuya construcción tarda unos 20-30 segundos cada vez. Cuando pulso Ejecutar en Android Studio, tengo que esperar cada vez para reconstruir la aplicación, lo que es extremadamente lento.
¿Es posible automatizar el proceso de construcción en Android Studio? ¿O tienes algún consejo sobre cómo hacer este proceso más rápido?
En Eclipse, gracias a la construcción automática, la ejecución del mismo proyecto en un emulador tarda unos 3-5 segundos.
Este es mi archivo build.gradle (módulo de la aplicación):
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
}
}
Lo siento, pero la actualización de la estación de desarrollo a SSD y toneladas de ram tiene probablemente una mayor influencia que los puntos de abajo combinados.
Aumentar el rendimiento de la construcción tiene una prioridad importante para los equipos de desarrollo, así que asegúrese de que está utilizando la última Gradle y Android Gradle Plugin.
Crea un archivo llamado gradle.properties
en el directorio que corresponda:
/home/<username>/.gradle/
(Linux)/Users/<username>/.gradle/
(Mac)C:\NUsers<nombredeusuario>\N.gradle
(Windows)Anexar:
`Language:properties&>
# 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
Las propiedades de Gradle funcionan localmente si las colocas en projectRoot\gradle.properties
y globalmente si las colocas en user_home.gradle\gradle.properties
. Las propiedades se aplican si ejecutas las tareas de gradle desde la consola o directamente desde idea:
Es posible ajustar la integración Gradle-IntelliJ desde la GUI de configuración del IDE. Habilitando "el trabajo fuera de línea" (revisa la respuesta de yava más abajo) deshabilitará las solicitudes de red reales en cada "archivo de gradle de sincronización".
Uno de los pasos más lentos de la construcción del apk es la conversión del bytecode java en un único archivo dex. Habilitar el multidex nativo (minSdk 21 sólo para construcciones de depuración) ayudará a la herramienta a reducir una cantidad de trabajo (revise la respuesta de Aksel Willgert más abajo).
Preferir las dependencias de @aar
a los subproyectos de bibliotecas.
Busca el paquete aar en mavenCentral, jCenter o usa jitpack.io para construir cualquier biblioteca desde github. Si no estás editando las fuentes de la biblioteca de la dependencia no debes construirla cada vez con las fuentes de tu proyecto.
Considera excluir los archivos del proyecto y de la caché del escaneo del antivirus. Esto es obviamente un compromiso con la seguridad (¡no intente esto en casa!). Pero si cambias mucho entre ramas, entonces el antivirus volverá a escanear los archivos antes de permitir que el proceso de gradle lo utilice, lo que ralentiza el tiempo de construcción (en particular el proyecto de sincronización de AndroidStudio con los archivos de gradle y las tareas de indexación). Mide el tiempo de compilación y la CPU del proceso con y sin antivirus activado para ver si está relacionado.
Gradle tiene soporte incorporado para perfilar proyectos. Diferentes proyectos utilizan una combinación diferente de plugins y scripts personalizados. El uso de --profile
ayudará a encontrar los cuellos de botella.
Busqué en todas partes para esto y finalmente encontré una solución que funciona para nosotros. Habilitando las construcciones paralelas (En OSX: preferences -> compiler -> gradle -> "Compile independent modules in parallel"
) y habilitando 'make project automatically' lo redujo de ~1 min a ~20 seg. Gracias a /u/Covalence.
http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_android_studio_way_slower_to_build/
Usted podría hacer el proceso más rápido, si usted utiliza gradle desde la línea de comandos. Hay mucha optimización que hacer para los desarrolladores del IDE. Pero es sólo una versión temprana.
Para más información lee esta discusión en g+ con algunos de los desarrolladores.