La ejecución instantánea toma más tiempo que las compilaciones estándar

Ha pasado algún tiempo que Instant Run ya no funciona, es decir, es más lento que las compilaciones estándar.

Hay algún material en el rastreador de errores de AOSP, pero no pude resolverlo. Estoy seguro de que algunos de ustedes lo ayudarán.

Sin ejecución instantánea

Las construcciones tardan aproximadamente 1.30 min.

Con Instant Run

Ejecuto la aplicación por primera vez y luego aplico algún cambio menor. Por ejemplo, cambie int a = 1 a int a = 2 dentro de un método, o modifique una cadena.

A continuación, haga clic en Ejecutar de nuevo. Lo que pasa:

  • Aparece una compilación aparentemente completa (llamando a assembleDebug en todos mis módulos). Toma aproximadamente 1.30 min.
  • Una segunda ronda continúa, llamando a la app:assembleDebug . Se tarda alrededor de otro minuto:

     16:27:10 Executing tasks: [:app:assembleDebug] 16:28:16 Gradle build finished in 1m 5s 264ms 16:28:22 Instant Run applied code changes and restarted the app. 

Durante la primera ronda, no hay salida alguna a Event Log o Gradle Console. Durante la segunda ronda, la consola Gradle consume mucho material y termina con

 BUILD SUCCESSFUL Total time: 51.385 secs PREDEX CACHE HITS: 0 PREDEX CACHE MISSES: 45 Stopped 0 compiler daemon(s). 

¿Que puedo hacer?

Tengo estos en mi archivo de grade.properties :

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

Nada dex relacionado en archivos build.gradle . No usar a Jack. Android Studio 2.2.3.


Archivo gradle.properties

 org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.daemon=true ANDROID_BUILD_MIN_SDK_VERSION=15 ANDROID_BUILD_TARGET_SDK_VERSION=25 ANDROID_BUILD_SDK_VERSION=25 ANDROID_BUILD_TOOLS_VERSION=25.0.2 

Nivel de proyecto build.gradle

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.google.gms:google-services:3.0.0' } } allprojects { repositories { jcenter() } } 

Módulo principal build.gradle

(Tengo otros dos módulos de la "biblioteca" también)

 apply plugin: 'com.android.application' Properties signProp = new Properties() signProp.load(new FileInputStream(file(project.property("SIGN_PROPS")))) Properties authProp = new Properties() authProp.load(new FileInputStream(file(project.property("AUTH_KEYS_PROPS")))) def PARSE_APPLICATION_ID = '"' + authProp['parseApplicationId'] + '"'; def PARSE_CLIENT_KEY = '"' + authProp['parseClientKey'] + '"' def PARSE_SERVER_URL = '"' + authProp['parseServerURL'] + '"' def GOOGLE_PLAY_API_KEY = '"' + authProp['googlePlayApiKey'] + '"' android { signingConfigs { release_config { keyAlias signProp['keyAlias'] keyPassword signProp['keyPassword'] storeFile file(signProp['storeFilePath']) storePassword signProp['storePassword'] } } compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION) buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION defaultConfig { minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION) targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION) versionCode 21 versionName "1.3.3" buildConfigField 'String', 'PARSE_APPLICATION_ID', PARSE_APPLICATION_ID buildConfigField 'String', 'PARSE_CLIENT_KEY', PARSE_CLIENT_KEY buildConfigField 'String', 'PARSE_SERVER_URL', PARSE_SERVER_URL buildConfigField 'String', 'GOOGLE_PLAY_API_KEY', GOOGLE_PLAY_API_KEY signingConfig signingConfigs.release_config proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' vectorDrawables.useSupportLibrary = true } buildTypes { release { minifyEnabled true shrinkResources true } debug { minifyEnabled false shrinkResources false } } productFlavors { } } dependencies { compile 'com.android.support:design:24.2.1' compile 'com.android.support:cardview-v7:24.2.1' compile 'com.android.support:recyclerview-v7:24.2.1' compile 'com.android.support:preference-v14:24.2.1' compile 'com.google.maps.android:android-maps-utils:0.4.3' compile 'com.google.android.gms:play-services-maps:9.2.1' compile 'com.google.android.gms:play-services-appinvite:9.2.1' compile 'com.google.android.gms:play-services-location:9.2.1' compile 'com.google.android.gms:play-services-appindexing:9.2.1' compile ('com.facebook.android:facebook-android-sdk:4.16.1') { exclude module: 'bolts-tasks' } compile 'com.parse.bolts:bolts-tasks:1.4.0' compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.parse:parse-android:1.13.1' compile ('com.parse:parseui-widget-android:0.0.1') { exclude module: 'parse-android' } compile project(':dateTimePicker') compile project(':commons') } apply plugin: 'com.google.gms.google-services' 

http://tools.android.com/recent/androidstudio223isnowavailable

Actualiza a la última versión de Android Studio y luego aumenta el perfil de memoria en (studio.vmoptions) basado en la memoria del sistema

  -Xms256m -Xmx1280m -XX:MaxPermSize=350m 

Si estás utilizando los servicios de Google Play, asegúrate de no usarlo en el script de compilación de Gradle:

 compile 'com.google.android.gms:play-services:8.3.0' 

Utilice únicamente las API de Google que su aplicación está usando realmente. Si todo lo que estás usando es Google Maps, usarías esto:

 com.google.android.gms:play-services-maps:8.3.0 

Cuando hice esto, mi tiempo de compilación pasó de más de 2 minutos a alrededor de 25 segundos. Para obtener una lista de los API de Google que puede compilar selectivamente, consulte:

https://developers.google.com/android/guides/setup

Habilitar ejecución instantánea

  1. Abra el cuadro de diálogo Configuración o Preferencias.
  2. Vaya a Compilación, Ejecución, Implementación> Ejecución instantánea.
  3. Marque la casilla junto a Habilitar ejecución instantánea.

Limitaciones de la ejecución instantánea.

Implementación de varios dispositivos, Multidifusión de la aplicación, Uso de complementos de terceros, Pulsación de cambios en aplicaciones de procesos múltiples, Inicio de la aplicación en un perfil de trabajo.

Si utiliza soporte multidex (multiDexEnabled true) para su aplicación, minSdkVersion debe tener 21 o más. De lo contrario, android studio desactiva la ejecución instantánea.

El complemento de Android para la versión gradle debe ser 2.1.0 o superior

Habilitar Offline Trabajo android studio para acelerar:

Ir a la configuración del archivo >> o simplemente pulsar ctrl + alt + s

Archivo >> ajustes >> Gradle. Compruebe el trabajo fuera de línea en la configuración de graduación global

Mejorar el rendimiento de Gradle

Después de abrir el estudio android, abra el archivo gradle.properties desde el lado derecho de android studio y agregue las dos líneas siguientes.

  org.gradle.jvmargs=-Xmx1536m org.gradle.daemon=true org.gradle.parallel=true 

Configurar variantes de compilación de depuración en buildTypes

 debug { minifyEnabled false applicationIdSuffix ".debug" } 

Después de los cambios, debes reiniciar tu Android Studio.

Nota: El tiempo de compilación depende del procesador y la RAM. Me di cuenta en (i7-3610qm con 8gb RAM) cuando se compila 4 android proyecto de estudio a la vez, luego lento responder en la ventana. Después de terminar el proceso de construcción pc funciona normal.

Mantener las versiones bulit y la versión de destino iguales

  • Android Studio 2.0 Esperando depurador
  • Cambiar completamente el nombre del paquete, incluido el dominio de la empresa
  • Error de Gradle después de la actualización del estudio
  • Ejecutar aplicaciones de Android en el dispositivo de hardware de Android Studio por USB
  • Android Studio build.gradle - No se puede resolver el símbolo 'android'
  • La notificación con setGroupSummary (true) no está visible en Android N
  • Android Studio se bloquea y congela después de crear / ejecutar
  • Dudas con nombres de sabores y paquetes
  • ¿Cómo reemplazar una cadena por un buildvariant con gradle en android studio?
  • Cómo cambiar el emulador de destino en Android Studio?
  • Gradle genera errores al integrar DroidAR en un proyecto de estudio de android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.