=============================================================================
Gradle的构建过程有着固定的生命周期,分别是:
-
初始化阶段
-
配置阶段
-
执行阶段
下面就详细介绍一下这三个阶段都做了什么事情。
初始化阶段的主要任务:就是创建项目的层次结构,并为每一个项目创建一个Project 实例对象。
在初始化阶段中,会执行 settings.gradle 脚本,并读取 settings.gradle 中的 include 信息,进而为每一个工程(即build.gradle 脚本文件)创建一个与之对应的 Project 对象,最终形成一个项目的层次结构。 一个 settings.gradle 脚本对应一个 Settings 对象(在Gradle 初始化的时候创建),而我们最常用来声明项目的层次结构的 include标签 就是 Settings 类下的一个方法,Settings 类还有如下方法,都可以直接在 settings.gradle 文件中直接访问:
1-1、应用其它工程的模块
比如:通过 include 和 project 方法,可以实现引用任何位置下的工程模块:
include ‘:myjson’ // 需要参与构建的模块名称
project(’:myjson’).projectDir = file(’/Users/WorkSpace/AndroidDemo/MyJson/myjson’)
-
include方法 :指定参与构建的模块的名称,模块名前需要加冒号(:),模块名称可以任取。
-
project方法:加载指定的模块,并为该模块设置一个工程路径,参数必须与include参数一致 。
这样本工程就可以引用到其它位置的模块了,如果引用的是一个 library 模块,那么在本工程的模块中,就可以依赖这个 library 模块了,如:
implementation project(":myjson")
1-2、监听初始化过程
在上面的 Settings 类的方法列表中,有一个 getGradle() 方法,返回一个 Gradle 对象,通过这个 Gradle 对象,我们可以监听 Gradle 构建过程中 各个生命周期方法的回调,如在 settings.gradle 文件中,增加如下监听:
gradle.addBuildListener(new BuildListener() {
void buildStarted(Gradle var1) {
println ‘buildStarted()->开始构建’
}
void settingsEvaluated(Settings var1) {
println ‘settingsEvaluated()->settings评估完成(settins.gradle中代码执行完毕)’
// var1.gradle.rootProject 这里访问Project对象时会报错,还未完成Project的初始化
}
void projectsLoaded(Gradle var1) {
println ‘projectsLoaded()->项目结构加载完成(初始化阶段结束)’
println ‘projectsLoaded()->初始化结束,可访问根项目:’ + var1.gradle.rootProj