问题现象
在 Android Studio 中 Build / Sync 报错:
1 | Could not compile initialization script '.../ijMapper1.gradle'. |
从命令行直接执行 ./gradlew tasks 完全正常,只有通过 Android Studio 触发构建时才报错。
根本原因
这是一个 Android Studio 版本 × Gradle 版本 的二进制不兼容问题,与项目代码无关。
| 层级 | 说明 |
|---|---|
| class file major version 65 | Java 21 编译产物的标识(Java 11 = 55,Java 17 = 61,Java 21 = 65) |
| Android Studio Koala(2024.1)及更新版本 | 自带 JDK 21,其 Tooling Extension JARs(如 GradleOpenTelemetry、GradleModelFetchAction)使用 Java 21 编译 |
| Gradle 7.4.2 内置 Groovy 3.0.9 / ASM 9.1 | ASM 9.1 最高只能解析 Java 17(class version 61)的 class 文件,无法读取 Java 21 产物 |
Android Studio 每次构建会向 Gradle 注入一个临时 init script(ijMapper1.gradle),Groovy 编译这个脚本时需要解析 classpath 上的 Android Studio Tooling JARs。新版 AS 的这些 JAR 是 Java 21 编译的,Gradle 7.x 内置的 ASM 读不了,直接崩溃。
命令行不受影响的原因:直接执行 ./gradlew 不经过 Android Studio 的 Tooling API,不会注入这个 init script。
解决方案
✅ 方案一:在 Android Studio 中指定 Gradle JDK 为 JDK 11(本文实际采用,推荐)
修改项目的 .idea/gradle.xml,将 gradleJvm 改为 JDK 11 的路径(路径需已在 Android Studio 的 JDK Table 中注册):
1 | <option name="gradleJvm" |
注意:这里必须使用
$USER_HOME$变量形式,而非绝对路径,否则 Android Studio 在jdk.table.xml中匹配不到对应条目,报 “Undefined jdk.table.xml entry” 错误。
配置完成后,Android Studio 会:
- 用 JDK 11 启动 Gradle daemon
- 选用与 JDK 11 兼容的 Tooling Extension JARs(class version ≤ 61),避免 ASM 解析失败
此方案不影响其他同事(.idea/gradle.xml 中的路径是各自机器上注册过的条目,不同机器只要都注册了 JDK 11 即可)。
方案二:升级 Gradle 到 8.4+(需团队协调)
Gradle 8.x 采用 Groovy 4.x / ASM 9.5+,原生支持 Java 21 class 文件,从根本上消除兼容问题。
1 | # gradle/wrapper/gradle-wrapper.properties |
代价:AGP 7.x 不兼容 Gradle 8.x,需同步将 AGP 升级到 8.x,改动较大,需要团队统一升级。
方案三:降级 Android Studio(临时方案)
降回 Android Studio Jellyfish(2023.3.1) 或更早版本,其 Tooling Extension JARs 基于 Java 17 编译(class version 61),Gradle 7.x 的 ASM 9.1 可以正常解析。
排查思路总结
遇到此类问题时,快速定位的关键线索:
- 只在 IDE 内报错,命令行正常 → 问题出在 IDE 注入的 init script,而非项目构建脚本本身
Unsupported class file major version 65→ 某个依赖/工具 JAR 用 Java 21 编译,运行时的 ASM/JVM 版本不支持- 错误堆栈含
com.intellij.gradle.toolingExtension→ 确认是 Android Studio Tooling Extension 和 Gradle 的版本兼容性问题
兼容性速查表
| Android Studio 版本 | 内置 JDK | Tooling JAR class version | 最低兼容 Gradle |
|---|---|---|---|
| Jellyfish 2023.3.1 及以前 | JDK 17 | 61(Java 17) | Gradle 7.x 可用 |
| Koala 2024.1.1 及以后 | JDK 21 | 65(Java 21) | 需 Gradle 8.4+ 或手动指定 Gradle JDK 为 17/11 |