Acelerar gradle build en la aplicación multidex
Mi aplicación tiene un montón de bibliotecas que son esenciales por eso me vi obligado a utilizar la biblioteca de soporte multidex y funciona muy bien. Pero donde el problema se muestra en la velocidad gradle buid. Se tarda un promedio de 2 minutos para construir y cuando estoy desarrollando y probando esto es bastante molesto.
¿Hay una manera de acelerar mis compilaciones de depuración?
- AVD no se está ejecutando
- ListView es muy lento - android
- Problema de rendimiento en la fuente personalizada TextView
- ¿Cómo almacenar en caché y almacenar objetos y establecer una política de expiración en android?
- ¿Cómo puedo evitar los retrasos de recolección de basura en juegos Java? (Mejores Prácticas)
- ¿Cómo dibujar muchos rectángulos en lona con buen funcionamiento?
- ¿Qué indica sf_frame_dur en los registros de Logcat de Android?
- ¿Existe una herramienta para eliminar las variables no deseadas, no utilizadas
- Android Map Rendimiento pobre debido a muchas superposiciones?
- Android drawBitmap rendimiento de lotes de mapas de bits?
- No se puede ejecutar "ANY" reaccionar proyecto ejemplo nativo
- Android Share Preferences vs Intent extra para compartir datos
- Rendimiento del dispositivo virtual Android
Puede acelerar las compilaciones de desarrollo especificando la versión mínima de SDK = 21.
La documentación oficial incluye toda una sección sobre eso.
Ejemplo (de la documentación):
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' }
Una vez que haya agregado los sabores del producto, puede utilizar la tarea devDebug
(en lugar de la tarea de debug
predeterminada) para sus desarrollos:
– desde la línea de comandos: run ./gradlew installDevDebug
– desde Android Studio: abra la ventana Variantes de devDebug
y seleccione la variante de construcción devDebug
.
Por supuesto, deberías trabajar contra un dispositivo cuyo SDK> = 21.
También hay una solución para aquellos que no quieren utilizar sabores. Como se sugiere en esta idea , calcule dinámicamente el valor de minSdkVersion
:
int minSdk = hasProperty('devMinSdk') ? devMinSdk.toInteger() : 14 apply plugin: 'com.android.application' android { ... defaultConfig { minSdkVersion minSdk ... } }
En este ejemplo, estamos comprobando si la propiedad devMinSdk
definida, y si es verdad, lo estamos utilizando. De lo contrario, usamos 14.
¿Cómo pasar devMinSdk
valor para construir la secuencia de comandos? Dos opciones:
Uso de la línea de comandos:
./gradlew installDebug -PdevMinSdk=21
Uso de las preferencias de Android Studio:
Vaya a Preferencias ( Configuración en Windows) -> Construcción, Ejecución, Implementación -> Compilador -> poner -PdevMinSdk=21
en el cuadro de texto Opciones de línea de comandos .
Recientemente la caché de construcción fue introducida por el equipo de trabajo en Android Gradle plugin. Puede habilitarlo agregando android.enableBuildCache=true
a gradle.properties
.
Más información aquí http://tools.android.com/tech-docs/build-cache
Para mí aumentó los tiempos de construcción incremental por ~ 30 segundos.
No funciona con el multidex heredado ( com.android.support:multidex
) introducido como parte de la biblioteca de soporte, por lo que es adecuado sólo si su minSDK> = 21. Usted puede configurarlo sólo para sus desarrollos y construye con builds MinSDK <21.
También funciona sin multidifusión activada.
Android Studio 1.3 (actualmente en Vista previa 3 ) utiliza un nuevo sistema de compilación que mejora el tiempo de generación de gradles (realmente, como 10-30 veces más rápido).
Más información en la Sesión en vivo en Google I / O 2015
Multidexing utiliza más memoria. A medida que se acerque a su tamaño de montón máximo en Java, encontrará que Java gasta más tiempo haciendo GC que lo hace haciendo cualquier trabajo real, esto puede ralentizar mucho las cosas.
Recomiendo encarecidamente el aumento del tamaño máximo heap cuando se utiliza multidex. Agregue lo siguiente al cierre de Android en su archivo build.gradle para hacer que el tamaño máximo del montón 4 GB (lo haga más pequeño si lo desea):
dexOptions { javaMaxHeapSize "4g" }
Cambiar MinSdk a 21 hizo todo volver a la normalidad para mí. Ahora todo se compila en como 6s
Vaya en la configuración, el compilador de búsqueda, escriba "–offline" en Opciones de línea de comandos y compilar.
- Navegar por la base de datos SQLite desde Android Studio
- Simple TextView.setText causa 40% de uso de CPU