valida studio ruta recursos proyecto muestra especificada errores error diseño crear comunes compiler abrir android gradle android-gradle android-build

ruta - ¿La construcción de Android Studio se ralentizó después de agregar nuevas bibliotecas?



error sdk android studio (7)

¿Configuró Gradle en Offline Work e intentó Edit custom VM options para un tamaño de pila mayor?

Otra solución es actualizar Android Studio a Android Studio 3.0, que también aumenta la velocidad de compilación

Mi aplicación utiliza componentes de arquitectura antiguos. Quiero pasar a los nuevos componentes de la arquitectura de Android .

Para este propósito, agregué dependencias relacionadas con la habitación al principio, después de que la construcción fuera normal.

Pero cuando intenté agregar dependencias para Lyfecycles, LiveData y ViewModel, como se menciona here .

El proceso de construcción de la aplicación se ralentizó considerablemente, se requieren 5 minutos y más tiempo para crear el apk.

Siguientes dependencias agregadas en build.gradle de la aplicación:

compile "android.arch.lifecycle:runtime:1.0.0-alpha5" compile "android.arch.lifecycle:extensions:1.0.0-alpha5" annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha5"

También tengo que habilitar jack para compatibilidad con Java 8, de la siguiente manera:

defaultConfig { ........ jackOptions { enabled true } }

Después de agregar todos estos componentes, el proceso de construcción se ha reducido considerablemente. Intenté realizar algunos cambios personalizados en las opciones de VM para algunos parámetros yendo a Help -> Edit custom VM options

-Xmx5120m

Lo puse a casi 5 GB pero nada funcionó para mí. Mi máquina tiene suficiente hardware, creo. (8 GB de RAM, Windows 10, HDD de 1TB, AMD A8)

Mi aplicación hace uso de muchos servicios de Google, como la API de Gmail, las API de Firebase, algunas otras bibliotecas ¿agoté el límite de referencia de 64K? Pero ya he habilitado el multidexing como se menciona here .

¿Esto sucedió debido a los nuevos componentes de la arquitectura o algo más? ¿Cómo hago el proceso de construcción más rápido?

Actualización:

Una de las respuestas a continuación de Budius sugirió que un script que muestre los tiempos tomados por cada proceso de construcción, lo ejecuté en mi aplicación, aquí están los resultados:

BUILD SUCCESSFUL Total time: 18 mins 28.44 secs Task timings: 480ms :app:mergeDebugResources 2516ms :app:processDebugResources 487725ms :app:transformClassesWithPreJackPackagedLibrariesForDebug 29213ms :app:transformClassesWithPreJackRuntimeLibrariesForDebug 752ms :app:transformResourcesWithMergeJavaResForDebug 556894ms :app:transformJackWithJackForDebug 5184ms :app:transformNativeLibsWithMergeJniLibsForDebug 17524ms :app:packageDebug

Jack toma la mayoría de los tiempos.

Probé la versión canaria que se sugiere en la siguiente respuesta de Bryan continuación se muestra el tiempo tomado para el proceso de construcción:

BUILD SUCCESSFUL in 6m 11s 42 actionable tasks: 33 executed, 9 up-to-date Task timings: 608ms :app:preDebugBuild 350ms :app:mergeDebugResources 394ms :app:processDebugManifest 2543ms :app:processDebugResources 9410ms :app:javaPreCompileDebug 46585ms :app:compileDebugJavaWithJavac 262ms :app:compileDebugShaders 395ms :app:mergeDebugAssets 5835ms :app:packageInstantRunResourcesDebug 98922ms :app:transformClassesWithDesugarForDebug 334ms :app:transformClassesWithExtractJarsForDebug 7765ms :app:transformClassesWithInstantRunVerifierForDebug 23117ms :app:transformNativeLibsWithMergeJniLibsForDebug 10128ms :app:transformResourcesWithMergeJavaResForDebug 16565ms :app:transformClassesWithInstantRunForDebug 11825ms :app:transformClassesWithInstantRunSlicerForDebug 84703ms :app:transformClassesWithDexBuilderForDebug 17061ms :app:transformDexArchiveWithDexMergerForDebug 1706ms :app:transformDexWithInstantRunDependenciesApkForDebug 9770ms :app:transformDexWithInstantRunSlicesApkForDebug 10571ms :app:packageDebug 1387ms :app:buildInfoGeneratorDebug

Así que quité el jack y cambié a esta versión canaria, la compilación es más rápida que la anterior pero es lenta para su uso.


Agrega lo siguiente en el build.gradle dentro de Android {}

dexOptions { incremental true javaMaxHeapSize "4g" }

Establezca lo siguiente en el archivo gradle.properties:

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


Archivo -> Configuración -> (lado izquierdo) Compilación, Ejecución, Desarrollo -> Herramientas de compilación -> Gradle

Bajo la "Configuración global de Gradle" habrá una casilla de verificación llamada "Trabajo sin conexión". Revisalo.

¿Lo has hecho?


Como la biblioteca tiene un procesador de anotaciones, debe generar un nuevo código en las clases generadas. Dagger es también una biblioteca que genera código. Butterknife lo mismo.

Puedes encontrarlos en la app/build/generated carpeta de proyecto.

Puede consultar más sobre el procesador de anotaciones here .

También puede ser de su disco duro. Un SSD podría darle mucho más poder de procesamiento.


El Jack Toolchain está en deprecated , y aún estaba en una fase experimental antes de su desaprobación. Aunque el proceso de generación de código puede ser lento (como lo mencionó @ FlorescuGeorgeCătălin), generalmente no causa tiempos de construcción excesivamente lentos. Sospecho que la causa de tus tiempos de construcción lentos es el Jack Toolchain; ya it is notoriously slow .

Si desea funciones de lenguaje Java 8, le sugiero que se mude a la versión canaria de Android Studio 3.0 que las tiene built-in .

Si esa no es una opción, podría usar Retrolambda en Retrolambda lugar, que incluye la mayoría de las mismas funciones de lenguaje de Java 8.


Esta es una posibilidad remota, pero ¿hay un dispositivo Android real conectado a su máquina de prueba? En realidad, me doy cuenta de que mi AS se ejecuta muy lentamente si tengo mis dispositivos de prueba conectados, tal vez el ADB tenga problemas y eso ralentice el sistema.

Alternativamente, actualicé a un procesador ram i7 de 16 gb desde mi máquina anterior y las cosas comenzaron a ejecutarse mucho más rápido.


Mucho de su pregunta se basa en suposiciones de que esto o aquello podría ser, que hay "lotes". Pero el tiempo es algo muy fácil de medir, y gradle divide el proceso de construcción en varias tareas más pequeñas. Entonces, supongo que tu mejor acción es medir cada tarea y entonces puedes comparar lo que está tomando tanto tiempo.

Aquí hay un script que hice para medir los tiempos de compilación , solo agréguelo a la carpeta raíz de su proyecto y en su archivo de nivel superior, agregue apply from: ''time.gradle''

timer.gradle

import java.util.concurrent.TimeUnit class TimingsListener implements TaskExecutionListener, BuildListener { private long startTime private timings = [] @Override void beforeExecute(Task task) { startTime = System.nanoTime() } @Override void afterExecute(Task task, TaskState taskState) { def ms = TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS); timings.add([ms, task.path]) } @Override void buildFinished(BuildResult result) { println "Task timings:" for (timing in timings) { if (timing[0] >= 250) { printf "%7sms %s/n", timing } } } @Override void buildStarted(Gradle gradle) {} @Override void projectsEvaluated(Gradle gradle) {} @Override void projectsLoaded(Gradle gradle) {} @Override void settingsEvaluated(Settings settings) {} } gradle.addListener new TimingsListener()