使用 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)
        })
    }
}