自己动手开发一个Android持续集成工具-2

538 阅读3分钟

本系列代码地址 github

相关资料 gradle in action中英文对照版

回到目录

上一篇我们创建了四个任务,分别是 publishTestRelease,publishPreRelease,publishCloseBetaRelease,publishReleaseRelease 。我们今天就介绍下gradle中任务的概念。

打开gradle的任务面板,我们会发现有茫茫多的任务。每一个任务都执行一个特定的功能。例如"compileReleaseKotlin"这个任务,通过名字我们可以知道这个任务应该执行了Kotlin的编译工作。这些任务按照指定的流程串联或者并联在一起,构成了整个打包流程。整个流程的所有任务都执行完了,编译任务就结束了,我们可以在指定的位置找到我们最终想要的apk文件。

  1. 任务介绍
  2. 任务的创建
  3. 任务的Action
  4. 任务的“group”属性和“description”属性
  5. 任务的依赖

任务定义了整个打包过程工作的一个最小工作单元。这可以简单到只打印文本如“Hello world!”,或复杂到编译Java源代码。很多时候,运行一个task之前需要运行另一个task,尤其是当task的运行需要另一个task的输出作为输入来完成自己的行动的时候更是如此。比如,在打包成一个JAR文件之前需要先编译Java源代码。

接下来我们将创建一个简单的任务,老规矩,只打印一行“Hello world!”,在build.gradle文件中添加如下代码(为了方便找到这个任务,我们给这个任务指定group):


task printHelloWorld(){
    group "test"
    description "this task just print hello world!"
    doFirst{
        println "Hello world!"
    }   
}

接下来我们可以在Android Studio的任务面板中找到这个任务:

双击执行这个任务,可以发现如下结果:

这样,我们就创建并执行了这个任务,成功打印出了“Hello world!”.

我们像定义方法(但这其实不是方法定义,这个我们后面在讲)一样来定义一个任务。那为什么我们会把“println "Hello world!"”这行代码放在那个位置呢,这就得说下task下action的概念。 action(动作)就是在task中合适的地方方式构建逻辑。Task接口提供了两个相关的方法来声明来声明task动作:doFirst(Closure)和doLast(Closure)。当task被执行的时候,动作逻辑被定义为闭包参数依次执行。
如果你有时间的话,可以在上面我们定义的task通过doLast添加一个新的action,然后执行下这任务,看看会发生什么。

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