本系列代码地址 githubgit
相关资料 gradle in action中英文对照版github
回到目录闭包
上一篇咱们建立了四个任务,分别是 publishTestRelease,publishPreRelease,publishCloseBetaRelease,publishReleaseRelease 。咱们今天就介绍下gradle中任务的概念。post
打开gradle的任务面板,咱们会发现有茫茫多的任务。每个任务都执行一个特定的功能。例如"compileReleaseKotlin"这个任务,经过名字咱们能够知道这个任务应该执行了Kotlin的编译工做。这些任务按照指定的流程串联或者并联在一块儿,构成了整个打包流程。整个流程的全部任务都执行完了,编译任务就结束了,咱们能够在指定的位置找到咱们最终想要的apk文件。gradle
任务定义了整个打包过程工做的一个最小工做单元。这能够简单到只打印文本如“Hello world!”,或复杂到编译Java源代码。不少时候,运行一个task以前须要运行另外一个task,尤为是当task的运行须要另外一个task的输出做为输入来完成本身的行动的时候更是如此。好比,在打包成一个JAR文件以前须要先编译Java源代码。ui
接下来咱们将建立一个简单的任务,老规矩,只打印一行“Hello world!”,在build.gradle文件中添加以下代码(为了方便找到这个任务,咱们给这个任务指定group):this
task printHelloWorld(){
group "test"
description "this task just print hello world!"
doFirst{
println "Hello world!"
}
}
复制代码
接下来咱们能够在Android Studio的任务面板中找到这个任务:spa
双击执行这个任务,能够发现以下结果:code
咱们像定义方法(但这其实不是方法定义,这个咱们后面在讲)同样来定义一个任务。那为何咱们会把“println "Hello world!"”这行代码放在那个位置呢,这就得说下task下action的概念。 action(动做)就是在task中合适的地方方式构建逻辑。Task接口提供了两个相关的方法来声明来声明task动做:doFirst(Closure)和doLast(Closure)。当task被执行的时候,动做逻辑被定义为闭包参数依次执行。
若是你有时间的话,能够在上面咱们定义的task经过doLast添加一个新的action,而后执行下这任务,看看会发生什么。cdn
group和description。他们都是task文档的一部分。 description属性用于描述任务的做用,而group属性则用于定义task的逻辑分组。
咱们上面定义这两个属性的方式是经过setter方法来设置的。但咱们也能够在建立task的时候经过参数的方式来来指定,以下:
task printHelloWorld(
group:'test',
description: "this task just print hello world!"
){
doFirst{
println "Hello world!"
}
}
复制代码
这两种方式均可以,没有本质区别,具体选用哪一种方式,看你习惯了。
尽管设置task的group和description是可选的,但强烈建议为全部的task指定这两个属性。这会帮助最终用户比较容易地识别task功能。
[gradle in action 中英文版本](www.lanzous.com/iajr62j )