前言
学习groovy的目的最终是为了更好的使用gradle,前面已经对groovy进行了一些列的学习,接下来开始gradle的学习。
一、Gradle的执行流程
1、Initialization初始化阶段
- 解析整个工程中的所有project,构建所有的Project对应的project对象
2、Configuration配置阶段
- 解析所有的projects对象中的task,构建好所有的task的拓扑图(有向无环图)
3、Execution执行阶段
- 执行具体的task及其依赖的task
4、Gradle工程分析
- 4.1、我们都知道,在一个Android工程中可能由很多个Module,那么每一个Module都会对应着一个Project对象(后面会讲到Gradle的关键API,Project)。
新建一个项目,并且创建5个Module,如下图:
- 4.2、那么就会在settings.gradle文件中将这些module include进来
- 4.3、初始化阶段,就会解析settings.gradle文件,生成对应的project对象
在生成所有的project对象之后就会来到了配置阶段 。一个project包含很多个Task,即每个Project是由多个Task组成的。Task后面会讲到,现在先简单的理解为他是一个原子性的操作,就像我们编程中的函数一样,每个task都会完成自己的功能。下面是一个task 'clean',做Android的都应该见过它。作用也简单,删除编译后产生的build目录
task clean(type: Delete) {
delete rootProject.buildDir
}
- 4.4、在编程的时候,函数的调用是有一定的顺序的,这个顺序当然是由我们决定的,比如java程序的运行,会先执行main函数,然后我们在main函数中执行自己的逻辑,调用其他方法,在方法中调用其他的方法。我们根据需求编写这些函数并让它们按照一定的顺序正确执行,最终构建成整个拥有不同功能的应用。那么Gradle在构建APK的时候,也需要按照一定的顺序去执行一个个的task,最终构建出整个应用。那么这些task之间,也有执行的先后顺序,有些task是依赖于其他的task,需要在一些task执行之后才执行(后面会讲Task的时候讲到如何利用Gradle提供的APT决定Task之间的依赖关系),所以配置阶段就是去解析所有Project对象中的Task,构建好所有Task的拓扑图,即这些Task之间的执行顺序在配置阶段就确定了。
- 4.5、在配置完成后,所有的task的执行顺序已经确定了,那么就到了执行阶段,执行具有的Task已经依赖Task。比如执行build Task,就会执行一系列build依赖的Task,执行build Task本身,最终打包生成我们需要的apk。
二、Gradle生命周期的监听
1、生命周期的回调监听方法
/**
* 配置阶段开始前回调监听
*/
this.beforeEvaluate {
}
/**
* 配置阶段完成后回调监听
*/
this.afterEvaluate {
println '配置阶段完成...'
}
/**
* gradle执行完毕的回调监听
*/
this.gradle.buildFinished {
println 'gradle执行完毕...'
}
2、看过前面讲的Groovy内容再来看这个,应该很容易就看懂吧,没有看过的话,请先看看Groovy语法讲解内容。在Core module的build.gradle文件中输入上面内容,然后在终端输入 gradlew clean(mac中有点不同, ./gradlew clean)执行一个比较简单的Task,也就是我们前面看到的clean Task,下面是输出结果
3、当然还有其他的监听方法、比如beforProject, afterProject(等同配置阶段的监听)等。还有下图一些
4、其他监听
this.gradle.addBuildListener(new BuildListener() {
@Override
void buildStarted(Gradle gradle) {
}
@Override
void settingsEvaluated(Settings settings) {
}
@Override
void projectsLoaded(Gradle gradle) {
}
@Override
void projectsEvaluated(Gradle gradle) {
}
@Override
void buildFinished(BuildResult result) {
}
})