PAYATHON 2026

如何在 Android Studio 中控制 Java 和 Gradle 版本?

排障赵师傅

结论

构建失败的原因是 Java 23 与项目使用的 Gradle 运行时不兼容。报错中的 Unsupported class file major version 67 对应 Java 23。

排查时需要区分以下三个版本:

  • flutter doctor --verbose 中的 C:\Program Files\Java\jdk-23\bin\java:Flutter 调用 Gradle 时使用的 Java。
  • settings.gradle 中的 com.android.application version "8.1.0":Android Gradle Plugin(AGP)版本,不是 Gradle 版本。
  • android/gradle/wrapper/gradle-wrapper.properties 中的 distributionUrl:项目实际使用的 Gradle 版本。

这个项目建议让 Flutter 和 Android Studio 统一使用 JDK 17。如果必须使用 Java 23,需要把 Gradle 升级到支持 Java 23 的版本,并确认 AGP、Kotlin 插件和当前 Flutter 版本同样兼容。只修改其中一个版本号可能会引发其他问题。

为什么会出现这个错误

flutter doctor --verbose 显示:

Java binary at: C:\Program Files\Java\jdk-23\bin\java
Java version Java(TM) SE Runtime Environment (build 23.0.1+11-39)

这说明通过 Flutter 命令行构建时,Gradle 进程使用的是 Java 23。

Android Studio 一栏显示的是 Java 21:

Java version OpenJDK Runtime Environment (build 21.0.3...)

这里通常指 Android Studio 自带或运行时使用的 JetBrains Runtime,并不代表 Flutter 命令行构建也在使用 Java 21。

下面这段配置:

id "com.android.application" version "8.1.0" apply false

指定的是 AGP 8.1.0。Gradle 版本需要在以下文件中查看:

android/gradle/wrapper/gradle-wrapper.properties

例如:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip

这行配置表示项目使用 Gradle 8.3。

推荐方案:统一使用 JDK 17

AGP 8.1.0 以 JDK 17 作为运行基线。对于已有的 Flutter 项目,改用 JDK 17 通常比升级整套 Android 构建工具风险更低。

安装 JDK 17 后执行:

flutter config --jdk-dir="C:\Program Files\Java\jdk-17"

请把路径替换成实际安装目录,然后检查配置:

flutter doctor --verbose

输出中的 Java binary at 应指向 JDK 17,例如:

Java binary at: C:\Program Files\Java\jdk-17\bin\java
Java version ... 17...

接着进入项目重新构建:

flutter clean
flutter pub get
flutter run

如果旧的 Gradle 守护进程仍在运行,可以先将其停止:

cd android
.\gradlew.bat --stop
cd ..
flutter run

在 Android Studio 中设置 Gradle JDK

Android Studio 发起 Gradle 同步和构建时使用的 JDK,可以在以下位置设置:

File
  > Settings
  > Build, Execution, Deployment
  > Build Tools
  > Gradle
  > Gradle JDK

在 Gradle JDK 中选择已经安装的 JDK 17。

这项设置主要影响 Android Studio 发起的 Gradle 操作。通过终端运行 flutter run 时,还需要使用 flutter config --jdk-dir 指定 Flutter 使用的 JDK。两处使用同一个 JDK,可以避免 IDE 和命令行的构建结果不一致。

如果设置页面中没有 Gradle 选项,可以在 Android Studio 里单独打开 Flutter 项目的 android 子目录,等 Gradle 项目加载完成后再查看。

在项目中固定 Gradle 使用的 Java

如需在项目级别指定 Java,可以在 android/gradle.properties 中加入:

org.gradle.java.home=C:/Program Files/Java/jdk-17

Windows 路径建议使用正斜杠,以免遇到反斜杠转义问题。

这项配置会把本机路径写入项目文件。如果项目由多人协作并提交到版本控制,不建议提交包含个人安装路径的 org.gradle.java.home。每位开发者可以分别配置 Android Studio 的 Gradle JDK,或者运行:

flutter config --jdk-dir="C:\Program Files\Java\jdk-17"

也可以把系统级 JAVA_HOME 指向 JDK 17:

JAVA_HOME=C:\Program Files\Java\jdk-17

不过,系统中的其他工具可能依赖不同的 Java 版本。使用 Flutter 专用的 flutter config --jdk-dir,通常更方便控制影响范围。

如何控制项目的 Gradle 版本

项目的 Gradle 版本由以下文件控制:

android/gradle/wrapper/gradle-wrapper.properties

例如:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip

要确认 Gradle 版本及其实际使用的 Java,可以在项目目录中执行:

cd android
.\gradlew.bat --version

查看以下内容:

Gradle ...
Launcher JVM: ...
Daemon JVM: ...

这些信息反映了该项目的 Gradle Wrapper 启动时所用的环境,比单独运行 java -version 更准确。

如果必须保留 Java 23

Gradle 从 8.10 开始支持以 Java 23 作为运行 JVM。可以把 Wrapper 改为兼容版本,例如:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip

如果项目仍使用 AGP 8.1.0,不建议只修改这一项。Gradle、AGP、Kotlin Gradle Plugin 和 Flutter 工具链都有各自的版本兼容要求。即使 Gradle 可以在 Java 23 上运行,旧版 AGP 或 Flutter Gradle 插件仍可能报错。

确实需要升级时,可以按以下顺序处理:

  1. 根据当前 Flutter 版本创建一个临时新项目。
  2. 对比新旧项目的 AGP、Kotlin 和 Gradle Wrapper 配置。
  3. 检查这些版本对 Java 23 的兼容要求。
  4. 配套升级构建配置,避免只改 distributionUrl。
  5. 运行 .\gradlew.bat --version 和 flutter build apk 验证结果。

如果没有必须使用 Java 23 的依赖,直接改用 JDK 17 会更简单。

为什么重装 Android Studio 没有解决

当前 Flutter 使用的是:

C:\Program Files\Java\jdk-23\bin\java

这个路径可能来自 Flutter 配置、JAVA_HOME、系统 PATH 或项目中的 org.gradle.java.home。重装 Android Studio 不会自动清除这些配置,所以 Flutter 仍可能继续调用原来的 JDK 23。

可以运行以下命令,查看 Flutter 是否保存过 JDK 路径:

flutter config --list

同时检查:

echo $env:JAVA_HOME
where.exe java

最后分别验证 Flutter 和 Gradle 使用的 Java:

flutter doctor --verbose
cd android
.\gradlew.bat --version

两处都显示预期的 JDK 后,Flutter 和 Gradle 的 Java 环境才算统一。

备注:内容仅供参考。