Cómo excluir un archivo de un archivo de biblioteca Android .AAR con gradle

Estoy tratando de crear un archivo AAR para una biblioteca de proyectos Android con Android Studio y gradle.

Quiero excluir de este archivo carpetas y archivos específicos pero no puedo encontrar una solución de trabajo.

El proyecto tiene 2 sabores.

app/ |--libs/ |--src/ |--flavour1/ | |--java/ | |--a1/ | | |--class_File1.java |--flavour2/ | |--java/ | |--a1/ | | |--class_File1.java |--main/ |--java/ | |--... |--res/ | |--raw/ | | |--comments.txt | |--... |--AndroidManifest.xml 

Y uso un archivo build.gradle como este

 apply plugin: 'com.android.library' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { minSdkVersion 10 targetSdkVersion 21 } packagingOptions { exclude 'assets' exclude '**/comments.txt' } sourceSets { flavour1 { resources { exclude '**/comments.txt' } } flavour2 { } } buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } productFlavors { flavour1 { packagingOptions { exclude 'assets' exclude 'res/raw/comments.txt' } } flavour2 { } } } dependencies { compile 'com.google.android.gms:play-services:+' } 

En términos generales he experimentado mucho. He intentado packagingOptions, exclusión en sourceSets pero nada parece funcionar. Lo que intento lograr no es incluir por ejemplo en el archivo .AAR el archivo comments.txt y la carpeta "assets" que es una carpeta opcional. Examino cada vez que el archivo .AAR renombrándolo a zip y mirando en los archivos incluidos.

También he estudiado la documentación aquí: http://simpligility.github.io/android-maven-plugin/aar-mojo.html#configurations donde quizás las configuraciones podrían ser una solución, pero no estoy seguro de cómo usarlo o cómo avanzar. Cualquier ayuda será apreciada.

Piensa que está relacionado con este tema. Generalmente usted podría intentar con:

  • El conjunto de fuentes excluye
  • Opciones de embalaje
  • Opciones de Aapt

No pude conseguir cualquiera de ellos para trabajar.

Dicho esto, usted podría hacer algunos hacks feo como este:

 def filterVariant = { variantToFilter, filterTask-> def vv = android.sourceSets."${variantToFilter}".res.srcDirs println "${variantToFilter} --> ${vv*.toString()}" def variantRes = android.sourceSets."${variantToFilter}".res variantRes.srcDirs.each{ resDir-> def filterOutput = "${buildDir}/res-filter" if (resDir.toString().contains(filterOutput)) { return } println "begin filter ${resDir} to ${filterOutput}/${variantToFilter}" filterTask.from fileTree(dir: resDir, exclude: '**/comment.txt') filterTask.into "${filterOutput}/${variantToFilter}" variantRes.srcDirs = ["${filterOutput}/${variantToFilter}"] } } project.task('filterMainResources', type: Copy) { filterVariant 'main', it } android.libraryVariants.all{ variant -> project.task("filter${variant.name}Resources", type: Copy) { filterTask -> filterVariant "${variant.name}", filterTask filterTask.dependsOn "filterMainResources" } variant.mergeResources.dependsOn("filter${variant.name}Resources") } 

No puedo intentarlo ahora mismo, pero esto probablemente sería mi enfoque:

 sourceSets { main { manifest.srcFile 'AndroidManifest.xml' aidl.srcDirs = ['src'] resources.srcDirs = ['src'] renderscript.srcDirs = ['src'] java.srcDirs = ['src'] res.srcDirs = ['res'] } flavor1 { java.srcDirs = ['src/main/java', 'src/flavor1/java'] res.srcDirs = ['src/flavor1/res'] //this differs from your structure assets.srcDirs = [] } flavor2 { java.srcDirs = ['src/main/java', 'src/flavor2/java'] res.srcDirs = ['src/flavor2/res'] //this differs from your structure assets.srcDirs = ['src/main/res/raw'] } } 

Una vez más, no pude probarlo, así que esto podría ser un disparate completo. La idea era no excluir cosas, pero sólo incluir los archivos / dirs que desea en su sabor. Esto puede conducir a la duplicación de archivos / carpetas por sabor!

Como fuentes recomendaría: Gralde Plugin Guía del usuario , la respuesta de Xavier Ducrohet y también este Gradle + Android, desea sobrescribir / activos con carpeta personalizada en buildFlavor .

  • Varias versiones de la misma biblioteca
  • Gradle JUnit Espresso en el emulador connectedAndroidTest java.lang.IncompatibleClassChangeError
  • Android Studio: ¿Cómo excluir el módulo google-services en el sabor del producto?
  • Preguntas sobre la prueba de unidad Android con gradle o estudio de android
  • Gradle (plugin experimental androide) ignora una dependencia del proyecto
  • Android Gradle compilar commons-io crea duplicado en el árbol de la biblioteca
  • Gradle del sistema de compilación de Android
  • Gradle define el valor de la ruta absoluta para un archivo de almacén de claves
  • Gradle construye realmente lento con una estructura multi-proyecto
  • Cómo cambiar la versión de herramientas de compilación en Android Studio
  • No se puede resolver el símbolo 'AndroidJUnit4'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.