gradle系列:理解Project.afterEvaluate
Posted zhangjin1120
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle系列:理解Project.afterEvaluate相关的知识,希望对你有一定的参考价值。
目录
在哪里用到了afterEvaluate()?
在app module的build.gradle文件里面,添加如下代码:
afterEvaluate
println "afterEvaluta被调用"
这里用的android studio版本是Android Stduio Bumblebee | 2021.1.1 Patch 3
, build.gradle文件完整代码如下:
plugins
id 'com.android.application'
android
compileSdk 32
defaultConfig
applicationId "com.example.gradledemo"
minSdk 24
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
compileOptions
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
afterEvaluate
println "afterEvaluta被调用"
dependencies
implementation 'androidx.appcompat:appcompat:1.5.0'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
看看gradle console里面会打印什么?
afterEvaluate 什么时候被调用?
如下图,项目中使用的是 gradle-7.0.2-all.zip
可以看到afterEvaluate是Project的一个函数。
继续看看官网怎么说?
官网地址:https://docs.gradle.org/current/userguide/userguide.html
文档:org.gradle.api.Project:afterEvaluate(groovy.lang.Closure)
翻译过来就是:
添加在评估Project后立即调用的闭包。
Project作为参数传递给闭包。
当属于此Project的buidl 文件被执行时,这个listener会收到通知。
例如,父项目可以将listener添加到其子项目中。
listener可以根据子项目的build文件运行后的状态进一步配置这些子项目。
Gradle执行的时候遵循如下顺序:
- 首先解析settings.gradle来获取模块信息,这是初始化阶段;
- 然后配置每个模块,配置的时候并不会执行task;
- 配置完了以后,有一个重要的回调project.afterEvaluate,它表示所有的模块都已经配置完了,可以准备执行task了;
- 执行指定的task。
备注:如果注册了多个project.afterEvaluate回调,那么执行顺序等同于注册顺序。在上面的例子中,由于buildSrc中的回调注册较早,所以它也先执行。
推荐阅读任玉刚大神的博客:
全面理解Gradle - 执行时序
以上是关于gradle系列:理解Project.afterEvaluate的主要内容,如果未能解决你的问题,请参考以下文章