我得到了包含一些资源生成功能的库。我有完成生成资源的任务:
val updateWidgetResourcesProvider = tasks.register<Copy>("updateWidgetResources") {
from("../../widget/")
include("*.png")
into("$sharedResLocation/raw")
rename { "asset_$it".replace("@", "_").toLowerCase() }
}
android.libraryVariants.all {
android.sourceSets[this.name].res.srcDirs(sharedResLocation)
mergeResourcesProvider.configure {
dependsOn(updateWidgetResourcesProvider)
}
}
我运行:myLibrary:build
时一切正常。
我还有一个应用程序,它使用库作为依赖项
dependencies {
implementation(project(":myLibrary"))
}
问题在我构建:app:build
时开始。任务updateWidgetResourcesProvider
根本无法执行。如何制作资源生成任务,以便在调用:app:build
和:myLibrary:build
时都能执行。另外,为什么myLibrary
的资源合并是:app:build
任务的一部分,却没有被调用?
如果我能读懂android gradle任务树,以及当我自己构建AAR或将其作为APK / Bundle的一部分构建库时,为什么会有所不同,我也将不胜感激。
答案 0 :(得分:0)
尝试了不同的方法后,我找到了解决方案。
tasks.create<Copy>("updateWidgetResources") {
val widgetResLocation = "$buildDir/generated/widgetResources"
from("../../widget/")
include("*.png")
into("$widgetResLocation/raw")
rename { "asset_$it".replace("@", "_").toLowerCase() }
val task = this
android.libraryVariants.all {
registerGeneratedResFolders(files(widgetResLocation) {
builtBy(task)
})
}
}