Android Gradle 插件自定义 Gradle 任务 ⑫ ( Gradle 任务的输出和输出 | @Optional 注解 | UP-TO-DATE 避免重复执行任务 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Gradle 插件自定义 Gradle 任务 ⑫ ( Gradle 任务的输出和输出 | @Optional 注解 | UP-TO-DATE 避免重复执行任务 )相关的知识,希望对你有一定的参考价值。

文章目录

Android Plugin DSL Reference 参考文档 :





一、Gradle 任务的输出和输出



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'





二、@Optional 注解



Gradle 任务的 输入 和 输出 值 , 一般不能为空 , 否则直接报错 ;

如果将 输入 和 输出 属性使用 @Optional 修饰 , 则对应的 输入 或 输出 属性 可以为空 ;

添加了 @Optional 注解后 , 输入 即使为空 , 也不会报错 ;





二、UP-TO-DATE 避免重复执行任务



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

内容 , 说明输入和输出与上一次执行相同 , 本次不再重复执行 ;

以上是关于Android Gradle 插件自定义 Gradle 任务 ⑫ ( Gradle 任务的输出和输出 | @Optional 注解 | UP-TO-DATE 避免重复执行任务 )的主要内容,如果未能解决你的问题,请参考以下文章

Android之Gradle的理解

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

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

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

Android Gradle 插件自定义 Gradle 插件模块 ② ( 在模块中定义插件 | 引入自定义 Gradle 插件模块 | 配置 Gradle 插件上传选项 | 配置分组名称版本号 )

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