- 目錄
Gradle <一> 介紹
Gradle <二> 之groovy基礎(chǔ)語法
Gradle <三> 之groovy集合篇
Gradle <四> 之groovy面向?qū)ο?/a>
Gradle <五> 之groovy數(shù)據(jù)解析
Gradle <六> 之Gradle 生命周期監(jiān)聽
Gradle <七> 之Gradle 關(guān)于project
Gradle <八> 之Gradle 項目實戰(zhàn)-自動化構(gòu)建工程
Gradle <九> 之Gradle 項目實戰(zhàn)-自動化打包
一弟头、Gradle的執(zhí)行流程
1.Initialization初始化階段
解析整個工程中的所有Project,構(gòu)建所有的Project對應(yīng)的project對象
2.Configuration配置階段
解析所有projects對象中的task,構(gòu)建好所有task的拓撲圖(有向無環(huán)圖)
3.Execution執(zhí)行階段
執(zhí)行具體的task及其依賴的task
我們都知道卫键,在一個Android工程中可能有很多個Module,那么每一個Module都會對應(yīng)著一個Project對象(后面也會講到Gradle的關(guān)鍵API拍嵌,Project)舌涨。
-
新建一個項目卸勺,并且創(chuàng)建module致份,如下圖
image.png -
那么就會在settings.gradle文件中將這些module include進來
image.png -
初始化階段崇裁,就會解析settings.gradle文件,生成對應(yīng)的project對象
在生成所有的project對象之后就會來到了配置階段猖任。一個Project包含很多個Task,即每個Project是由多個Task組成的你稚。Task后面會講到,現(xiàn)在先簡單的理解為它就是一個原子性的操作朱躺,就像我們編程中的函數(shù)一樣刁赖,每個Task都會完成自己的功能.下面是一個Task‘clean’,做Android的都應(yīng)該見過它长搀。作用也很簡單宇弛,刪除編譯后產(chǎn)生的build目錄
task clean(type: Delete) {
delete rootProject.buildDir
}
- 在編程的時候,函數(shù)的調(diào)用是有一定順序的源请,這個順序當然是由我們決定的枪芒,比如java程序的運行,會先執(zhí)行main函數(shù)谁尸,然后我們在main函數(shù)中執(zhí)行自己的邏輯舅踪,調(diào)用其它方法,在方法中調(diào)用其它的方法良蛮。我們根據(jù)需求編寫這些函數(shù)并讓它們按照一定的的順序正確執(zhí)行抽碌,最終構(gòu)建成整個擁有不同功能的應(yīng)用。那么Gradle在構(gòu)建APK的時候决瞳,也需要按照一定的順序去執(zhí)行一個一個的Task货徙,最終構(gòu)建出整個應(yīng)用。那么這些Task之間皮胡,也有執(zhí)行的先后順序的痴颊,有些Task是依賴于其它Task的,需要再一些Task執(zhí)行之后才執(zhí)行(后面講Task的時候會講到如何利用Gradle提供的API決定Task之間的依賴關(guān)系)屡贺,所以配置階段就是去解析所有Project對象中的Task,構(gòu)建好所有Task的拓撲圖蠢棱,即這些Task之間的執(zhí)行順序在配置階段就確定了锌杀。
- 在配置完成后,所有的Task的執(zhí)行順序已經(jīng)確定了裳扯,那么就來到了執(zhí)行階段抛丽,執(zhí)行具體的Task及其依賴Task。比如執(zhí)行build Task饰豺,就會執(zhí)行一系列build依賴的Task,再執(zhí)行build Task本身,最終打包生成我們需要的APK允蜈。
二冤吨、Gradle生命周期的監(jiān)聽
- 生命周期的回調(diào)監(jiān)聽方法
/**
* 配置階段開始前回調(diào)監(jiān)聽
*/
this.beforeEvaluate {
}
/**
* 配置階段完成后回調(diào)監(jiān)聽
*/
this.afterEvaluate {
println '配置階段完成...'
}
/**
* gradle執(zhí)行完畢的回調(diào)監(jiān)聽
*/
this.gradle.buildFinished {
println 'gradle執(zhí)行完畢...'
}
-
看過前面講的Groovy內(nèi)容再來看這個,應(yīng)該很容易就看懂吧饶套,沒有看過的話漩蟆,請先看看Groovy語法講解內(nèi)容。在core module的build.gradle文件中輸入上面內(nèi)容,然后在終端中輸入gradlew clean,(mac中有點不同妓蛮,./gradlew clean)執(zhí)行一個比較簡單的Task怠李,也就是我們前面看到的clean Task,下面是輸出結(jié)果
image.png 所以我們可以通過Gradle給我們提供的api監(jiān)聽它的生命周期過程,并且可以根據(jù)需求在不同的生命周期添加我們自己的邏輯蛤克。但是不知道大家注意沒有捺癞,初始化階段我并沒有寫出來,卻也輸出了构挤,其實我是在settings.gradle中添加了這個輸出語句髓介,結(jié)果這句是最先輸出的,這也就可以證明我們上面說的初始化階段筋现,其實也就是去解析settings.gradle唐础。
當然還有其它的監(jiān)聽方法,比如beforProject,afterProject (等同配置階段的監(jiān)聽)等等矾飞。還有下圖的一些(相信大家看名字也能看懂)
- 其它監(jiān)聽
this.gradle.addBuildListener(new BuildListener() {
@Override
void buildStarted(Gradle gradle) {
}
@Override
void settingsEvaluated(Settings settings) {
}
@Override
void projectsLoaded(Gradle gradle) {
}
@Override
void projectsEvaluated(Gradle gradle) {
}
@Override
void buildFinished(BuildResult result) {
}
})