android - 如何从buildSrc中的自定义Gradle插件访问Android的 “dynamicFeatures”属性

标签 android gradle android-gradle-plugin dynamic-feature-module

在我的项目中,我想生成一个包含有关动态功能信息的类。通过以下方式添加动态功能:

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

不幸的是,即使我的插件应用于具有动态功能的build.gradle文件,extension.dynamicFeatures也为空。

最佳答案

它是空的,因为您正在尝试在gradle生命周期配置阶段获取扩展值,因此尚未配置所有gradle属性。

使用afterEvaluate闭包。在此块中,dynamicFeatures已经配置并且不为空。

project.afterEvaluate {
    val extension = project.extensions.getByType(BaseAppModuleExtension::class.java)
        ?: throw Exception("Android extension cannot be null")
    extension.dynamicFeatures
}

关于android - 如何从buildSrc中的自定义Gradle插件访问Android的 “dynamicFeatures”属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387764/

相关文章:

php - Mysql数据加密

java - 在谷歌地图上用手指自由绘图

groovy - 了解 Gradle 动态任务

java - 从eclipse启动tomcat时出现LinkageError

android - Android 应用程序 Azure 依赖项 gradle 构建时出错

android - 未弃用的 GCM 示例?

android - 在 Android 应用程序中设置 zxing 2.0 条码扫描器

java - 无法使用 Gradle 和 Android Studio 运行 Robolectric 测试 - 找不到 StyleData

groovy - 请解释一下Android build.gradle groovy语法

gradle - 如何在 Kotlin 中访问 variant.outputFileName