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.

¿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?

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

  • ¿Cómo solucionar ProcessException mientras se construye APK después de actualizar las librerías de soporte?
  • ¿Cuál es la sintaxis para escribir comentarios en el archivo build.gradle?
  • Gradle y dependencias no transitivas anidadas
  • Cómo resolver java.util.zip.ZipException?
  • Error de generación con Android Studio 3.0 Canary 4
  • Android Studio 0.2.7 generar excepción con Gradle
  • Android Studio utilizando una biblioteca y un proyecto con el mismo nombre de paquete
  • ¿Es posible Proguard un módulo de biblioteca de Android, pero no el módulo de aplicación?
  • Android Studio: falló el proyecto de sincronización de Gradle
  • El conmutador Android a gradle no compila características de código JRE7
  • ¿Cómo obtener cobertura de código con Android Studio?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.