# 任務
- 了解 Settings 類作用於 Gradle 構建的哪個階段?
- 了解 Settings 類與 settings.gradle 的關系
- 了解和使用 inlcude 方法
- hook 初始化階段的監聽器
- 總結
# Settings 類作用於 Gradle 構建的哪個階段?
前面介紹過,Gradle 構建涉及到三個階段,分別是 初始化階段
,配置階段
,執行階段
。在 Gradle 中就是通過執行 Settings
類來完成構建的 初始化階段
。
# Settings 類與 settings.gradle 的關系
就像大家所知的build.gradle
文件是對應於Project
的,那么settings.gradle
對應於 Settings
類啦。
# includ 方法
在 Setting 類中,最重要的一個方法就是
include
方法了。
方法名 | 作用 |
---|---|
void include(String... projectPaths); | 添加需要參與構建的Project,接受一個可變參數,每一個值是一個Project路徑 |
這里有一個需要注意的點:可變參數的路徑
並不是 project 的文件路徑,它指的是當前 project
相對於根project
的路徑。
例如:在一個 AS 的示例工程中,有如下一些 module ,那么每一個 project 的 path 該如何表示呢,下面我列舉一個示例來表示一下:
GradleDemo(根Project) -> path = "" app(子Project) -> path = ":app" subapp(app的子project) -> path = ":app:subapp" common(子Project) -> path = ":common" play(子Project) -> path = ":play"
從上面的 module 的結構來看, GradleDemo 為根project ,它的路徑是 :
,而對於 app
module 來說,它的 path 是 :app
。subapp
是 app project 的子 project ,它的 path 是:app:subapp
。所以基於上面的理解,每一個 project 的路徑都是相對於根project
而言的,路徑的分隔符是 :
而不是\
。
下面是 project路徑 的格式:
:路徑1:路徑2
說了那么多,現在來看看如何使用 include 方法咯:
- 添加一個 project
//添加:app這個module參與構建 include ":app"
- 添加多個 project
//include 接受可變參數,使用 , 逗分開不同的路徑 include ':app',':common'
# hook 初始化階段的監聽器
在初始化階段中主要做的事有兩件:
- 確定哪些是需要構建的 project 。
- 為所有的參與構建的 Project 創建對象。
那么下面列舉是在執行 settings.gradle 腳本的監聽回調:
gradle.settingsEvaluated { println "【settings.gradle】 初始化執行結束" } gradle.projectsLoaded { Gradle gradle -> println "【settings.gradle】 所有在 settings 中 include 的 Project 對象都創建完成了" }
# 總結
雖然 Settings 類很簡單,但是我們不能忽略的它的作用哦,畢竟它負責了 Gradle 構建的第一個階段。在日常開發中,我們主要使用到的就是 include
方法了,所以本文也只演示了該方法的作用與使用。