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执行的时候遵循如下顺序:

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

备注:如果注册了多个project.afterEvaluate回调,那么执行顺序等同于注册顺序。在上面的例子中,由于buildSrc中的回调注册较早,所以它也先执行。

推荐阅读任玉刚大神的博客:
全面理解Gradle - 执行时序

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangjin1120

可靠的文章费时费力,希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值