Генерация ресурсов в AAR с использованием gradle как части приложения

У меня есть библиотека, которая включает в себя создание некоторых ресурсов. У меня есть задача по генерации ресурсов:

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.


person Shchvova    schedule 03.05.2019    source источник


Ответы (1)


Попробовав разные вещи, я нашел решение.

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

person Shchvova    schedule 03.05.2019