# 任务
- 了解 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
方法了,所以本文也只演示了该方法的作用与使用。