Skip to content

Gradle构建失败:Unsupported class file major version 65错误

核心问题
Java版本与Gradle不兼容引发的构建失败,通常发生在升级到Java 17或更高版本后

问题描述

开发者在将Java环境升级至Java 17并更新Android Studio到Ladybug版本后,执行Flutter项目构建时遇到以下关键错误:

log
FAILURE: Build failed with an exception.

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

典型表现特征:

  • 错误提示Unsupported class file major version 65(Java 21对应的版本号)
  • 发生在settings.gradle或构建脚本初始化阶段
  • flutter clean和重建项目无法解决问题
  • 已确认JAVA_HOME指向Java 17安装路径
  • 已在build.gradle中配置Java 17兼容性:
    gradle
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = '17'
    }

根据Java版本与class文件版本的对应关系:

Java版本Class文件主版本号
Java 1761
Java 1862
Java 1963
Java 2064
Java 2165

错误提示的版本号65明确指向Java 21,这表示实际使用的JDK版本高于Java 17。

根本原因分析

环境版本冲突

该问题由多级版本不匹配导致:

  1. Gradle版本过旧(<7.5)不支持Java 17+
  2. Android Gradle插件(AGP)未同步更新
  3. 实际JDK版本与配置不符
  4. Flutter使用的Java路径未正确设置

关键矛盾点:

  • 项目配置要求Java 17但Gradle版本过低无法处理高版本Java
  • Java环境实际为Java 21但项目设置为Java 17
  • Flutter CLI使用的Java路径与系统JAVA_HOME不一致

完整解决方案

步骤1:确认真实Java版本

bash
# 检查系统默认Java版本
java -version

# 检查Flutter使用的Java版本
flutter doctor -v

注意

Flutter可能使用内置的JDK路径而非系统变量JAVA_HOME

步骤2:强制设置Flutter的JDK路径

bash
# 更新Flutter配置指向Java 17安装目录
flutter config --jdk-dir <path-to-java-sdk-17-home-directory>

# 示例路径:
# Windows: C:/Program Files/Java/jdk-17.0.7
# macOS: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

步骤3:升级Gradle版本

修改android/gradle/wrapper/gradle-wrapper.properties

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

版本选择指南

  • Java 17最低要求:Gradle 7.5+
  • 推荐版本:8.10.2(稳定兼容当前Flutter项目)

步骤4:更新Android Gradle插件

修改android/settings.gradle

gradle
plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "8.0.0" apply false
    id "org.jetbrains.kotlin.android" version "1.8.22" apply false
}

步骤5:重构build.gradle配置

更新android/app/build.gradle

gradle
android {
    namespace "com.example.app"
    compileSdk flutter.compileSdkVersion
    
    // 设置明确的ndk版本
    ndkVersion = "27.0.12077973"

    compileOptions {
        coreLibraryDesugaringEnabled true  // 启用脱糖支持
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()
    }
}

dependencies {
    // 添加脱糖库(若启用coreLibraryDesugaringEnabled)
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
    
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22"
}

步骤6:清理构建缓存

bash
# 删除用户级gradle缓存
rm -rf ~/.gradle

# 清理项目构建文件
cd android
./gradlew clean

其他潜在解决方案

渐进式升级方案

当项目包含历史遗留代码时:

  1. 安装Android Studio Koala(2024.1)
  2. 使用AGP升级助手依次升级:
    • AGP 7.1.2 → 7.4.2
    • AGP 7.4.2 → 8.0.0+
  3. 逐步修正兼容性警告
bash
# Android目录添加.gitignore
echo "**/.cxx" >> android/.gitignore

关键配置要点总结

配置项推荐值注意事项
Gradle版本8.10.2通过wrapper.properties
AGP版本8.0.0+在settings.gradle设置
Java兼容性VERSION_17需配合kotlinOptions
NDK版本27.0.12077973明确指定避免隐式选择
脱糖支持启用支持Java新API的向后兼容

::: success 验证成功标准 正确实施上述步骤后:

  1. flutter build apk应成功完成
  2. 控制台不再出现Unsupported class file major version错误
  3. Android Studio无Gradle同步错误提示 :::