Gradle插件开发(2) - extensions和Task
extensions
Gradle是支持配置,外部的配置文件来设置插件的一些输入条件,在插件中是通过extensions
实现的。
配置
如我们在项目的build.gradle
下配置如下:
1 |
|
这代表一条这条消息,message
代表消息内容,greeter
代表消息源。
那么插件如何获取这条消息呢?
我们需要在Plugin
来注册一个实体类来获取。
1 | void apply(Project project) { |
实体
其中Message是个实体类:
1 | public class Message { |
使用
我们可以自己写一个task
(下一节就是会介绍task)来验证extensions
获取是否成功。
1 | def extension = project.extensions.create("cyMessage", Message) |
可以注意到
1.extensions.create("cyMessage", Message)
返回的是Message
的实例
2.通过extensions.createproject注册了一个
cyMessage`的属性。
所以获取代码片段中的message
也有两种方式”${extension.message}
和project.cyMessage.message
。
Task
Task是我们插件的任务单位,也就是说插件实际上就是一个个task,还记得我们常用的clean命令,实际上clean也是task,在android项目中,我们可以用gradlew tasks
来查看这个项目中的task。
每个task实际上是可以分组的,如上图的
Android tasks
Build tasks
,每个任务后面的小字实际上是task的描述,
task的创建
task目前可以有多种方法创建和操作。
gradle脚本
1 |
|
doLast
相当于是在任务执行Task
结束前要执行的,是这个Task
的最后一个步骤。<<
和leftShift
是同一个意思也表示在相当于是在任务执行Task结束前要执行的,
groovy脚本创建
用gradle
脚本能容易写出脚本,但是对于一些复杂的Task
还是需要我们用groovy
来实现,可以控制控制他的灵活度。
我们可以来写我们的第一个Task
.
1 | public class FirstTask extends DefaultTask { |
@TaskAction
有注释,我就不再重复了,$message
是我们内部定义的一个变量,默认是message
我们用这个task
时只需要,写入我们的type为FirstTask
.
1 | // hello使用了默认的message值 |
task 属性
dependsOn可以关联依赖关系, group更像是我们的java代码的报名,是task的一种表示,多个task可以熟悉同一个group, description是我们在编写task的介绍,你可以认为是task的一种注释
.
1 | // 定义一个名字为rygTask的task,属于renyugang分组,并且依赖myTask1和myTask2两个task。 |
这样hello
Task就在task1
和task2
执行完后,继续执行。
使用
可以直接在终端下输入
1 | ./gradlew :app:task2 |
app就是引入我们的task的项目,当然你可以可以用android studio
的GUI界面.
task
和extensions
自定义插件
使用extensions
传参,使用 task
来实现功能,我们可以来尝试下,写自己的插件了,有了task
和extensions
这个两个概念以及自己的学习能力,写个简单的插件应该问题不大吧。
我也改造了Gradle插件开发(1) - Hello world的插件,下载地址:ownwell/Gradle-plugin
1 | git clone -b v1.0 https://github.com/ownwell/Gradle-plugin.git |
参考
- 本文链接:http://ownwell.github.io/2018/08/20/android-gradle-2/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!