Gradle 工作流程
Gradle 的工作流程其實(shí)蠻簡單,用一個(gè)圖 26 來表達(dá):
http://wiki.jikexueyuan.com/project/deep-android-gradle/images/27.jpg" alt="" />
圖 26 告訴我們,Gradle 工作包含三個(gè)階段:
- 首先是初始化階段。對(duì)我們前面的 multi-project build 而言,就是執(zhí)行 settings.gradle
- Initiliazation phase 的下一個(gè)階段是 Configration 階段。
- Configration 階段的目標(biāo)是解析每個(gè) project 中的 build.gradle。比如 multi-project build 例子中,解析每個(gè)子目錄中的 build.gradle。在這兩個(gè)階段之間,我們可以加一些定制化的 Hook。這當(dāng)然是通過 API 來添加的。
- Configuration 階段完了后,整個(gè) build 的 project 以及內(nèi)部的 Task 關(guān)系就確定了。恩?前面說過,一個(gè) Project 包含很多 Task,每個(gè) Task 之間有依賴關(guān)系。Configuration 會(huì)建立一個(gè)有向圖來描述 Task 之間的依賴關(guān)系。所以,我們可以添加一個(gè) HOOK,即當(dāng) Task 關(guān)系圖建立好后,執(zhí)行一些操作。
- 最后一個(gè)階段就是執(zhí)行任務(wù)了。當(dāng)然,任務(wù)執(zhí)行完后,我們還可以加 Hook。
下面展示一下我按圖 26 為 posdevice 項(xiàng)目添加的 Hook,它的執(zhí)行結(jié)果:
http://wiki.jikexueyuan.com/project/deep-android-gradle/images/28.jpg" alt="" />
我在:
- settings.gradle 加了一個(gè)輸出。
- 在 posdevice 的 build.gradle 加了圖 25 中的 beforeProject 函數(shù)。
- 在 CPosSystemSdk 加了 taskGraph whenReady 函數(shù)和 buidFinished 函數(shù)。
好了,Hook 的代碼怎么寫,估計(jì)你很好奇,而且肯定會(huì)埋汰,搞毛這么就還沒告訴我怎么寫 Gradle。馬上了!
最后,關(guān)于 Gradle 的工作流程,你只要記?。?
- Gradle 有一個(gè)初始化流程,這個(gè)時(shí)候 settings.gradle 會(huì)執(zhí)行。
- 在配置階段,每個(gè) Project 都會(huì)被解析,其內(nèi)部的任務(wù)也會(huì)被添加到一個(gè)有向圖里,用于解決執(zhí)行過程中的依賴關(guān)系。
- 然后才是執(zhí)行階段。你在 gradle xxx 中指定什么任務(wù),gradle 就會(huì)將這個(gè) xxx 任務(wù)鏈上的所有任務(wù)全部按依賴順序執(zhí)行一遍!
下面來告訴你怎么寫代碼!
\ No newline at end of file