使用 gradle 在 AAR 中生成资源作为应用程序的一部分
Generating resources in AAR using gradle as part of the application
我得到了包含一些资源生成的库。我有生成资源的任务:
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 或作为 [=30 的一部分构建库时它会有所不同=].
在尝试了不同的方法后,我找到了解决办法。
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)
})
}
}
我得到了包含一些资源生成的库。我有生成资源的任务:
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 或作为 [=30 的一部分构建库时它会有所不同=].
在尝试了不同的方法后,我找到了解决办法。
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)
})
}
}