android - proyecto - gradle project
Gradle construye muy lento con una estructura multiproyecto (3)
Al hacer una clean
se eliminan las bibliotecas ya prefijadas.
Tal como se sugiere en este hilo , puede ahorrar algo de tiempo en clean
compilaciones clean
deshabilitando la expresión previa (porque en la siguiente compilación se eliminarán):
android {
dexOptions {
preDexLibraries = false
}
}
Cuando se construye con gradle en una configuración de proyectos múltiples que contiene aproximadamente 140 proyectos / bibliotecas, el tiempo de construcción tomó 1 hora y 22 minutos. Y --parallel
usando --parallel
. Y nuestra construcción ANT lleva menos de 20 minutos sin construcción paralela.
Aquí es exactamente lo que hice.
./gradlew clean
./gradlew build --parallel
Hice una pequeña prueba, parece que la demora está tomando la mayor cantidad de tiempo. ¿Hay alguna manera de hacer que el proceso de gradle reutilice lo que ya ha sido analizado? Si las bibliotecas ya han sido compiladas, debe reutilizar las bibliotecas ya dexeadas.
Vi la opción --no-rebuild
, pero cuando ejecuto con esa opción dice lo siguiente
File ''/path/to/project/build/libs/project.aar'' specified for property ''bundle'' does not exist.
Reemplacé la ruta del archivo y el nombre del proyecto con cosas genéricas.
Utilizando Gradle 1.9-rc-3
Información adicional (15 de enero de 2014):
preDexDebug
y preDexRelease
tomaron mucho tiempo en cada proyecto. Mucho más largo que cualquier otra tarea.
Progreso (15 de enero de 2014):
Ok, por ahora, puse preDexLibraries = false
en todos los archivos build.gradle
. Sin embargo, todavía me gustaría saber un lugar centralizado en el que pueda colocar esa entrada y que afecte a todos los demás archivos de build.gradle
.
Sin embargo, ahora dexRelease
y dexDebug
llevan mucho tiempo. ¿Hay alguna forma en que pueda decirle a la compilación que solo haga dexDebug
o dexRelease
y omita el otro?
Progreso (15 de enero de 2014):
Usando assembleDebug
funcionó. Sin embargo, todavía parece que no está reutilizando las bibliotecas ya dexed. Porque dexing sigue tardando una eternidad. Se tarda aproximadamente un minuto para cada proyecto. ¿Hay una manera de hacer que Gradle reutilice las bibliotecas ya dexed? ¿O hay una razón diferente por la que la construcción todavía toma aproximadamente una hora? Nuestro proceso ANT tarda menos de 15 minutos.
En este momento, cada proyecto pre-dex sus dependencias por sí mismo. Esto significa que 2 componentes, dependiendo de la misma biblioteca, ejecutarán pre-dex en el archivo classes.jar de esa biblioteca, lo cual es una tontería. Estamos mirando a arreglar esto.
¿Intentaste configurar los parámetros del compilador de Gradles?
Si tiene dependencias remotas, cada vez que ejecute el proyecto, se operará con recursos remotos utilizando la red. Debe definir las instrucciones para el compilador de Gradles para que trabaje sin conexión usando:
--offline
Aquí te dejo una captura de pantalla de la configuración del compilador para un mejor rendimiento:
O lo que es lo mismo ...
Fuente: http://gradle.org/docs/current/userguide/gradle_command_line.html