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?

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 .

Opciones de compilador de Android Studio

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.

  • Simular ancho de banda bajo en android
  • Android webview rendimiento, ¿qué me falta?
  • Código postal / código postal de android lugar objeto
  • Inicio La actividad es lenta y la nueva actividad está vacía
  • Iteradores temporales de Java están ralentizando mi Android
  • Temas de Android: FinalizerWatchDogDaemon
  • Android - Declarativa vs interfaz de usuario programática
  • Problema de rendimiento de PublisherAdView loadAd en Android
  • Minimice la aplicación cuando haga clic en el botón Atrás android
  • Webview para ampliar la presentación con el tipo de vista
  • Cómo leer '/data/anr/traces.txt' en samsung S2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.