Если я правильно понимаю
- Ваш проект является проектом библиотеки Android.
- Ваша задача копирования пытается скопировать все фляги внутри библиотеки AAR.
- переименуйте классы. Jar.
Вероятно, ниже, что вы хотите. Добавьте это в build.gradle в root проекте.
// Add this into the build.gradle under **root** project.
// Add the modules that you want to exclude from having this copyXXXJar task.
def modulesExcluded = [
'app',
'mastermodulewantedoutput'
]
subprojects { prj ->
// Skip excluded modules
if (modulesExcluded.contains(prj.name)) {
prj.afterEvaluate {
tasks['preBuild'].dependsOn(copyModuleJars)
}
return
}
prj.afterEvaluate {
/**
* Dynamically create task "copyXXXJar" according to build variant of each library module.
*/
android.libraryVariants.all { variant ->
def capitalizedVariantName = variant.name.capitalize()
def variantName = variant.flavorName
if (!variantName || variantName == "") {
variantName = variant.buildType.name
} else {
variantName += "-${variant.buildType.name}"
}
//================================================================================
// Define build/copy variant jar and copy to dependencies
//================================================================================
def copyJarTask = project.tasks.create("copy${capitalizedVariantName}Jar", Copy) {
group "Copy Jar"
description "Rename the classes.jar to ${project.name}-${variantName}.jar and copy it into dist folder."
def fromDirModule = "$buildDir/outputs/aar/${project.name}-${variantName}.aar"
def intoDirModule = "$rootDir/dependencies/$variant.buildType.name"
from(zipTree(fromDirModule))
into(intoDirModule)
include('*.jar')
include('libs/*.jar')
rename('classes.jar', "${project.name}-${variantName}.jar")
dependsOn "assemble${capitalizedVariantName}"
}
copyModuleJars.dependsOn(copyJarTask)
}
}
}
// Task to copy all the modules' jars. It can be run with command [ ./gradlew copyModuleJars ]
task copyModuleJars {
group = 'Copy Jar'
description = 'Copy the classes.jar from each module.'
}
Запустите команду ниже для проверки
./gradlew copyModuleJars
Надеюсь, это поможет.
--------- Отредактировано ----------
Я проверил ваш проект gitlab. Похоже, вам нужна только банка внутри .aar. Я хотел бы сказать, что это может вызвать некоторые проблемы, потому что вы удаляете связанные файлы res, файл aidl, assets и R.txt и т. Д., Которые считаются необходимыми частями библиотеки .aar. Например, одна из ваших зависимостей aar appcompat-v7-28.0.0-alpha3 на самом деле будет иметь разметку ниже, когда вы ее распакуете, NOT ONLY classes.jar .
Кроме того, вы можете просто изменить массив modulesExcluded , как я редактировал выше. А проверку состояния " hasProperty () " можно удалить.
Вывод будет в " $ rootDir / dependencies ". Примерно так:
- отладки
- genericutils-debug.jar
- mastermodule-debug.jar
- релиз
- genericutils-release.jar
- mastermodule-release.jar
Эти файлы создаются из вашего собственного исходного кода, то есть из ваших genericutils и mastermodule источников. Если переходные зависимости библиотеки имеют формат " .jar ", они перейдут в " libs / " из .aar , если они находятся в " .aar"формат, я не думаю, что вы можете просто выбрать его classes.jar , но лишить его связанных и необходимых частей, если у вас нет особых требований, а эти недостающие части не вопрос с вашим проектом.
-------- Отредактировано 2 ---------
В случае, если вы заботитесь только об исходном коде и не используете какие-либо ресурсы (res, R.txt, aidl, jni и т. Д.) Внутри логики кода, например, вероятно, ваш genericutils модуль будет таким случаем, тогда вы можете просто взять только classes.jar. Это не вызовет никаких проблем, если вы используете его как обычную библиотеку Java.