Expo构建Gradlew报错:groovy.json异常及build.gradle配置疑问
问题根源与解决建议
问题根源
- rootDir空指针异常:EAS云端构建环境中,
rootDir的初始化逻辑和本地不一致,导致rootDir.getAbsoluteFile().getParentFile()返回null,调用getAbsolutePath()时触发空指针错误——这是引发后续所有问题的核心原因。 - compileSdkVersion未指定的假象:由于第一个空指针错误中断了Gradle脚本的执行,后续读取
rootProject.ext.compileSdkVersion的逻辑未能正常运行,因此抛出“未指定compileSdkVersion”的错误,并非真的没有配置。
解决步骤
1. 修复rootProject路径引用
将app/build.gradle中获取项目根路径的代码替换为更可靠的方式:
// 替换原有的rootDir获取逻辑 def projectRoot = rootProject.projectDir.getAbsolutePath() // 或者用当前模块目录的父目录(效果一致) // def projectRoot = projectDir.parentFile.getAbsolutePath()
rootProject.projectDir会直接指向项目根目录,避免rootDir在云端环境中未正确初始化的问题。
2. 确认根build.gradle的ext变量配置
检查项目根目录下的build.gradle文件,确保已正确定义所需的ext变量,示例如下:
buildscript { ext { compileSdkVersion = 33 ndkVersion = "25.1.8937393" minSdkVersion = 21 targetSdkVersion = 33 } // 其他buildscript配置... }
如果根build.gradle中缺失这些变量,app模块的引用会失效,导致编译错误。
3. 清理本地与云端缓存
- 本地执行清理预构建文件:
npx expo prebuild --clean - 清除EAS云端构建缓存:
eas build --clear-cache
4. 检查eas.json配置冲突
打开项目根目录的eas.json,确认Android构建配置中是否手动指定了compileSdkVersion等参数,如果有,确保其值与根build.gradle中的ext变量一致,或者直接移除该配置,让Gradle使用本地脚本定义的值。
5. 本地验证构建
进入项目的android目录,执行本地构建测试,确认配置无问题:
./gradlew clean build
如果本地构建成功,再重新执行eas build --platform all即可。
内容的提问来源于stack exchange,提问作者retro_coder
相关产品推荐
相关产品推荐

