React Native中Project#afterEvaluate执行失败问题求助
解决React Native中
Project#afterEvaluate(Closure)执行上下文错误 我帮你捋捋这个报错的核心原因——你的android/build.gradle里的subprojects配置结构违反了Gradle 5.x的阶段执行规则,这也是你升级Gradle到5.1.1后触发报错的关键。
问题根源
Gradle 5+对构建流程的配置阶段和评估阶段的边界约束更严格:
configurations.all是在配置阶段执行的代码,此时项目还未完成初始化评估afterEvaluate是要在项目评估完成后执行的方法,不能嵌套在配置阶段的闭包(比如configurations.all)里调用,否则就会抛出你遇到的上下文错误。
看你的配置,正好犯了这个错误:把afterEvaluate嵌套在了subprojects -> configurations.all里面。
针对性解决方案
1. 修复subprojects的配置结构
把afterEvaluate从configurations.all中移出来,调整后的代码如下:
subprojects { // 先处理afterEvaluate逻辑(评估阶段执行) afterEvaluate { project -> if (project.hasProperty("android")) { android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion } } } // 再单独处理configurations的全局配置(配置阶段执行) configurations.all { // 这里可以保留你原本需要的配置规则,比如依赖版本强制等 } }
2. 清理重复的全局变量
你的build文件顶部有重复的googlePlayServicesVersion定义:
// 顶部多余的定义,建议删除 ext { googlePlayServicesVersion = "+" }
已经在buildscript -> ext里定义了具体版本,重复定义可能导致依赖冲突,删掉顶部的这个ext块即可。
3. 清理构建缓存
修改配置后,务必清理旧缓存避免干扰,执行以下命令:
# 进入android目录 cd android # 清理gradle构建缓存 ./gradlew clean cleanBuildCache # 清理React Native的npm缓存 rm -rf ../node_modules/.cache
4. 确认版本兼容性
你当前使用的Gradle 5.1.1和Android Gradle插件3.4.1是兼容的,这个组合没问题,不需要调整版本。
额外提示
如果执行以上步骤后仍有问题,可以检查:
- 所有React Native第三方依赖的gradle配置是否适配Gradle 5.x,部分老依赖可能需要升级版本
- 确保
android/app/build.gradle里的配置没有类似的阶段嵌套错误
内容的提问来源于stack exchange,提问作者Prabhakaran8737
相关产品推荐
相关产品推荐

