一、Gradle 生命周期
1、initialization:初始化阶段
执行工程的setting.gradle文件。 解析整个工程下的所有Project,构建所有的Project对应的project对象
2、Configuration:配置阶段
解析所有project对象中的task,构建好所有的task拓扑图(有向无环图)。
这个有向无环图其实就是各个执行一个Task所依赖的其他Task而形成的一种关系图。
3、Excution:执行阶段
执行具体的task,及其依赖的task(先执行目标Task依赖的Task,再执行目标Task)
二、生命周期监听方法
生命周期监听的设置有两种方法:
1.实现一个特定的监听接口;
2.提供一个用于在收到通知时执行的闭包。
Project 提供的一些生命周期回调方法:
- afterEvaluate(closure);
- afterEvaluate(action);
- beforeEvaluate(closure);
- beforeEvaluate(action);
Gradle 提供的一些生命周期回调方法:
- afterProject(closure),afterProject(action)
- beforeProject(closure),beforeProject(action)
- buildFinished(closure),buildFinished(action)
- projectsEvaluated(closure),projectsEvaluated(action)
- projectsLoaded(closure),projectsLoaded(action)
- settingsEvaluated(closure),settingsEvaluated(action)
- addBuildListener(buildListener)
- addListener(listener)
- addProjectEvaluationListener(listener)
在setting.gradle文件中可以监听初始化阶段和配置之前的阶段
this.gradle.settingsEvaluated {
println('初始化阶段开始执行...')
}
this.gradle.beforeProject {
println('配置之前调用...')
}
在build.gradle文件中,可以监听配置之后、task的执行阶段和执行完成的阶段
this.afterEvaluate {
println('配置之后....')
}
gradle.taskGraph.beforeTask {
println "执行阶段 Task完成之前"
}
gradle.taskGraph.afterTask {
println "执行阶段 Task完成之后 "
}
this.gradle.buildFinished {
println("执行阶段完毕,构建完毕...")
}
以上代码不需要添加在任何代码块中,只需要添加到gradle文件的最外层即可。
我们再Terminal中输入gradlew aDebug编译一次,看看输出结果
D:\workspace\Gradle>gradlew aDebug
初始化阶段开始执行...
> Configure project :
配置之前调用...
配置之后....
> Configure project :app
配置之前调用...
配置阶段完成后
> Task :app:preBuild UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:preDebugBuild UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:compileDebugAidl NO-SOURCE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:compileDebugRenderscript NO-SOURCE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:generateDebugBuildConfig UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:javaPreCompileDebug UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:checkDebugAarMetadata UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:generateDebugResValues UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:generateDebugResources UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeDebugResources UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:extractDeepLinksDebug UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:processDebugMainManifest UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:processDebugManifest UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:processDebugManifestForPackage UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:processDebugResources UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:compileDebugJavaWithJavac UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:compileDebugSources UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeDebugShaders UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:compileDebugShaders NO-SOURCE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:generateDebugAssets UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeDebugAssets UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:compressDebugAssets UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:processDebugJavaRes NO-SOURCE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeDebugJavaResource UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:checkDebugDuplicateClasses UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:dexBuilderDebug UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:desugarDebugFileDependencies UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeExtDexDebug UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeDexDebug UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeDebugJniLibFolders UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:mergeDebugNativeLibs UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:stripDebugDebugSymbols NO-SOURCE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:validateSigningDebug UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:packageDebug UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
> Task :app:assembleDebug UP-TO-DATE
执行阶段 Task完成之前
执行阶段 Task完成之后
执行阶段完毕,构建完毕...
执行阶段执行完成后
BUILD SUCCESSFUL in 1s
25 actionable tasks: 25 up-to-date
D:\workspace\Gradle>
在生命周期的打印都输出了