Gradle总结-生命周期

it2025-04-03  10

生命周期

Gradle的生命周期图如下所示:

图来源于:深入理解Android之Gradle

生命周期分为三个阶段:

一、初始化
为settings.gadle文件创建一个Settings对象,并执行settings.gadle文件中的配置代码,利用Settings对象为settings.gadle文件中包含的所有Project项目根据其build.gradle文件创建具有层次关系的Project对象

注意:

settings.gadle文件和Settings对象是一一对应关系,也就是一个settings.gradle文件只能创建一个Settings对象.settings.gradle文件中通过include:Project方式添加项目,实际上执行的就是Settings对象中的**include**(String… projectPaths)方法.Settings对象会自动为根项目创建Porject对象,名称就是包含settings.gradle文件的目录名.build.gradle文件和Project对象是一一对应关系,Settings对象是根据其所包含项目中的build.gradle文件创建Project对象
二、配置

执行所包含的所有build.gradle文件中的配置代码,下载三方插件,依赖项,以及构建Task的依赖关系图,

注意:

执行build.gradle中的配置代码,不仅仅包含其中的语句,方法,DSL,还包含Task中的配置代码构建Task的依赖关系图是Gradle的核心
三、执行

根据任务命令以及参数,确定要执行的任务子集,并执行

注意:

对于多项目而言,每次执行任务,都需要执行前面的初始化和包含的所有项目的配置

Hook点

我们经常会需要在Project或者是Task执行到某一阶段时做一些额外处理,这时我们就需要进行一些hook, Gradle官方为我们提供了以下方法,以便我们处理

Interface Gradle


void settingsEvaluated()在settings.gradle被加载和解析时调用void projectsLoaded(Closure closure)当settings.gradle包含的项目的project实例都被创建但是还未被解析时调用void beforeProject(Closure closure)当每一个Project实例被解析之前调用,注意是解析,这时Project已经被创建了void afterProject(Closure closure)当每一个Project实例被解析之后调用,注意是解析,这时Project已经被创建了void projectsEvaluated(Closure closure)当所有的Project实例都被解析后调用void buildStarted(Closure closure)当构建开始前调用void buildFinished(Closure closure)当构建结束后调用void beforeSettings(Closure<?> closure)在setting.gradle 被加载和解析之前调用

Interface TaskExecutionGraph


void whenReady(Closure closure)当Tasks关系依赖图创建成功时void beforeTask(Closure closure)当Task执行前调用void afterTask(Closure closure)当Task执行后调用

在多项目的Gradle执行流程中 上述方法的执行顺序如下:

注意:

每次Gradle在执行时 都会创建一个唯一的贯穿始终的 Gradle实例, 在Settings类(settings.gradle) ,Project类(build.gradle)中都可以通过getGradle()方法获取如果要hook Gradle生命周期中的某个点,一定要在该点执行之前就要监听,否者无效
最新回复(0)