Android Plugin DSL Reference 参考文档 :
在上一篇博客 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 ) 中 , 实现了 自定义插件 的 扩展 Extension , 在 Module 模块下的 build.gradle 构建脚本中 , android 配置块 就是一个 AppExtension 扩展 , 但是在 android 扩展下又定义了 defaultConfig 扩展 , 这是一个 ProductFlavor 配置 ;
android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "kim.hsl.android_ui"
minSdkVersion 18
targetSdkVersion 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
下面在 自定义 Plugin 插件 的 Extension 扩展 中 , 再 定义一层 Extension 扩展 ;
定义扩展类 :
class MyPluginExtensions {
def name
def age
}
定义扩展的扩展类 :
class MyPluginExtensionsExtensions {
def name
def age
}
声明扩展 和 扩展的扩展 :
import org.gradle.api.Plugin
import org.gradle.api.Project
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println 'MyPlugin'
// 创建一个扩展
// 类似于 Android Gradle 插件中的 android
// 引入了 MyPlugin 插件后
// 就可以使用 myplugin 配置块
def myplugin = project.extensions.create("myplugin", MyPluginExtensions)
// 为 MyPlugin 自定义插件的 myplugin 扩展定义 扩展 mypluginextension
myplugin.extensions.create("mypluginextension", MyPluginExtensionsExtensions)
// 获取 自定义 Gradle 插件的扩展属性 , 必须在 Gradle 分析完成之后才能进行 , 否则获取不到
project.afterEvaluate {
println project.myplugin.name
println project.myplugin.age
println project.myplugin.mypluginextension.name
println project.myplugin.mypluginextension.age
}
}
}
在 build.gradle 构建脚本中 , 进行扩展属性配置 : 先引入插件 , 再配置扩展属性 ;
apply plugin: MyPlugin
myplugin {
name 'Tom'
age 18
mypluginextension {
name 'Jerry'
age 19
}
}
执行编译时 , 会打印出上述扩展属性 :