Как получить доступ к свойству Android «dynamicFeatures» из пользовательского плагина Gradle в buildSrc - PullRequest
0 голосов
/ 23 апреля 2020

В моем проекте я хотел бы создать класс, содержащий информацию о моих динамических c функциях. Динамические c функции добавляются следующим образом:

// In the base module’s build.gradle file.
android {
    ...
    // Specifies dynamic feature modules that have a dependency on
    // this base module.
    dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}

Источник: https://developer.android.com/guide/app-bundle/at-install-delivery#base_feature_relationship

Я искал решения с тех пор несколько дней, и я не нашел много. В настоящее время мой плагин выглядит следующим образом:

class MyPlugin : Plugin<Project> {

    override fun apply(project: Project) {
        if (project == rootProject) {
            throw Exception("This plugin cannot be applied to root project")
        }

        val parent = project.parent ?: throw Exception("Parent of project cannot be null")

        val extension = project.extensions.getByName("android") as BaseAppModuleExtension?
            ?: throw Exception("Android extension cannot be null")

        extension.dynamicFeatures
    }
}

К сожалению, extension.dynamicFeatures пуст, даже если мой плагин применяется к файлу build.gradle, имеющему функции dynamici c.

1 Ответ

0 голосов
/ 24 апреля 2020

Это пусто, поскольку вы пытаетесь получить значение расширения на этапе настройки жизненного цикла gradle, все свойства gradle еще не настроены.

Используйте afterEvaluate closure. В этом блоке dynamicFeatures уже настроен и не пустой.

project.afterEvaluate {
    val extension = project.extensions.getByType(BaseAppModuleExtension::class.java)
        ?: throw Exception("Android extension cannot be null")
    extension.dynamicFeatures
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...