I am trying to create an AAR file for a library Android project using Android Studio and gradle.
I want to exclude from this archive specific folders and files but I cannot find a working solution.
The project has 2 flavours.
app/
|--libs/
|--src/
|--flavour1/
| |--java/
| |--a1/
| | |--class_File1.java
|--flavour2/
| |--java/
| |--a1/
| | |--class_File1.java
|--main/
|--java/
| |--...
|--res/
| |--raw/
| | |--comments.txt
| |--...
|--AndroidManifest.xml
and I use a build.gradle file like this one
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:+'
}
Generally speaking, I have experimented a lot. I have tried packagingOptions, exclusion in sourceSets but nothing seems to work. What I am trying to achieve is not include for example in the .AAR archive the file comments.txt and the folder "assets" which is an optional folder. I examine each time the .AAR file by renaming it to zip and looking into the files included.
I have also looked into the documentation here, where maybe configurations could be a solution but I am not sure how to use it or how to move forward. Any help will be appreciated.
Think it is related to this issue. Generally you could try with:
I couldn't get either of them to work though.
That said, you could make some ugly hacks like this:
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")
}