You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Android Gradle Plugin至4.1.0后afterEvaluate未触发问题求助

解决AGP 4.1.0中subprojects内afterEvaluate不触发的问题

这个问题我之前帮同行排查过,AGP 4.1.x版本开始对Android插件的配置生命周期做了关键调整,原来在android块内嵌套afterEvaluate的写法不再可靠——因为Android插件本身的配置流程在升级后有了变化,导致嵌套的afterEvaluate无法被Gradle正确触发执行。

可行的修复方案

你需要把afterEvaluate从android块移到subprojects的根层级,同时增加Android插件的判断逻辑(避免非Android模块报错),具体修改后的代码如下:

subprojects {
    // 将afterEvaluate移至subprojects的直接子层级,确保Gradle能正确注册回调
    afterEvaluate { project ->
        // 先判断当前子项目是否为Android项目(应用或库)
        def isAndroidProject = project.plugins.hasPlugin('com.android.application') || 
                               project.plugins.hasPlugin('com.android.library')
        if (isAndroidProject) {
            project.android.buildTypes.each { buildType ->
                final String suffix = buildType.name == 'release' ? '' : ".${buildType.name}"
                project.libraryApplicationIds.each { String constant, String libAppId ->
                    buildType.buildConfigField "String", constant, "\"$libAppId$suffix\""
                    buildType.manifestPlaceholders[constant] = "$libAppId$suffix"
                }
            }
        }
    }
}

失效原因说明

AGP 4.1.0开始优化了配置阶段的执行逻辑,android块本身是在项目配置过程中被解析的,嵌套在其中的afterEvaluate会因为Android插件内部的生命周期调整,无法被Gradle正确加入到项目的评估回调队列中。把afterEvaluate放到subprojects的直接层级,就能确保它被Gradle正确识别,在所有子项目评估完成后执行。

另外新增的插件判断是个实用的防御性编程习惯——如果你的项目里包含非Android模块(比如纯Java库),可以避免执行Android相关代码时抛出异常。

内容的提问来源于stack exchange,提问作者Radim Janda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:32:28