Android Gradle 插件自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Gradle 插件自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )相关的知识,希望对你有一定的参考价值。

文章目录

Android Plugin DSL Reference 参考文档 :





一、Task#shouldRunAfter 函数



Task#shouldRunAfter 函数的作用是为 Gradle 任务设置该任务执行时 , 应该在某个任务之后 ;


Task#shouldRunAfter 函数原型 :

TaskDependency shouldRunAfter​(Object... paths)

Specifies that this task should run after all of the supplied tasks.
指定此任务应在所有提供的任务之后运行。

 task taskY 
     shouldRunAfter "taskX"
 
 
For each supplied task, this action adds a task 'ordering', 
and does not specify a 'dependency' between the tasks. 
As such, it is still possible to execute 'taskY' without first executing the 'taskX' in the example.
对于每个提供的任务,此操作添加一个任务“排序”,
并且不指定任务之间的“依赖关系”。
因此,仍然可以在不首先执行示例中的“taskX”的情况下执行“taskY”。

See here for a description of the types of objects which can be used to specify an ordering relationship.
有关可用于指定排序关系的对象类型的描述,请参阅此处。

Parameters:
paths - The dependencies to add to this task.
        要添加到此任务的依赖项。
Returns:
the task object this method is applied to
应用此方法的任务对象

文档地址 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html#shouldRunAfter-java.lang.Object…-





二、Task#shouldRunAfter 函数 、Task#mustRunAfter 函数、Task#dependsOn 函数 使用场景对比



Task#shouldRunAfter 函数 与 Task#mustRunAfter 函数 设置的任务 , 一般情况下先执行该设置的任务 ,

Task#shouldRunAfter 函数 没有 Task#mustRunAfter 函数 严格 ,

如果是在并行编译执行任务的情况下 , Task#shouldRunAfter 函数设置的任务可能会在目标任务之后执行 ,

但是 Task#mustRunAfter 函数设置的任务必须在目标函数之前执行 ;


Task#shouldRunAfter 函数 , Task#mustRunAfter 函数 , Task#dependsOn 函数 使用场景对比 :

A.dependsOn B : 执行 A 任务时 , 必须先执行 B , 否则 A 任务无法执行 ;

A.mustRunAfter B : 如果需要执行 A 任务 , 则必须在 B 任务之后 ;

  • 假如这两个任务都需要执行 , 则先执行 B 任务 , 再执行 A 任务 ; 如果并行执行 A B 两个任务 , 也必须先 B 后 A ;
  • 假如只需要执行 A 任务 , 则不需要考虑 B 任务 ;
  • 假如只需要执行 B 任务 , 也不需要考虑 A 任务 ;

A.shouldRunAfter B : 如果需要执行 A 任务 , 则应该在 B 任务之后 ; A 任务 与 B 任务 不强制进行要求 ;

  • 假如这两个任务都需要执行 , 则先执行 B 任务 , 再执行 A 任务 ; 如果并行执行 A B 两个任务 , A B 任务执行的先后顺序不做要求 ;
  • 假如只需要执行 A 任务 , 则不需要考虑 B 任务 ;
  • 假如只需要执行 B 任务 , 也不需要考虑 A 任务 ;

以上是关于Android Gradle 插件自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )的主要内容,如果未能解决你的问题,请参考以下文章

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 插件的扩展配置扩展 | 在自定义插件中获取扩展属性 )