Ну, собственно, сам и отвечу
android.libraryVariants.all { variant ->
tasks.create(name: "fatJar${variant.name.capitalize()}", type: Jar, dependsOn: assembleRelease) {
doFirst {
baseName = variant.name
destinationDir = file('output')
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from zipTree(tasks.getByName("package${variant.name.capitalize()}Jar").outputs.files.singleFile)
def closure = { file ->
if (file.name.endsWith('.aar')) {
println file.name
List<File> listJarFiles = zipTree(file).findAll { fileInAar ->
fileInAar.name.endsWith('.jar')
}
def listClassesFilesFromJars = listJarFiles.collect {
zipTree(it)
}
listClassesFilesFromJars
} else if (file.name.endsWith('.jar')) {
return zipTree(file)
}
}
from configurations.compile.files.collect(closure)
from configurations.getByName("${variant.name}Compile").files.collect(closure)
}
}
}
добавляет таск с названием fatJar{variantName}
каждый таск проходит по всем зависимостям compile и {variantName}Compile, собирает jar и aar- файлы (если файл aar - то из него достается classes.jar + джарники из libs) и все это упаковывается в файл с названием {variantName}.jar
и второй скрипт, который делает то же самое, только не запаковывает все в fatJar, а собирает все библиотеки в одну директорию
android.libraryVariants.all { variant ->
tasks.create(name: "collectJars${variant.name.capitalize()}", type: Copy, dependsOn: assembleRelease) {
delete file("output/outputJars${variant.name.capitalize()}")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from tasks.getByName("package${variant.name.capitalize()}Jar").outputs.files.singleFile, {
rename 'classes.jar', variant.name + "-" + project.version + ".jar"
}
def closure = { file ->
if (file.name.endsWith('.aar')) {
println file.name
zipTree(file).findAll { fileInAar ->
fileInAar.name.endsWith('.jar')
}.each { f ->
if(f.name == "classes.jar") {
from f, {
println f.name
rename "classes", file.name.substring(0, file.name.lastIndexOf("."))
}
} else {
from f
}
}
} else if (file.name.endsWith('.jar')) {
from file
}
}
configurations.compile.files.collect(closure)
configurations.getByName("${variant.name}Compile").files.collect(closure)
into 'output/outputJars' + variant.name.capitalize()
}
}