请注意,这不是 10 年前这个问题的重复:使用“flatDirs”将本地 .aar 文件添加到 Gradle 构建中不起作用,因为这曾经有用,但要注意避免
flatDirs
。我在使用 Gradle 8.9 迁移到 AGP 8.5.1 时遇到了这个问题 - 现在以前的方法显然已经过时了。因此,同时问题是:
如何在没有
*.aar
存储库的情况下将 flatDirs
添加到 Android 项目?
如果
AndroidManifest.xml
和资源不包含任何相关性,可以将 classes.jar
的 *.aar
提取到 libs
目录中。当手动添加清单条目和资源时,这仍然可能有效,该脚本只是不考虑任何这些。它期望 *.aar
文件位于 libs
目录中,其中还将放置 *.jar
。
// define Task dependency
tasks.named("preBuild") {
dependsOn("extractAar")
}
// extract AAR files
tasks.register('extractAar') {
doFirst {
project.fileTree('libs').filter { it.name.endsWith('.aar') }.each { aar ->
def outputDir = project.file("build/tmp/aarsToJars/${aar.name.replace('.aar', '')}/")
copy {
from zipTree(aar)
include "**/classes.jar"
into outputDir
}
if (outputDir.exists()) {
copy {
from "${outputDir.path}/classes.jar"
into project.file("libs")
rename { String fileName ->
fileName.replace("classes", "${aar.name.replace('.aar', '')}")
}
}
}
}
}
}
输出将被默认的
libs
目录条目引用:
dependencies {
implementation fileTree(include: ["*.jar"], dir: "libs")
}