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.
- Doloroso Unity proyecto de exportación a Android cada construcción (estoy haciendo algo mal)
- Cordova / Ionic build android Gradle error: La versión mínima de Gradle admitida es 2.14.1. La versión actual es 2.13
- Travis CI - Android Project Build Failing
- No hay carpeta de bundle de liberación después de actualizar Android Studio
- Gradle del sistema de compilación 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?
- ¿Es posible integrar Dagger y AspectJ en un proyecto de Android Studio?
- Archivos duplicados copiados (Android Studio 0.4.0)
- cómo generar un informe de cobertura de código para androidTest utilizando Jacoco en el estudio android
- Reduzca el tiempo de sincronización de Gradle en el estudio de Android
- Android Studio No se puede cargar la clase 'org.codehaus.groovy.runtime.typehandling.ShortTypeHandling'
- Gradle 0.9. + / 0.9.2 error: No se puede cargar la clase 'com.android.builder.testing.api.DeviceProvider'
- Auto incremento de código de versión sólo en versiones
- Cómo hacer que los complementos de Hugo y AndroidDevMetrics compile sólo en depuración:
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