Gradle – recopilación de módulos selectivos (reutilización jar de lo contrario)
Estoy utilizando una gran cantidad de módulos en mi proyecto (locales y en línea,> 20 la mayoría de las veces) y puedo decir que normalmente no de ellos deben ser revisados ni recompilados. Podría incluir todos ellos como archivos. .jar
que aceleraría el tiempo de construcción, pero preferiría seguir:
- setup algo donde defino que gradle debería construir un
.jar
para todos mis módulos y reutilizarlos - si es necesario sólo deshabilitar esta configuración y construir mi proyecto (perfectamente una construcción limpia que hacer)
- Quiero poder editar mis módulos en el proyecto, por eso no quiero incluirlos directamente como archivos
.jar
.
Quiero tiempos de construcción más rápidos pero no quiero tener que construir los archivos .jar
y agregarlos manualmente a mi proyecto.
- Gradle Build Android Project Error "No se pudo resolver todas las dependencias"
- Error de secuencia de comandos de compilación, no compatible con el método Gradle DSL encontrado: 'android ()'!
- Gradle no puede resolver dependencias en Android Studio
- Diferentes dibujables basados en la variante de construcción en Gradle
- "No hay suficiente almacenamiento disponible para procesar este comando" - Gradle con complemento de Android
¿Alguna idea sobre cómo y si esto es posible? ¿Me doy cuenta de que a través de alguna configuración o mediante una tarea gradle o similar?
- Error en el corredor al realizar pruebas con Robolectric
- Android Annotations / Gradle / Android Studio problemas de construcción
- La división de APK por densidad aún contiene todos los recursos
- Sonar: Cómo utilizar gradle para inspeccionar un proyecto de android
- Gradle Javadoc tarea sin advertencias
- Error: (1, 0) No se encontró el complemento con id 'com.android.application'
- Error: Gradle: la ejecución falló para la tarea ': app: preDexDebug'
- Kotlin: Recopilación incremental con Gradle
Permítanme pensar en las bibliotecas de verificación, que existen en .jar y que debemos descargar. En otros casos, puede proporcionar varios tipos de sabores de productos. Y después de esto solo selecciona Build Flavors para tu trabajo.
productFlavors { fastDebug { applicationIdSuffix ".jar" } regularDegub { applicationIdSuffix ".regular" } .... // Other Configuration } dependencies { ... // Jar Debug by adding only Jar fastDegubCompile fileTree(dir: 'libs', include: '*.jar') fastDegubCompile 'com.android.support:support-v4:23.1.1' ... // Regular Debug with downloading all libraries // Including only specific from project files regularDegubCompile 'com.squareup.picasso:picasso:2.5.2' regularDegubCompile 'com.android.support:support-v4:23.1.1' regularDegubCompile files('libs/specific1.jar', 'libs/specific2.jar') }
| ACTUALIZACIÓN |
Así que después de alguna solución, veo que Gradle reunir bibliotecas en algún caché, donde puedo ver la fuente. Pero todavía busco a manera de bibliotecas de verificación correctas con la configuración del proyecto.
Por ahora escribí la escritura para recoger archivos de la localización del escondrijo de Gradle. Y copiándolos en la nueva localización, donde podemos utilizar los sabores de la estructura ,. Esto funciona muy rápido (menos de 7 segundos para 200 bibliotecas), pero todavía necesita mejoras (ver arriba).
si no tengo tiempo, para la próxima actualización, por favor, llene gratis para extender la solución. Gracias por entender.
// Task for calling from Gradle Scripts // ----------------------------------- task gatheringJarFilesTask << { println("Gathering Jars Start...") gatheringJarFiles(gradleCacheLocation, foundedJarsList) println("------------------------------") println("Gathering Jars End! Start copying!") copyFiles(projectJarsLocation, foundedJarsList) } // Constants, which might be optimized too // ----------------------------------- def gradleCacheLocation = '/home/kasyangenka/.gradle/caches/modules-2/files-2.1' def projectJarsLocation = '/home/kasyangenka/Projects/GradleScriptsTest/app/libs' List<String> foundedJarsList = [] // Main Script Methods // ----------------------------------- def gatheringJarFiles(baseDirPath, gatheredList) { new File(baseDirPath).eachFile {file -> println("-> Current file: " + file.getName()) if (file.isDirectory()) { gatheringJarFiles(file.getAbsolutePath(), gatheredList) } def containsLib = (file.getName().contains(".jar") || file.getName().contains(".aar")); if (containsLib) { println("->> Adding Jar file: " + file.getAbsolutePath()) gatheredList.add(file.getAbsolutePath()) } } } def copyFiles (destiny, List sourceList) { sourceList.each {filePath -> copy { from filePath into destiny } } }
Creo que la función de Continuous build
introducida desde Gradle 2.5 está tratando de solucionar el problema con lo que te encuentras, aunque no es exactamente lo que necesitas. Pase el comando -t
o gradlew
para usarlo, a continuación se muestra la descripción de la opción -t
.
-t, --continuous Habilita la generación continua. Gradle no sale y volverá a ejecutar las tareas cuando cambien las entradas del archivo de tareas. [incubación]
Y citado del documento:
El soporte de compilación incremental de Gradle garantiza que sólo se ejecutan las tareas que realmente se ven afectadas por el cambio.
Consulte: https://docs.gradle.org/current/userguide/continuous_build.html