写给 Android 开发者的 Gradle 系列(二)撰写 task

本文详细介绍了Android开发中Gradle任务(task)的创建和使用,包括任务内容格式、依赖关系和实战示例。通过自定义Task类和doFirst、doLast闭包,阐述了任务的执行顺序。还探讨了如何利用任务依赖关系,如`dependsOn`,以及如何通过`install`任务安装和启动APK。此外,文章提供了查看任务依赖的示例,帮助开发者更好地理解和运用Gradle任务。
摘要由CSDN通过智能技术生成

task (name: actionTest, action: new Action() {
@Override
void execute(Task task) {
println ‘hello’
}
}) {
}

等同于

task (name: actionTest) {
doFirst {
println ‘hello’
}
}

  • override:默认为 false。是否替换已存在的 task。

  • group:默认为 null。task 的分组类型。

  • description:默认为 null。task 描述。

  • constructorArgs:默认为 null。传给 task 构造函数的参数。

后面四种大部分开发过程中应该不怎么会用到,有需要的读者自行查阅文档。

task 内容格式

  1. 根据官方文档以及前一篇文章中可以知道,如果想给 task 添加操作,可以添加在 doLast {}/doFirst {} 等闭包中,例如:

task myTask {
doFirst {
println ‘myTask 最先执行的内容’
}
doLast {
println ‘myTask 最后执行的内容’
}
// warning
// println ‘Configuration 阶段和 Execution 阶段皆会执行’
}

切记大部分的内容是写在 doLast{}doFirst{} 闭包中,因为写在如果写在 task 闭包中的话,会在 Configuration 阶段也被执行。

  1. 根据官方文档可知,为了提高 task 复用性,Gradle 还支持 Task 类的书写——

2.1 将下述代码写在 build.gradle 中,并用 @TaskAction 标记想要执行的方法。

class GreetingTask extends DefaultTask {
String greeting = ‘hello from GreetingTask’

@TaskAction
def greet() {
println greeting
}
}

2.2 在 build.gradle 中撰写 task 调用 GreetingTask 类:

// Use the default greeting
task (name: hello , type: GreetingTask)

// Customize the greeting
task (name: greeting , type: GreetingTask) {
greeting = ‘greetings from GreetingTask’
}

2.3 调用该 task——

./gradlew hello

Task :app:hello
hello from GreetingTask

./gradlew greeting

Task :app:greeting
greetings from GreetingTask

所以看到这里应该不仅能够理解 Task 类的书写,并且应该能够大致明白 type 这个参数的含义了。

不知道会不会和笔者一样事儿逼的读者此时会疑惑 @TaskAction 修饰的方法和 doLast {} 以及 doFirst {} 闭包的执行顺序是怎样的?

task (name: hello, type: GreetingTask) {
doFirst {
def list = getActions()
for (int i = 0; i < list.size(); i++) {
println list.get(i).displayName
}
}

doLast {

}
}

首先声明 doFirst {}doLast {} 闭包;然后戳进 DefaultTask 源码并追踪到顶级父类 AbstractTask 中可以看到内部通过使用

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值