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