Android Plugin DSL Reference 参考文档 :
在 Android Studio 工程的根目录的 buildSrc 模块下的 src/main/groovy 代码 , 自动引入了 Groovy , Gradle , Java 依赖库 , 可以直接调用上述 API ;
这里注意 , 在该 buildSrc 模块下可以依赖 Gradle 相关的 API , 如 Project 调用等 , 但是不能调用 Android Gradle 插件相关的 API ;
如果我们想要依赖其它的 函数库 , 可以在 buildSrc 模块下 , 自己创建 build.gradle 构建脚本 ;
如果想要在 buildSrc 模块中的代码中 , 使用 Android Gradle 插件的内容 , 需要引入 Android Gradle 插件 ;
代码如下 :
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
implementation 'com.android.tools.build:gradle:4.2.1'
}
添加了 上述依赖 之后 , 可以在 buildSrc 模块中调用 Android Gradle 模块中的 API ;
// 获取 自定义 Gradle 插件的扩展属性 , 必须在 Gradle 分析完成之后才能进行 , 否则获取不到
project.afterEvaluate {
// 获取 Android Gradle 的一系列配置
project.android.applicationVariants.all {
BaseVariant variant ->
println "project.android.applicationVariants : " + variant.description
}
}
上述代码的作用是 , 获取 Project 下的 android 配置块的 applicationVariants 配置内容 ;
执行结果如下 :
project.android.applicationVariants : Debug build
project.android.applicationVariants : Release build
其它代码可参考 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑤ ( 自定义插件中获定义方法 | 在插件中创建 Gradle 任务 | 代码示例 ) 博客 ;
GitHub 地址 : https://github.com/han1202012/Android_UI
自定义 Gradle 插件完整代码 :
import com.android.build.gradle.api.BaseVariant
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
// 创建自定义任务 , 并且设置该任务依赖于其它任务
MyTask myTask = project.tasks.create('HelloMyTask', MyTask)
// 设置自定义任务依赖于 preBuild 任务
// 执行 HelloMyTask 自定义任务之前 , 需要先执行 preBuild 任务
myTask.dependsOn project.tasks.getByName('preBuild')
// 设置 preDebugBuild 任务 依赖于 HelloMyTask 自定义任务
// 执行 preDebugBuild 任务之前 , 必须先执行 HelloMyTask 任务
project.tasks.getByName('preDebugBuild').dependsOn myTask
// 按照上述配置 , HelloMyTask 任务的执行 需要在 preBuild 与 preDebugBuild 任务之间
// 获取 Android Gradle 的一系列配置
project.android.applicationVariants.all {
BaseVariant variant ->
println "project.android.applicationVariants : " + variant.description
}
}
}
}