gradle中的task

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle中的task相关的知识,希望对你有一定的参考价值。

在看文章之前,希望知其所以然的同学肯定希望能看到gradle相关的api,那么先行奉上gradle api的链接:

https://docs.gradle.org/current/javadoc/allclasses-noframe.html

由于gralde使用的是groovy语言,所以语法看上去比较奇怪,好像描述性语言一样,不过,这对于创建一个工程来说已经足够了。

同其他的语言一样,groovy语言也有很多关键字,也有类型,task也是groovy语言中的一个类,配合内部的一些属性方法和固有的关键字,我们可以写出形形色色的task,来帮助我们做一些自动化的操作。

创建一个最简单的task应该是这样的:

task print{
   print hello world
}

task还提供了设置多个task之间的相互依赖关系,就可以用dependson关键字,如果任务不是你定义的,而是系统定义的,你想指定运行的先后顺序,也可以用mustRunAfter指定

task a(dependson:taskb){//可以写在括号内
    println "i am a"
}

task a(dependson:[taskb,taskc]){//也可以以数组的形式依赖多个数组
    println "i am a"
}
task a{//也可以分开写
    println "i am a"
    dependson taskb
    dependson taskc
}
build.mustRunAfter clean//android studio为我们定义好的task build 和clean  我们可以拿来直接使用

更进一步,配合上最常用的doFirst,doLast和dependson我们可以写出以下四个task

task task2{
println "task2"
}

task task3{
println "task3"
}

task task4{
println "task4"
}

task task1(dependsOn:[task2,task3,task4]){
println "task1"
doFirst{
println "task1 first"
}
doLast{
println "task1 last"
}
}
//输出结果
task2
task3
task4
task1
task1 first
task1 last

 可以看到,优先顺序为depensOn>自己>doFirst>doLast

 不只是顺序,使用标准的task api,我们可以创建形形色色的任务,完成我们的需求

task showTasks{
   println tasks.class
   println tasks.size()
}
//output
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
15//可以看到,tasks.size()是build下的任务总数,但其实,目录中所有的任务都是project的任务,详情见附图
例如 你想在project build之前做一些拷贝so的操作:
project.preBuild.doFirst{
delete "../sdk/src/main/jniLibs/arm64-v8a"
copy{
from "../models/armeabi-v7a"
include "**.so"
into "../sdk/src/main/jniLibs/armeabi-v7a"
rename {
String fileName ->
"libss.so"
}
}
}//执行gradle preBuild时候,就会执行拷贝文件的操作

task hello {
doFirst{
println description//输出this is hello
}
}

hello.configure {//定义hello的属性
description = "this is hello"
}
但如果修改hello的定义为如下:
task hello {
println description //输出null,可以看到description的定义要在默认体和doFirst之间
}

技术分享

 常用的基本是这么多,如果有进一步需求,可以参考官方api






















































以上是关于gradle中的task的主要内容,如果未能解决你的问题,请参考以下文章

Gradle核心之Task

深入理解gradle中的task

17. Gradle编译其他应用代码流程(五) - 设置Task过程

gradle中的task

Android Gradle 插件自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )

Android Gradle 插件自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )