Skip to content

解决Flutter的Android许可证错误(UnsupportedClassVersionError)

问题描述

在使用Flutter开发过程中执行flutter doctor --android-licenses时,出现以下错误提示:

java.lang.UnsupportedClassVersionError: 
com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled 
by a more recent version of the Java Runtime (class file version 61.0), 
this version of the Java Runtime only recognizes class file versions up to 55.0

这个错误表明:

  1. 您当前的Java版本太低(低于17)
  2. Android SDK管理工具需要使用Java 17+运行
  3. 即使安装了新版本Java,环境变量可能未正确配置

解决方案

方法一:使用兼容的Android SDK命令行工具(推荐)

兼容性

此方法适合Java版本无法升级的情况

  1. 安装旧版命令行工具

    • 打开Android Studio → SDK Manager → SDK Tools
    • 取消勾选"Android SDK Command-line Tools (latest)"
    • 勾选"Android SDK Command-line Tools 8.0"
    bash
    # Linux系统打开SDK Manager的命令
    flutter config --android-studio-dir=/path/to/android-studio
    flutter doctor --android-licenses
  2. 重命名工具文件夹

    bash
    # 进入Android SDK目录
    cd ~/Android/Sdk/cmdline-tools
    
    # 重命名文件夹(需确保8.0存在)
    mv 8.0 latest.bak  # 备份原最新版
    mv 8.0 latest       # 将8.0设为新latest
  3. 重新检查许可证

    bash
    flutter doctor --android-licenses

方法二:升级Java版本并配置环境变量

注意

确保完全卸载旧版Java避免冲突

  1. 安装OpenJDK 17

    bash
    sudo apt update
    sudo apt install openjdk-17-jdk
  2. 设置环境变量

    bash
    # 打开配置文件
    nano ~/.bashrc   # 或 ~/.zshrc
    
    # 添加环境配置
    export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH
    
    # 使配置生效
    source ~/.bashrc
  3. 验证Java版本

    bash
    java -version
    # 应显示类似:openjdk version "17.0.8" 2023-07-18
  4. 重新接受许可证

    bash
    flutter doctor --android-licenses

方法三:完全重装Java环境

当上述方法无效时执行:

  1. 卸载所有Java版本

    bash
    sudo apt purge openjdk-* 
    sudo apt autoremove
  2. 重新安装最新JDK

    bash
    sudo apt install openjdk-17-jdk
  3. 确认版本路径

    bash
    sudo update-alternatives --config java

附加建议

重要

安装完成后务必验证环境变量

永久设置JAVA_HOME:

bash
echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" | tee -a ~/.profile
source ~/.profile

多版本Java管理工具:

bash
# 安装管理工具
sudo apt install jenv

# 添加Java路径
jenv add /usr/lib/jvm/java-17-openjdk-amd64

检查Flutter环境:

bash
# 完整验证环境
flutter doctor -v

# 常见修复提示:
# 如果提示缺失命令工具
sdkmanager "cmdline-tools;latest"

总结

解决方案适用场景优势
降级命令行工具无法升级Java环境无需系统级变更
升级Java并设环境变量需长期使用高版本Java一劳永逸
完全重装Java环境混乱或存在多个Java版本彻底解决依赖冲突

多数情况下,安装Android SDK Command-line Tools 8.0并配置为最新版(方案一)能快速解决问题。若仍需最新SDK功能,建议采用方案二安装Java 17+并配置环境变量。