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.
- Android studio no descargar fuentes y javadoc
- app: transformClassesWithJarMergingForDebug '. TransformException: java.util.zip.ZipException: entrada duplicada mientras se ejecuta gradlew assembleDebug
- Agrega la API de datos de YouTube a Android Studio
- La compilación de Gradle falla al buscar los servicios de Google Play en Android Studio
- ¿Cómo conoce Android Studio sobre las nuevas versiones de dependencia?
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.
- Sonar Android Lint sin problemas encontrados
- Crear archivo de propiedades usando gradle
- Gradle no puede encontrar classpath para el complemento de Android
- Gradle build installRelease tarea falta en el proyecto de Android
- Android Studio 0.4 Archivos duplicados copiados en APK META-INF / LICENSE.txt
- Android Studio no puede importar mis proyectos de Eclipse, ya sea directamente o como proyecto Gradle
- Gradle - ¿Cómo obtener valores de AndroidManifest?
- Actualización de dependencias de Gradle
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 .
- Añadir IMEI y MAC a wlan0 a Genymotion / AndroVM
- ¿Cómo iniciar una actividad de Android desde una aplicación de Unity?