Android之Gradle<第四篇>:Gradle任務(wù)

所謂任務(wù)就是Task伤极,這篇主要是了解Task的一些知識(shí)蛹找。

[多種方式創(chuàng)建任務(wù)]

方式一:

def Task test = task('taskA')

test.doLast {
    println 'taskA'
}

taskA是Task名稱,test是一個(gè)對(duì)象哨坪,執(zhí)行taskA的命令如下:

gradlew taskA

輸出結(jié)果如下:

圖片.png

方式二:

創(chuàng)建方式和方式一差不多庸疾, 唯一的區(qū)別就是多了幾個(gè)參數(shù)。

  • 將taskB分到mytask組中齿税,代碼如下:
def Task testB = task('taskB', group: 'mytask')

testB.doLast {
    println 'taskB'
}

如圖所示:

圖片.png
  • 將taskC分到mytask組下彼硫,并且添加描述,代碼如下:
def Task testC = task('taskC', group: 'mytask', description: '我是taskC的描述!E±骸词渤!')

testC.doLast {
    println 'taskC'
}

如圖所示:

圖片.png
  • 將taskD分到mytask組下,添加描述串绩,并依賴于taskC缺虐,代碼如下:
def Task testD = task('taskD', group: 'mytask', description: '我是taskC的描述!=阜病高氮!', dependsOn: taskC)

testD.doLast {
    println 'taskD'
}

依賴關(guān)系前面幾篇文章已經(jīng)介紹過(guò)了,就是執(zhí)行taskD時(shí)總會(huì)先執(zhí)行taskC顷牌,taskC執(zhí)行完之后才會(huì)執(zhí)行taskD剪芍。

方式三:

task taskE {
    description '我是taskE的描述!?呃丁罪裹!'
    group 'mytask'
    doLast {
        println 'taskE'
    }
}

如圖所示:


圖片.png

方式四:

tasks.create('taskF') {
    description '我是taskF的描述!T舜臁状共!'
    group 'mytask'
    doLast {
        println 'taskF'
    }
}

如圖所示:

圖片.png

[多種方式訪問(wèn)任務(wù)]

方式一:

task taskA {
    group 'mytask'
}

taskA.doLast {
    println 'taskA'
}

這種方式只能訪問(wèn)當(dāng)前Project中的task。

方式二:

task taskB {
    group 'mytask'
}

tasks['taskB'].doLast {
    println 'taskB'
}

類似數(shù)組的訪問(wèn)形式谁帕,角標(biāo)是Task的名稱峡继,如果Task不存在,則發(fā)生異常匈挖。
這種訪問(wèn)方式也只能訪問(wèn)當(dāng)前Project中的task碾牌,不能訪問(wèn)其它Project中的task。

方式三:

子Project獲取主Project的task

rootProject.getTasks()['taskA']

方式四:

tasks.getByPath(':app1:taskAA').doLast {
    println '11111111111111'
}

tasks.findByPath(':app1:taskAA').doLast {
    println '22222222222222'
}

通過(guò)路徑訪問(wèn)子Project的task或同級(jí)Project的task儡循。

方式五:

tasks.findByName('taskA').doLast {
    println '11111111111111'
}

tasks.getByName('taskA').doLast {
    println '11111111111111'
}

通過(guò)task名稱訪問(wèn)同級(jí)task小染。

[<<操作符]

<<操作符在Gradle的Task上是doLast方法的短標(biāo)記形式,也就是說(shuō)“<<”可以代替doLast贮折。

task(taskA) << {
    println '11111111111111'
}

task(taskA).doLast {
    println '11111111111111'
}

以上兩段代碼效果其實(shí)是一樣的,但是资盅,在高版本Gradle中调榄,棄用了<<操作符。

[任務(wù)執(zhí)行順序]

task taskB {

    doLast {
        println 'test1'
    }

    doFirst {
        println 'test2'
    }
}

首先來(lái)看一下以上代碼呵扛,doFirstdoLast可以控制任務(wù)(task)中代碼的執(zhí)行順序每庆,doFirst總是最先被執(zhí)行,doLast總是最后被執(zhí)行今穿,所以打印結(jié)果是:

> Task :taskB
test2
test1

其實(shí)缤灵,任務(wù)(task)和任務(wù)(task)之間也是有執(zhí)行的先后順序的。

假設(shè)有兩個(gè)任務(wù):taskA和taskB

執(zhí)行以下命令(Window系統(tǒng)使用gradlew,Linux系統(tǒng)使用./gradlew)

gradlew taskB taskA

看到上面的命令腮出,一般理解為:先執(zhí)行taskB帖鸦,再執(zhí)行taskA,但是胚嘲,在Android工程中也許定義了N多個(gè)task作儿,到底先執(zhí)行哪個(gè)task并不清楚,那么問(wèn)題來(lái)了馋劈,怎么才能保證總是先執(zhí)行taskA攻锰,在執(zhí)行taskB?

shouldRunAftermustRunAfter可以做到妓雾,具體使用方法如下:

taskB.shouldRunAfter(taskA)
taskB.mustRunAfter(taskA)

shouldRunAfter:taskB應(yīng)該在taskA執(zhí)行之后執(zhí)行娶吞,這里應(yīng)該而不是必須,所以有可能任務(wù)順序并不會(huì)按預(yù)設(shè)的順序執(zhí)行械姻。
mustRunAfter:taskB必須在taskA執(zhí)行之后執(zhí)行妒蛇,這個(gè)規(guī)則就比較嚴(yán)格。

[任務(wù)的啟用和禁用]

每個(gè)task都有enabled屬性策添,設(shè)置為false表示禁用材部。默認(rèn)是true。代碼表示方式有如下三種:

taskB.enabled = false
taskB.enabled false
taskB.enabled(false)

當(dāng)taskB禁用后唯竹,當(dāng)編譯工程時(shí)直接跳過(guò)taskB乐导,不執(zhí)行taskB。

[任務(wù)的onlyif斷言]

斷言就是一個(gè)條件表達(dá)式浸颓。Task有一個(gè)onlyIf方法物臂,它接受一個(gè)閉包作為參數(shù),如果該閉包返回true則執(zhí)行該任務(wù)产上,否則不執(zhí)行棵磷。

taskB.onlyIf {
    def bb = false
    //..經(jīng)過(guò)一些判斷
    bb//返回值
}

看一下上面一段代碼,比較簡(jiǎn)單晋涣,返回值bb=false仪媒,那么taskB會(huì)被跳過(guò),不會(huì)被執(zhí)行谢鹊。當(dāng)然算吩,可以根據(jù)實(shí)際需求,在某些情況下將返回值設(shè)置為true佃扼,這樣taskB就會(huì)被執(zhí)行偎巢。

[任務(wù)規(guī)則]

假設(shè)taskA不存在,那么執(zhí)行taskA時(shí)會(huì)報(bào)錯(cuò)兼耀,報(bào)錯(cuò)信息如下:

圖片.png

我們現(xiàn)在不必關(guān)系具體報(bào)什么錯(cuò)压昼,只知道求冷,這些報(bào)錯(cuò)信息是默認(rèn)的一種規(guī)則,那么窍霞,我們也可以自定義這種規(guī)則匠题,即:根據(jù)任務(wù)名稱指定規(guī)則,代碼如下:

tasks.addRule("規(guī)則一"){
    String taskName -> task(taskName).doLast {
        println "該${taskName}任務(wù)不存在"
    }
}

當(dāng)再次執(zhí)行taskA時(shí)官撼,則新的報(bào)錯(cuò)信息如下:

圖片.png

[本章完...]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梧躺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子傲绣,更是在濱河造成了極大的恐慌掠哥,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秃诵,死亡現(xiàn)場(chǎng)離奇詭異续搀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)菠净,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)禁舷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人毅往,你說(shuō)我怎么就攤上這事牵咙。” “怎么了攀唯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵洁桌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我侯嘀,道長(zhǎng)另凌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任戒幔,我火速辦了婚禮吠谢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诗茎。我一直安慰自己工坊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布敢订。 她就那樣靜靜地躺著栅组,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枢析。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天刃麸,我揣著相機(jī)與錄音醒叁,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛把沼,可吹牛的內(nèi)容都是我干的啊易。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饮睬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼租谈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起捆愁,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤割去,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后昼丑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呻逆,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年菩帝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咖城。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呼奢,死狀恐怖宜雀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情握础,我是刑警寧澤辐董,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站弓候,受9級(jí)特大地震影響郎哭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菇存,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一夸研、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧依鸥,春花似錦亥至、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至衣吠,卻和暖如春茶敏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缚俏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工惊搏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贮乳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓恬惯,卻偏偏與公主長(zhǎng)得像向拆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酪耳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356