本身動手開發一個Android持續集成工具-2

本系列代碼地址 githubgit

相關資料 gradle in action中英文對照版github

回到目錄閉包

上一篇咱們建立了四個任務,分別是 publishTestRelease,publishPreRelease,publishCloseBetaRelease,publishReleaseRelease 。咱們今天就介紹下gradle中任務的概念。post

打開gradle的任務面板,咱們會發現有茫茫多的任務。每個任務都執行一個特定的功能。例如"compileReleaseKotlin"這個任務,經過名字咱們能夠知道這個任務應該執行了Kotlin的編譯工做。這些任務按照指定的流程串聯或者並聯在一塊兒,構成了整個打包流程。整個流程的全部任務都執行完了,編譯任務就結束了,咱們能夠在指定的位置找到咱們最終想要的apk文件。gradle

  1. 任務介紹
  2. 任務的建立
  3. 任務的Action
  4. 任務的「group」屬性和「description」屬性
  5. 任務的依賴

任務定義了整個打包過程工做的一個最小工做單元。這能夠簡單到只打印文本如「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

這樣,咱們就建立並執行了這個任務,成功打印出了「Hello world!」.

咱們像定義方法(但這其實不是方法定義,這個咱們後面在講)同樣來定義一個任務。那爲何咱們會把「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

相關文章
相關標籤/搜索