如何从 buildSrc 中的自定义 Gradle 插件访问 Android 的 "dynamicFeatures" 属性
How to access Android's "dynamicFeatures" property from a custom Gradle plugin in buildSrc
在我的项目中,我想生成一个 class,其中包含有关我的动态特征的信息。动态特征是这样添加的:
// 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
}
在我的项目中,我想生成一个 class,其中包含有关我的动态特征的信息。动态特征是这样添加的:
// 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
}