全面理解Gradle - 执行时序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全面理解Gradle - 执行时序相关的知识,希望对你有一定的参考价值。

参考技术A 一个像 Ant 一样的非常灵活的通用构建工具
一种可切换的, 像 maven 一样的基于合约构建的框架
支持强大的多工程构建
支持强大的依赖管理(基于 ApacheIvy )
支持已有的 maven 和 ivy 仓库
支持传递性依赖管理, 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
优先支持 Ant 式的任务和构建
基于 groovy 的构建脚本
有丰富的领域模型来描述你的构建

如果你本地安装了Gradle,那么你就可以使用gradle命令来直接构建。如果本地没有安装,那么可以通过gradle wrapper来构建,Linux和MAC使用./gradlew,而Windows上面则使用gradlew,还可以在 gradle/gradle-wrapper.properties 中配置 Gradle 版本。

Gradle脚本的执行分为三个过程:

下面我们根据一个实际的例子来详细说明。这里我们仍然采用VirtualAPK这个开源项目来做演示,它的地址是: https://github.com/didi/VirtualAPK 。

我们以它的宿主端为例,宿主端有如下几个模块:

其中buildSrc是virtualapk-gradle-plugin,为了便于调试我将其重命名为buildSrc。他们的依赖关系如下:

解释一下,app模块依赖CoreLibrary和buildSrc,CoreLibrary又依赖androidStub。为了大家更好理解,下面加一下log。

现在随便执行一个task,比如 ./gradlew clean ,那么将会输出如下日志,大家对比着日志,应该能明白Gradle脚本的执行顺序了吧。

可以看到,Gradle执行的时候遵循如下顺序:
1. 首先解析settings.gradle来获取模块信息,这是初始化阶段;
2. 然后配置每个模块,配置的时候并不会执行task;
3. 配置完了以后,有一个重要的回调 project.afterEvaluate ,它表示所有的模块都已经配置完了,可以准备执行task了;
4. 执行指定的task。

以上是关于全面理解Gradle - 执行时序的主要内容,如果未能解决你的问题,请参考以下文章

深入理解gradle中的task

如何通俗地理解 Gradle

如何对vivado时序约束有个很好得理解

一条SQL执行的完整流程解析 - 《从0到1-全面深刻理解MySQL系列-第四篇》

使用Node.js理解和测量Http时序

知识点 | 全面理解支持向量机