gradle jvm与项目sdk是两套独立配置:项目sdk控制代码编辑和编译,而gradle构建进程依赖单独配置的gradle jvm(需在settings→gradle中手动指定jdk 17);命令行构建还受java_home和gradle-wrapper.properties中distributionurl约束,三者必须协同匹配jdk 17及对应gradle 8.0+版本。

Gradle JVM 和项目 SDK 是两套独立配置
很多人改完 Android Studio 里的 Project SDK(比如从 JDK 11 切到 JDK 17),发现构建还是报 Unsupported class file major version 61 或 Could not determine java version from '17.0.2'。根本原因在于:IDE 的项目 SDK 只控制代码编辑、编译和运行时的 Java 版本,而 Gradle 构建过程本身是另一个 Java 进程,它用的是自己指定的 JVM,和项目 SDK 完全无关。
Gradle JVM 配置位置容易被忽略
Android Studio 默认不会自动把 Gradle JVM 同步成你刚设好的 Project SDK。它有自己独立的设置入口,而且藏得比较深:
- 打开 File → Settings → Build, Execution, Deployment → Build Tools → Gradle(macOS 是 Android Studio → Preferences)
- 找到
Gradle JVM下拉框,它默认可能显示bundled (JetBrains Runtime)或某个旧 JDK 路径 - 必须手动选中你刚配好的 JDK 17(比如
17.0.6或具体路径),不能只依赖“bundled”或留空 - 改完后要重启 IDE 或点击
Reload project,否则 Gradle Daemon 不会重新加载新 JVM
命令行构建时 JAVA_HOME 会覆盖 IDE 设置
如果你在终端执行 ./gradlew assembleDebug,Gradle 会优先读取系统环境变量 JAVA_HOME,而不是 IDE 里设的 Gradle JVM。这时候即使 IDE 设置完全正确,命令行仍可能用错 JDK:
- 运行
echo $JAVA_HOME确认当前值是否指向 JDK 17 - 如果指向 JDK 11 或未设置,Gradle 就会 fallback 到系统默认 Java,大概率触发版本错误
- 临时修复可加参数:
JAVA_HOME=/path/to/jdk-17 ./gradlew assembleDebug - 长期建议在 shell 配置文件(如
~/.zshrc)里固定JAVA_HOME
Gradle Wrapper 自带 distributionUrl 也得对上
就算 IDE 和环境变量都设对了,gradle/wrapper/gradle-wrapper.properties 里的 distributionUrl 如果指向一个不支持 JDK 17 的旧 Gradle 版本(比如 gradle-7.4-bin.zip),照样会失败:
- AGP 8.0+ 强制要求 Gradle ≥ 8.0,而 Gradle 8.0 是第一个正式支持 JDK 17 的稳定版
- 检查
distributionUrl是否匹配你的 JDK:JDK 17 对应 Gradle 8.0 及以上,不是 7.x - 别只改 AGP 版本(
com.android.tools.build:gradle),忘了同步更新 wrapper - 改完要删掉
.gradle/目录下旧的 daemon 缓存,否则可能复用旧进程











