gradle插件编写

来源:互联网 发布:蚁群算法 编辑:程序博客网 时间:2024/06/06 20:29

插件类别

二进制插件

可以以二进制形式发布和使用,如apply plugin:’com.android.library’

脚本插件

以.gradle脚本形式引用,模块化脚本,如apply from :”script path” 可参考ReactNative 打包脚本;可以直接在脚本中使用groovy编写插件

插件编写

1.在脚本中直接编写

在gradle脚本中可以直接使用groovy编写插件
定义插件类实现Plugin接口

2.在当前项目下编写

在当前项目下的buildsrc目录下编写插件

3.独立项目

创建独立的project或当前目录下创建module

目录结构

这里写图片描述

其中resources目录下properties文件的文件名与使用插件时的插件名要保持一致
implementation-class=com.xxxx.xxxx.PatchPlugin
在该文件中指定了定义插件的groovy类路径

插件依赖

这里写图片描述

基本需求:添加gradleapi依赖和groovy依赖
使用Transform API需要添加Transform Api依赖
在gradle中使用了guava,如果插件中使用guava,需要注意guava版本不要与当前版本gradle使用的guava冲突

发布

可以使用maven 插件发布编写完成的gradle插件,上图是把插件发布到当前目录下,也可配置成发布到某一maven仓库

Extension

Extension用于在脚本中配置插件所需要的一些属性信息。
创建Extension实体类
这里写图片描述
在plugin中创建Extension对象,注意脚本中的配置字段与这里的字符串常量一致
这里写图片描述
在代码中使用,直接以project对象属性的方式引用
这里写图片描述
在脚本中配置
这里写图片描述

Task相关

Task是gradle构建中的基本独立单元,代表了构建中的一个独立步骤如代码编译,doc文档生成,生成jar包
gradle本身提供了一些基础的Task如Copy、Delete、File等
在脚本中可以直接使用task taskName(){}声明一个Task,可以使用type:继承自内建的Task,如:

task clean(type: Delete) {    delete project.buildDir}

可以使用dependsOn指明Task的依赖关系,使用<<、doFirst、doLast向Task中追加操作
在groovy文件中可以使用project.task(“taskname”){}创建task,详见gradleApi文档。

More

Configuration相关

参考文献

Gradle Api 文档
gradle自定义插件
ReactNative