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

  • Programas funcionan bien con LibGDX -desktop pero no LibGDX - Android?
  • A condición de que la dependencia de grado sea AAR no JAR
  • Android Studio no puede resolver los símbolos del módulo AAR importado
  • Gradle lanzamiento de construcción todavía debuggable?
  • Advertencias de gradol y roboguice 2.0 de Android
  • Gradle force build tools version en bibliotecas de terceros?
  • Cordova Android - ERROR construyendo una de las plataformas: Código de error 1 para comando:
  • Biblioteca ya agregada: Gradle Build
  • Obtener el error "entrada duplicada: com / google / android / gms / internal / zzble.class" al intentar agregar un paquete
  • Cómo obtener Android Studio, Gradle y Android Annotations trabajando juntos
  • Error de generación de Gradle al intentar usar Facebook SDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.