在 MacOS 上执行 'flutter doctor --android-licenses' 命令时出现 UnsupportedClassVersionError。

36

系统设置:

  • MacOS Ventura

  • Android Studio Electric Eel

我正在我的英特尔 Mac 上安装 Flutter。

运行 flutter doctor 后,结果如下:

[✓] Flutter (Channel stable, 3.7.0, on macOS 13.2 22D49 darwin-x64, locale
    en-MX)
[!] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for
      more details.
[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.1)
[✓] VS Code (version 1.74.3)
[✓] Connected device (2 available)
[✓] HTTP Host Availability

运行flutter doctor --android-licenses之后,结果如下:

Exception in thread "main" java.lang.UnsupportedClassVersionError: 
com/android/prefs/AndroidLocationsProvider 
has been compiled by a more recent version of the Java Runtime (class file version 55.0),
this version of the Java Runtime only recognizes class file versions up to 52.0

我在2023年1月从这里下载了Mac版的Java安装包。

有人遇到过同样的错误吗?你是如何解决的?


我刚刚留了一个答案,请告诉我。我正在使用Mac。 - Tomas Ward
9个回答

38

我将尝试给出更加详细的解决方案:

  1. 此链接安装最新版本的Java SDK。
  2. 选择Java 19和x64 DMG Installer(这对我有效)。
  3. 按照安装指示进行操作。
  4. [可选]如有必要,按照这些说明(mac)设置您的JAVA_HOME路径。
  5. 运行flutter doctor --android-licenses来测试安装。

3
这对我有效,但是在使用搭载 M1 芯片的最新 Mac 电脑时需要使用 Arm 64 DMG Installer - JD_dev
这对我有用!只需要在Linux上从Java 8更新到Java 19即可。我使用了sdkman,它同样有效:sdk install java 19.0.2-oracle - jxc
这个 https://github.com/flutter/flutter/issues/120388#issuecomment-1425196389 对我有用。 - lauWM
1
哦,伙计,你救了我的一天,谢谢。 - angwrk
1
哦,兄弟,你救了我的一天,谢谢你。 - angwrk
1
哦,伙计,你救了我的一天,谢谢你。 - undefined

13

Windows操作系统

  1. 下载并安装最新的JDK,可以从[Java SE Development Kit 19.0.2][1]获取。

  2. 设置一个系统变量:

    变量名:JAVA_HOME

    变量值:C:\Program Files\Java\jdk-19

  3. 添加一个路径变量名为%JAVA_HOME%\bin

  4. 现在运行flutter doctor

希望这能解决问题。 [1]: https://www.oracle.com/java/technologies/downloads/#jdk19-windows


1
它适用于JDK 17。 - user18473608
1
使用JDK 21进行了工作(即当前最新版本)。谢谢 - Oluwaseyitan Baderinwa

6

虽然通过Oracle下载安装JDK可以工作,但在MacOS上确保您拥有正确版本的最佳方法是使用Homebrew安装JDK(如果没有Homebrew,请按照安装说明:https://docs.brew.sh/Installation)。此外,通过这种方式保持JDK更新也更容易。

brew install openjdk

如果您安装了其他OpenJDK版本,则可能需要链接正确的版本:
brew link --force openjdk@19

要将其设置为您的 shell 的默认值,请将以下行添加到~/.zshrc:
export JAVA_HOME="/opt/homebrew/opt/openjdk"
export PATH="$JAVA_HOME/bin:$PATH"

然后:

source ~/.zshrc

您只需要执行一次该操作。

然后重新运行:flutter doctor --android-licenses


1
此外,关于安装最新的SDK,Tomas Ward 所说的,在Windows上我找到了this来将JAVA_HOME添加到路径中。希望能有所帮助。

0

这些答案都对我没用。所以我最终决定转而使用asdf。它值得,将来会为你省去很多麻烦。

  1. asdf install java adoptopenjdk-19.0.0+36
  2. asdf global java adoptopenjdk-19.0.0+36
  3. 按照this comment的建议,将以下内容添加到您的 .zshrc 文件中
    # set JAVA_HOME on every change directory
    function asdf_update_java_home {
      asdf current java 2>&1 > /dev/null
      if [[ "$?" -eq 0 ]]
      then
          export JAVA_HOME=$(asdf where java)
      fi
    }
    
    precmd() { asdf_update_java_home; }
    # end set JAVA_HOME
    
  4. exec zsh # 重新加载当前终端以使用更改后的 .zshrc 文件
  5. echo $JAVA_HOME 应该显示为 asdf 目录一
  6. flutter doctor --android-licenses

机器详情

  • Macbook Pro M1
  • ZSH 作为我的 shell

0

找到了解决方案。

我需要从此处更新JDK。


1
你能否编辑你的回答以指定你升级的起始和目标版本吗?对于那些遇到类似问题的人来说,这将使你的解决方案更有价值,因为他们可以更好地确定是否遇到了相同的问题,或者你的解决方案仍然适用于他们。 - Jeremy Caney

0

我已经卸载了JRE Java运行环境,现在它可以正常工作了。


0

是的,@Tomas Ward的解决方案对我有用。但是让我为Windows用户添加更多细节。

  1. 如@Tomas所说,我们需要首先下载Java SE Development Kit 19.0.2。首先点击此链接下载Java SE Development Kit 19.0.2。
  2. 然后下载x64 Installerx64 MSI Installer,然后在您的系统中安装Java SE Development Kit。
  3. 现在,您需要将此新的Java SE Development Kit路径设置或更新到您的JAVA_HOME路径中。

当您设置/更新JAVA_HOME路径时,您的错误将得到解决。


0

我测试了一个更高版本(jdk17),并成功执行了它。但我认为这不是一个好主意。让我们等待官方解决方案。


你好,感谢加入Stack Overflow。请不要留下“答案”,除非它解决了问题。类似这样的简短信息应该作为评论留在问题下面。 - John Leuenhagen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接