基于Groovy語言真椿,Gradle采用了DSL(domain-speci clanguage)編寫腳本來完成整個(gè)工程的build工作挣跋。
Project與Task
在一個(gè)Android項(xiàng)目中避咆,可能會有多個(gè)模塊和子庫;另外項(xiàng)目的build工作分為多個(gè)步驟樊销。因此,Gradle在項(xiàng)目的build腳本中引入了`Project`與`Task`這兩個(gè)重要的概念剂府。
在Android項(xiàng)目中,每個(gè)build.gradle腳本代表了一個(gè)Project衰伯;在build腳本中,我們可以定義多個(gè)Task來完成相關(guān)工作临扮。而一個(gè)Task定義了一系列相關(guān)的操作(Action)贪壳,用于完成相應(yīng)的構(gòu)建任務(wù)彪笼。
Build工作的生命周期
在Gradle的構(gòu)建框架中幅恋,整個(gè)build工作實(shí)質(zhì)上就是在執(zhí)行執(zhí)行配置腳本中所定義的Task。一個(gè)Task可能會依賴于其他Task的完成,因此冯丙,Gradle采用類似于DAG的模型來描述整個(gè)build工作流泞莉。在該模型中,Task按順序依次執(zhí)行饮寞,某個(gè)Task執(zhí)行完畢后是不會被再次執(zhí)行的。一個(gè)完整的Gradle build周期包括以下3個(gè)階段:
- 初始化:該階段主要完成Project對象的創(chuàng)建,如果有一個(gè)項(xiàng)目中有多個(gè)模塊蹄溉,則會根據(jù)相應(yīng)的build腳本創(chuàng)建多個(gè)project對象。
- 配置:在配置階段棉胀,Gradle將根據(jù)build腳本為每個(gè)project創(chuàng)建并配置整個(gè)流程中Task依賴關(guān)系圖唁奢。
- 執(zhí)行:該階段中,Gradle將執(zhí)行命令行參數(shù)中所指定的Task采郎。
Gradle Wrapper
在日常工作中,我們通常需要采用多人協(xié)同的方式來完成項(xiàng)目的開發(fā)工作整份。為了保證項(xiàng)目組中每個(gè)開發(fā)者的build工具版本和環(huán)境都是相同的犯建,Gradle采用了非常方便和實(shí)用的解決方案:gradle wrapper。
Gradle Wrapper提供了一個(gè)腳本文件(gradlew.bat或.sh)否彩。當(dāng)我們運(yùn)行該腳本時(shí),Wrapper將會根據(jù)當(dāng)前項(xiàng)目指定Gradle版本自動下載安裝,并自動用它對項(xiàng)目進(jìn)行build。利用Wrapper策略笨奠,Gradle保證了當(dāng)前項(xiàng)目的buid腳本運(yùn)行在指定的版本上般婆,開發(fā)者無需再去手動管理啤咽。
在Android Studio創(chuàng)建的工程中芋膘,其實(shí)已經(jīng)生成好了wrapper相關(guān)的文件:
- gradlew腳本及其用到的jar
- 配置文件properties
在配置文件指定了當(dāng)前工程所采用的Gradle的版本,以及它的下載地址胶惰。
小結(jié)
本章簡單介紹了gradle相關(guān)的基礎(chǔ)知識,其中主要包括了project和task的基本概念,以及gradle是如何利用gradle wrapper來保證團(tuán)隊(duì)開發(fā)工作中g(shù)radle版本的一致性。