Gradle 的工作流程其实蛮简单,用一个图 26 来表达:
图 26 告诉我们,Gradle 工作包含三个阶段:
- 首先是初始化阶段。对我们前面的 multi-project build 而言,就是执行 settings.gradle
- Initiliazation phase 的下一个阶段是 Configration 阶段。
- Configration 阶段的目标是解析每个 project 中的 build.gradle。比如 multi-project build 例子中,解析每个子目录中的 build.gradle。在这两个阶段之间,我们可以加一些定制化的 Hook。这当然是通过 API 来添加的。
- Configuration 阶段完了后,整个 build 的 project 以及内部的 Task 关系就确定了。恩?前面说过,一个 Project 包含很多 Task,每个 Task 之间有依赖关系。Configuration 会建立一个有向图来描述 Task 之间的依赖关系。所以,我们可以添加一个 HOOK,即当 Task 关系图建立好后,执行一些操作。
- 最后一个阶段就是执行任务了。当然,任务执行完后,我们还可以加 Hook。
下面展示一下我按图 26 为 posdevice 项目添加的 Hook,它的执行结果:
我在:
- settings.gradle 加了一个输出。
- 在 posdevice 的 build.gradle 加了图 25 中的 beforeProject 函数。
- 在 CPosSystemSdk 加了 taskGraph whenReady 函数和 buidFinished 函数。
好了,Hook 的代码怎么写,估计你很好奇,而且肯定会埋汰,搞毛这么就还没告诉我怎么写 Gradle。马上了!
最后,关于 Gradle 的工作流程,你只要记住:
- Gradle 有一个初始化流程,这个时候 settings.gradle 会执行。
- 在配置阶段,每个 Project 都会被解析,其内部的任务也会被添加到一个有向图里,用于解决执行过程中的依赖关系。
- 然后才是执行阶段。你在 gradle xxx 中指定什么任务,gradle 就会将这个 xxx 任务链上的所有任务全部按依赖顺序执行一遍!
下面来告诉你怎么写代码!
\ No newline at end of file