【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )

Android Plugin DSL Reference 参考文档 :





一、在 buildSrc 模块中依赖 Android Gradle 插件



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

        }
    }
}

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/127260702