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

Expo构建Gradlew报错:groovy.json异常及build.gradle配置疑问

问题根源与解决建议

问题根源

  1. rootDir空指针异常:EAS云端构建环境中,rootDir的初始化逻辑和本地不一致,导致rootDir.getAbsoluteFile().getParentFile()返回null,调用getAbsolutePath()时触发空指针错误——这是引发后续所有问题的核心原因。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:13:10