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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
            

        
    

以上是关于Android Gradle 插件Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 )

Android Gradle 插件Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 )

Android Gradle 插件Gradle 自定义 Plugin 插件 ⑤ ( 自定义插件中获定义方法 | 在插件中创建 Gradle 任务 | 代码示例 )

Android Gradle 插件Gradle 自定义 Plugin 插件 ④ ( 为自定义 Gradle 插件的扩展配置扩展 | 在自定义插件中获取扩展属性 )

Android Gradle 插件自定义 Gradle 插件模块 ⑤ ( 完整总结 ) ★★★

Android Gradle 插件自定义 Gradle 插件模块 ① ( 在 Module 模块中自定义 Gradle 插件 | 创建自定义插件类型模块 | 手动导入相关依赖 )