Gradle基礎(chǔ)知識

Gradle中的依賴方式有以下幾種:

  • implementation
  • api (相當于Gradle3.0之前compile)
  • compileOnly (相當于Gradle3.0之前provided )
  • runtimeOnly(相當于Gradle3.0之前apk)

其中implementation和api在前面可以加上debug瞬浓,release或者test聲明僻爽,例如debugApi

詳細說明:

  • 使用implementation依賴可以減少構(gòu)建時間,例如Module A implementation Module B,Module B implementation Module C敲董,此時A無法引用中的內(nèi)容惠猿。當C發(fā)生改變時颓鲜,A不需要重新編譯孽水。
  • 使用api的依賴,還是上面的例子匣屡,A可以引用C中的內(nèi)容封救。
  • compileOnly的依賴只有編譯時可以用,不會打包到apk(注釋處理器等)
  • runtimeOnly的依賴編譯時不可用捣作,會打包到apk

基本語法

第一手資料 Groovy API誉结,Gradle Doc

下面列出幾個常用的和Java區(qū)別比較大的:

  • with,給對象賦值
obj.with {
   name = "android"
   phone= "145555555"
}
  • 和python相似的判斷true或false
if (str) { }
  • kotlin相似的判空
obj?.setData()
  • 使用each遍歷Map或List
map.each {
   println "map:[${it.key} : ${it.value}]"
}
  • XmlParser解析Xml
def xml = new XmlParser().parse(new File("test.xml"))
// 訪問view節(jié)點的name屬性
println xml['view'].@name[0]
  • 在android studio中直接運行Groovy券躁,使用命令gradlew test
task(test).doLast {
    println "start execute yuangshuo"
    getString()
}

def getString() {
}

更多基礎(chǔ)語法:
Groovy快速入門指南
Gradle腳本基礎(chǔ)全攻略

Gradle生命周期和執(zhí)行順序

Gradle的生命周期分為3個階段:Initialization惩坑、Configuration和Execution

  1. 首先解析settings.gradle來獲取模塊信息(Initialization階段)
  2. configure項目中top-level的build.gradle,然后configure每個module的build.gradle也拜,配置的時候并不會執(zhí)行task旭贬,一個module執(zhí)行configure結(jié)束會執(zhí)行project.afterEvaluate(Configuration階段)
  3. 按configure順序執(zhí)行(Execution階段)
// 打印日志順序
setting##init
top-level##init
app##init
app##afterEvaluate
common##init
app##task

詳細學習:Gradle基礎(chǔ) - 構(gòu)建生命周期和Hook技術(shù)

常用Api

定義Task
  • 第一種方式
task myTask {
    println "config myTask"
}

myTask.doLast {
    println "after execute myTask"
}

myTask.doFirst {
    println "before execute myTask"
}

執(zhí)行一個task時,都會先執(zhí)行task的配置搪泳,doFirst是在task開始執(zhí)行之前,而doLast則是在執(zhí)行后扼脐,兩者都是在task配置之后執(zhí)行的岸军,因為執(zhí)行任意一個task奋刽,都需要先配置一遍。每個task執(zhí)行之前都需要進行一遍完整的配置艰赞。

  • 第二種方式
class MyTask extends DefaultTask {
    @TaskAction
    def hello() {
        println "Hello world."
    }
}
task taskname(type : MyTask)

@TaskAction表示task要執(zhí)行的動作

  • 第三種方式
project.task('myTask').doLast {
    println "after execute myTask"
}
Task依賴
task taskA(dependsOn: 'taskB') {
    doLast {
        println 'taskA'
    }
}

task taskB {
    doLast {
        println 'taskB#1'
    }
}

taskB.doLast {
    println 'taskB#2'
}

執(zhí)行g(shù)radlew taskA佣谐,打印結(jié)果

> Task :app:taskB 
taskB#1
taskB#2

> Task :app:taskA 
taskA

一個Task執(zhí)行前先執(zhí)行其依賴的Task,doFirst和doLast可以被執(zhí)行多次

Gradle命令:

  • gradlew project:列出項目module名稱
  • gradlew build:執(zhí)行build操作
  • gradlew taskname:執(zhí)行某個task
  • gradlew -x taskname:執(zhí)行build操作但排除某個task
  • gradlew tasks:列出項目中所有任務
  • gradlew help –task taskname:顯示某個task的詳細信息

Gradle日志級別

  • Error 錯誤級別
  • Quiet 重要級別
  • Warning 警告級別
  • LifeCycle 進度信息
  • Info 信息性信息
  • Debug 調(diào)試信息

gradlew -q taskname 可以控制日志輸出級別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末方妖,一起剝皮案震驚了整個濱河市狭魂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌党觅,老刑警劉巖雌澄,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杯瞻,居然都是意外死亡镐牺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門魁莉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睬涧,“玉大人,你說我怎么就攤上這事旗唁∑枧ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵检疫,是天一觀的道長讶请。 經(jīng)常有香客問我,道長电谣,這世上最難降的妖魔是什么秽梅? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮剿牺,結(jié)果婚禮上企垦,老公的妹妹穿的比我還像新娘。我一直安慰自己晒来,他們只是感情好钞诡,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湃崩,像睡著了一般荧降。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上攒读,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天朵诫,我揣著相機與錄音,去河邊找鬼薄扁。 笑死剪返,一個胖子當著我的面吹牛废累,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脱盲,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼邑滨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钱反?” 一聲冷哼從身側(cè)響起掖看,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎面哥,沒想到半個月后哎壳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡幢竹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年耳峦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焕毫。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹲坷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邑飒,到底是詐尸還是另有隱情循签,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布疙咸,位于F島的核電站县匠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撒轮。R本人自食惡果不足惜乞旦,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望题山。 院中可真熱鬧兰粉,春花似錦、人聲如沸顶瞳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慨菱。三九已至焰络,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間符喝,已是汗流浹背闪彼。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留协饲,地道東北人备蚓。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓课蔬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親郊尝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容