Android Studio构建报错Unsupported class file major version 65与Minimum supported Gradle version的解决方法(AGP、Gradle与JDK版本对应排查)

把Android Studio升到新版再打开一个3年前的项目,Sync几乎必然红。日志里同时甩出两条:Unsupported class file major version 65,以及Minimum supported Gradle version is 9.3.1. Current version is 8.9。看着吓人,其实指向同一件事:AGP、Gradle、JDK这三样东西的版本没配上。

两条报错串各说了什么

出现Unsupported class file major version的意思是,Gradle跑在一个比它支持的更高的JDK上,读不懂class文件。数字对应JDK版本:61是Java 17、65是Java 21、66是Java 22、68是Java 24。所以看到65直接去看是不是装了JDK 21。

另一条Minimum supported Gradle version是AGP在挑Gradle的版本,跟JDK无关,改distributionUrl就能解决。

FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Unsupported class file major version 65

Minimum supported Gradle version is 9.3.1. Current version is 8.9.
Your build is currently configured to use Java 21.0.4 and Gradle 8.8.

先确认三个地方各是什么版本

别猜,直接跑命令。这一行输出里同时有Gradle版本和它实际用的JVM:

./gradlew --version
# 输出:
# Gradle 8.9
# JVM: 17.0.11 (JetBrains s.r.o. 17.0.11+0)

这里有个容易踩的地方:IDE里的Gradle JDK(Settings → Build Tools → Gradle → Gradle JDK)和终端的JAVA_HOME不是一回事。见过命令行能编过、IDE里一直报红的,就是两边指向了不同的JDK。gradle.properties里写了org.gradle.java.home的话,它的优先级最高,会盖掉IDE设置。

AGP挑Gradle的版本

AGP 8.7、8.9、8.13、9.1,这几个版本要求的Gradle下限分别是8.9、8.11.1、8.13、9.3.1,只高不低,反过来用低版本Gradle配高版本AGP必报Minimum supported Gradle version。同时IDE自己也有范围限制:Android Studio 2025.1.1、2025.3.3、2026.1.2,能支持的AGP上限分别是8.11、9.1、9.3,超出范围的写法新版IDE会直接说项目不受支持。

# gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip

# 根目录 build.gradle 里的插件版本
classpath 'com.android.tools.build:gradle:9.1.0'

用新版项目模板的话,这两处在libs.versions.toml里改,位置不一样但道理相同。改完记得把.idea和build目录之外的缓存清一下,否则还在跑老daemon。

JDK这一侧的限制

AGP 8.x起JDK 17是硬门槛,AGP 7.x则停在JDK 11,用JDK 17去编AGP 7.4的项目照样报class file major version,只是数字反过来变成61.

Gradle自己也有一张支持表:Java 21要Gradle 8.5以上,Java 23要8.10以上,Java 24要8.14以上。同一台机器装了多个JDK时最容易出问题,JAVA_HOME指向刚装的JDK 21,项目里的Gradle却停在8.4,一跑就红。

实测下来最省事的组合是:让IDE自带的JDK 17(JetBrains Runtime 17.0.11那一套)承担构建,日常项目别追着升级到JDK 21,除非把Gradle与AGP一起升上去。

改完之后复查

./gradlew clean
./gradlew assembleDebug --info
# 再看一眼版本是否真的换了
./gradlew --version

依赖拉不下来的另一类报错

版本都对上了还会卡在Could not resolve com.android.tools.build:gradle:9.1.0,或者Could not GET 'https://dl.google.com/dl/android/maven2/...'。这类是网络问题,报错串里通常跟着Connect timed out或PKIX path building failed。

# settings.gradle 里加国内仓库,位置放在google()之前
repositories {
    maven { url 'https://maven.aliyun.com/repository/google' }
    maven { url 'https://maven.aliyun.com/repository/public' }
    google()
    mavenCentral()
}
# 走公司代理时写在 gradle.properties
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8888
systemProp.https.nonProxyHosts=localhost|127.0.0.1

证书报错那条要把公司根证书导进JDK的cacerts,用keytool -importcert -keystore $JAVA_HOME/lib/security/cacerts,默认口令changeit。gradle发行包本身下载慢的话,手动下好zip丢进~/.gradle/wrapper/dists/对应目录,比反复重试快。

缓存残留的干扰

版本改完还报同样的错,八成是daemon没退。先./gradlew --stop停守护进程,再删~/.gradle/caches/modules-2里那个出问题模块的目录,必要时File → Invalidate Caches重启IDE。当初在一台磁盘只剩几百兆的机器上还碰过GMD(Gradle管理设备)任务失败,新版AGP会直接给出磁盘空间不足的提示,看清楚再动手。

数据截至2026年9月,对应关系取自Android Gradle插件官方版本说明。