Генерация ресурсов в AAR с использованием gradle как части приложения - PullRequest
0 голосов
/ 03 мая 2019

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

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.

1 Ответ

0 голосов
/ 03 мая 2019

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

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

...