全面理解Gradle - 執(zhí)行時(shí)序

什么是Gradle?

一個(gè)像 Ant 一樣的非常靈活的通用構(gòu)建工具
一種可切換的, 像 maven 一樣的基于合約構(gòu)建的框架
支持強(qiáng)大的多工程構(gòu)建
支持強(qiáng)大的依賴管理(基于 ApacheIvy )
支持已有的 maven 和 ivy 倉(cāng)庫(kù)
支持傳遞性依賴管理, 而不需要遠(yuǎn)程倉(cāng)庫(kù)或者 pom.xml 或者 ivy 配置文件
優(yōu)先支持 Ant 式的任務(wù)和構(gòu)建
基于 groovy 的構(gòu)建腳本
有豐富的領(lǐng)域模型來(lái)描述你的構(gòu)建

如何學(xué)習(xí)Gradle?

使用Gradle wrapper

如果你本地安裝了Gradle,那么你就可以使用gradle命令來(lái)直接構(gòu)建。如果本地沒(méi)有安裝,那么可以通過(guò)gradle wrapper來(lái)構(gòu)建,Linux和MAC使用./gradlew,而Windows上面則使用gradlew,還可以在 gradle/gradle-wrapper.properties 中配置 Gradle 版本。

Gradle腳本的執(zhí)行時(shí)序

Gradle腳本的執(zhí)行分為三個(gè)過(guò)程:

  • 初始化
    分析有哪些module將要被構(gòu)建,為每個(gè)module創(chuàng)建對(duì)應(yīng)的 project實(shí)例。這個(gè)時(shí)候settings.gradle文件會(huì)被解析。

  • 配置:處理所有的模塊的 build 腳本,處理依賴,屬性等。這個(gè)時(shí)候每個(gè)模塊的build.gradle文件會(huì)被解析并配置,這個(gè)時(shí)候會(huì)構(gòu)建整個(gè)task的鏈表(這里的鏈表僅僅指存在依賴關(guān)系的task的集合,不是數(shù)據(jù)結(jié)構(gòu)的鏈表)。

  • 執(zhí)行:根據(jù)task鏈表來(lái)執(zhí)行某一個(gè)特定的task,這個(gè)task所依賴的其他task都將會(huì)被提前執(zhí)行。

下面我們根據(jù)一個(gè)實(shí)際的例子來(lái)詳細(xì)說(shuō)明。這里我們?nèi)匀徊捎肰irtualAPK這個(gè)開(kāi)源項(xiàng)目來(lái)做演示,它的地址是:https://github.com/didi/VirtualAPK。

我們以它的宿主端為例,宿主端有如下幾個(gè)模塊:


image

其中buildSrc是virtualapk-gradle-plugin,為了便于調(diào)試我將其重命名為buildSrc。他們的依賴關(guān)系如下:

解釋一下,app模塊依賴CoreLibrary和buildSrc,CoreLibrary又依賴AndroidStub。為了大家更好理解,下面加一下log。

現(xiàn)在隨便執(zhí)行一個(gè)task,比如./gradlew clean,那么將會(huì)輸出如下日志,大家對(duì)比著日志,應(yīng)該能明白Gradle腳本的執(zhí)行順序了吧。

可以看到,Gradle執(zhí)行的時(shí)候遵循如下順序:
1. 首先解析settings.gradle來(lái)獲取模塊信息,這是初始化階段;
2. 然后配置每個(gè)模塊,配置的時(shí)候并不會(huì)執(zhí)行task;
3. 配置完了以后,有一個(gè)重要的回調(diào)project.afterEvaluate,它表示所有的模塊都已經(jīng)配置完了,可以準(zhǔn)備執(zhí)行task了;
4. 執(zhí)行指定的task。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/zhaoyanj...
    勤奮的pangdunhu閱讀 2,226評(píng)論 0 1
  • 什么是Gradle Gradle 是新一代的自動(dòng)化構(gòu)建工具,它是一個(gè)獨(dú)立的項(xiàng)目,跟 AS、Android 無(wú)關(guān),類...
    Mr槑閱讀 626評(píng)論 0 2
  • http://www.itdecent.cn/p/7c288a17cda8 總的來(lái)說(shuō),Android的系統(tǒng)體系結(jié)...
    燕京博士閱讀 1,410評(píng)論 0 6
  • 這篇文章講給大家?guī)?lái)gradle打包系列中的高級(jí)用法-自己動(dòng)手編寫gradle插件。我們平常在做安卓開(kāi)發(fā)時(shí),都會(huì)在...
    呆萌狗和求疵喵閱讀 16,318評(píng)論 22 80
  • 說(shuō)明 本文主要介紹和Gradle關(guān)系密切、相對(duì)不容易理解的配置,偏重概念介紹。部分內(nèi)容是Android特有的(例如...
    搬磚的小明閱讀 16,141評(píng)論 1 62

友情鏈接更多精彩內(nèi)容