Android Plugin DSL Reference 参考文档 :
Gradle 任务通常都有 输入 和 输出 内容 ;
如 : other 分组下的 compileDebugJavaWithJavac 任务 , 该任务的主要作用是 使用 javac 编译器工具 将 Java 源代码文件 编译成 Class 字节码文件 ;
则上述任务的 输入 为 Java 源代码文件 , 输出 为 Class 字节码文件 ;
可以使用 @Input 和 @Output 注解的形式 , 设置 Gradle 任务的 输入 和 输出 ;
/**
* 自定义任务类
*/
class MyTask extends DefaultTask {
@Input
String input
@OutputFile
String output
MyTask() {
// 设置该任务属于 MyTaskGroup 分组
group 'MyTaskGroup'
description 'MyTask Description'
}
/**
* 使用 @TaskAction 注解指定任务需要执行的方法
*/
@TaskAction
void run() {
println 'MyTask'
}
}
设置了注解后 , 可以在创建 Task 任务时的配置阶段 , 为 输入 和 输出 设置对应的值 ;
/*
生成自定义 Gradle 任务
*/
task myTask(type: MyTask){
//input = 'hello'
output = 'out.txt'
}
Gradle 任务的 输入 和 输出 值 , 一般不能为空 , 否则直接报错 ;
如果将 输入 和 输出 属性使用 @Optional 修饰 , 则对应的 输入 或 输出 属性 可以为空 ;
添加了 @Optional 注解后 , 输入 即使为空 , 也不会报错 ;
Gradle 任务的 输入 和 输出 是任务是否执行的标志 , 可以避免 Gradle 任务被重复执行 ;
如果 Gradle 任务执行完毕后 , 有了一个 输入 和 输出 值 ;
再次执行该 Gradle 任务 , 如果 输入 和 输出 值 没有变化 , 则该任务就会被提示 UP-TO-DATE , 不再执行该任务 ;
代码示例 :
/**
* 自定义任务类
*/
class MyTask extends DefaultTask {
@Input
@Optional
String input
@OutputFile
String output
MyTask() {
// 设置该任务属于 MyTaskGroup 分组
group 'MyTaskGroup'
description 'MyTask Description'
}
/**
* 使用 @TaskAction 注解指定任务需要执行的方法
*/
@TaskAction
void run() {
println 'MyTask'
}
}
/*
生成自定义 Gradle 任务
*/
task myTask(type: MyTask){
input = 'hello'
output = 'out.txt'
}
第一次执行 : 正常执行 Gradle 任务 , 执行了 MyTask 任务类中的 run 方法 , 打印了 ‘MyTask’ 字符串 ;
第二次执行 : 提示
> Task :app:myTask UP-TO-DATE
内容 , 说明输入和输出与上一次执行相同 , 本次不再重复执行 ;