基于Groovy語言,Gradle采用了DSL(domain-speci clanguage)編寫腳本來完成整個工程的build工作。
Project與Task
在一個Android項目中,可能會有多個模塊和子庫;另外項目的build工作分為多個步驟。因此,Gradle在項目的build腳本中引入了`Project`與`Task`這兩個重要的概念。
在Android項目中,每個build.gradle腳本代表了一個Project;在build腳本中,我們可以定義多個Task來完成相關工作。而一個Task定義了一系列相關的操作(Action),用于完成相應的構建任務。
Build工作的生命周期
在Gradle的構建框架中,整個build工作實質上就是在執行執行配置腳本中所定義的Task。一個Task可能會依賴于其他Task的完成,因此,Gradle采用類似于DAG的模型來描述整個build工作流。在該模型中,Task按順序依次執行,某個Task執行完畢后是不會被再次執行的。一個完整的Gradle build周期包括以下3個階段:
- 初始化:該階段主要完成Project對象的創建,如果有一個項目中有多個模塊,則會根據相應的build腳本創建多個project對象。
- 配置:在配置階段,Gradle將根據build腳本為每個project創建并配置整個流程中Task依賴關系圖。
- 執行:該階段中,Gradle將執行命令行參數中所指定的Task。
Gradle Wrapper
在日常工作中,我們通常需要采用多人協同的方式來完成項目的開發工作。為了保證項目組中每個開發者的build工具版本和環境都是相同的,Gradle采用了非常方便和實用的解決方案:gradle wrapper。
Gradle Wrapper提供了一個腳本文件(gradlew.bat或.sh)。當我們運行該腳本時,Wrapper將會根據當前項目指定Gradle版本自動下載安裝,并自動用它對項目進行build。利用Wrapper策略,Gradle保證了當前項目的buid腳本運行在指定的版本上,開發者無需再去手動管理。
在Android Studio創建的工程中,其實已經生成好了wrapper相關的文件:
- gradlew腳本及其用到的jar
- 配置文件properties
在配置文件指定了當前工程所采用的Gradle的版本,以及它的下載地址。
小結
本章簡單介紹了gradle相關的基礎知識,其中主要包括了project和task的基本概念,以及gradle是如何利用gradle wrapper來保證團隊開發工作中gradle版本的一致性。