Skip to content

Gradle Java版本不兼容:解决"Could not open settings generic class cache"错误

问题描述

在Flutter或Android开发过程中,经常会遇到以下错误:

FAILURE: Build failed with an exception.

* What went wrong:
Could not open settings generic class cache for settings file 'C:\Users\loran\ASProjects\xylophone-flutter\android\settings.gradle'

BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 60

这个错误的核心原因是Java版本与Gradle版本不兼容。当系统中安装的Java版本过高或过低,与项目使用的Gradle版本不匹配时,就会出现此类问题。

根本原因分析

这个错误通常出现在以下情况:

  1. 系统安装了较新版本的Java(如Java 16+),但Gradle版本过旧不支持
  2. Android Studio自带的Java版本与系统环境变量中的Java版本不一致
  3. 项目配置的Gradle版本与当前Java环境不兼容

"Unsupported class file major version 60"表示Gradle无法处理Java 16(major version 60对应Java 16)生成的字节码。

解决方案

根据问题的不同场景,有以下几种解决方案:

方案一:检查并统一Java版本(推荐)

这是最根本的解决方法,确保系统中所有Java环境一致。

bash
# 检查当前系统Java版本
java -version

# 检查Java安装路径
which java  # Linux/Mac
where java  # Windows
bash
# 设置JAVA_HOME环境变量(Windows)
setx JAVA_HOME "C:\Program Files\Android\Android Studio\jbr"

# Linux/Mac
export JAVA_HOME="/path/to/your/java"

方案二:配置项目使用特定Java版本

在项目级别的gradle.properties文件中指定Java home路径:

properties
# 指定项目使用的Java版本
org.gradle.java.home=C:/Program Files/Java/jdk-17.0.12.7-hotspot
# 或使用Android Studio自带的Java
org.gradle.java.home=C:/Program Files/Android/Android Studio/jbr

TIP

推荐使用Java 17,它是目前Android开发最稳定的选择,兼容大多数Gradle版本。

方案三:调整Gradle版本以匹配Java版本

根据你安装的Java版本,选择兼容的Gradle版本:

Gradle与Java版本兼容性表
Java版本支持运行的Gradle版本支持编译的Gradle版本
82.0+N/A
94.3+N/A
104.7+N/A
115.0+N/A
125.4+N/A
136.0+N/A
146.3+N/A
156.7+6.7+
167.0+7.0+
177.3+7.3+
187.5+7.5+
197.6+7.6+
208.1+8.3+
218.4+8.5+

修改android/gradle/wrapper/gradle-wrapper.properties文件:

properties
# 根据你的Java版本选择合适的Gradle版本
distributionUrl=https://services.gradle.org/distributions/gradle-7.6-all.zip
# 或
distributionUrl=https://services.gradle.org/distributions/gradle-8.4-all.zip

同时更新android/build.gradle中的Gradle插件版本:

groovy
dependencies {
    classpath 'com.android.tools.build:gradle:7.4.2' // 与Gradle版本匹配
}

方案四:修复Android Studio Java配置

对于新版Android Studio,可能需要手动创建jre文件夹:

  1. 进入Android Studio安装目录
  2. 复制jbr文件夹
  3. 粘贴并重命名为jre
  4. 设置JAVA_HOME指向这个新路径

WARNING

确保Android Studio和系统环境使用相同的Java版本,避免版本冲突。

完整解决流程

以下是推荐的完整解决步骤:

  1. 检查当前Java版本java -version
  2. 确认Android Studio使用的Java版本:查看Android Studio/jbr/release文件
  3. 统一Java环境
    • 要么将系统Java降级到与Android Studio一致
    • 要么修改Android Studio配置使用系统Java版本
  4. 验证Gradle兼容性:根据上表确保Gradle版本与Java版本匹配
  5. 清理并重建项目
    bash
    flutter clean
    cd android && ./gradlew clean
    flutter pub get

预防措施

为了避免未来再次出现此类问题:

  1. 使用Java版本管理工具(如jenv、SDKMAN)
  2. 在项目中明确指定Java版本(通过gradle.properties)
  3. 定期检查Gradle和Java的兼容性表
  4. 避免随意升级Java版本而不更新Gradle配置

常见问题答疑

Q: 我应该使用哪个Java版本? A: 目前推荐使用Java 17,它在稳定性和兼容性方面表现最好。

Q: 修改后还是报错怎么办? A: 尝试删除gradle缓存目录(~/.gradle/caches)并重新同步项目。

Q: Flutter对Java版本有要求吗? A: 官方推荐使用Java 11或17,不再支持Java 8及以下版本。

通过遵循上述解决方案,你应该能够成功解决"Could not open settings generic class cache"错误,并顺利进行Android开发工作。