由于java.lang.UnsupportedClassVersionError错误,flutter doctor --android-licenses无法正常工作。

17

我正在尝试接受flutter doctor --android-licenses,但是我遇到了这个错误:

Error: A JNI error has occurred, please check your installation and try again
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

看起来你已经安装了Java 8(类版本52),但这个Flutter版本需要Java 11(版本55),所以最简单的解决方案是在你的计算机上更新Java。 - bongo
我遇到了同样的问题,请帮我找到解决方案。 - Daniil
可能您的系统上安装了两个Java版本。 - Ajay Jha
使用以下命令即可解决问题:export JAVA_HOME=$(/usr/libexec/java_home -v"YOUR_VERSION") - Ajay Jha
9个回答

12

我正在使用MacOS Ventura操作系统。今天我安装了Android Studio。以下是我解决问题的方法:

  1. 下载了JDK19
  2. 按照此链接中提到的步骤进行操作
  3. 由于我正在运行Android Studio Electric Eel,因此打开终端并运行以下命令:cd /Applications/Android\ Studio.app/Contents/jbr
  4. 然后在ln -s ../jbr jdk之后运行此命令
  5. 最后,运行ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk
  6. 前往Finder -> 应用程序 -> Android Studio。右键单击Android Studio并选择“显示包内容”
  7. 在“内容”文件夹中创建新文件夹“jre”
  8. 将“jbr”文件夹中的内容复制到“jre”文件夹中
  9. 再次运行flutter doctor
  10. 运行flutter doctor --android-licenses

我成功同意了许可证。

所有步骤也在这里这里提到了。


请尝试使用 jenv 来管理 Java 版本。 - DarkNeuron
这个评论对我有用,但我只需要完成前两个步骤:安装JDK 19,然后将JAVA_HOME设置为$(/usr/libexec/java_home)。 - Kenneth Murerwa
这个评论对我有用,但我只需要完成前两个步骤:安装JDK 19,然后将JAVA_HOME设置为$(/usr/libexec/java_home)。 - undefined

7

更新

事实证明我的环境中安装了2个JDK,您可以使用以下命令进行检查:

/usr/libexec/java_home -V

所以在移除旧版JDK之后,问题得到了解决。


虽然这里是我的java --version输出,但我仍然遇到了相同的错误。

java 19.0.1 2022-10-18
Java(TM) SE Runtime Environment (build 19.0.1+10-21)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)

这是在我升级到Flutter 3.7.1之后发生的。


你是如何卸载旧版本的JDK的?使用了哪些命令? - Pathros
2
@pathros,从/usr/libexec/java_home -V命令中,您可以找到旧JDK版本的路径,然后使用sudo rm -rf <old-jdk-path>命令将其删除。 - pddthinh

7

我遇到了同样的错误,我没有指定JAVA_HOME环境变量,Flutter使用了我的1.8 Java。

对于macOS: 在终端中检查您的JAVA_HOME环境变量

printenv

如果环境不存在,则列出已安装的Java版本。
/usr/libexec/java_home -V

选择一个并执行。
export JAVA_HOME=$(/usr/libexec/java_home -v"YOUR_VERSION")

5

有一种简单的方法来解决这个问题。

  • 检查您在计算机上安装的Java版本。如果是版本8,则安装Android SDK命令行工具8.0并卸载最新版本。 输入图像描述

这是最简单的方法...谢谢,@Abhay!另外,如果您无法看到所有已安装的版本,请单击底部的“显示软件包详细信息”复选框。 - braingraze
那对我没用。我一直收到一个损坏的SDK错误,直到我手动下载并安装了JDK 20,并将JAVA_HOME设置为指向它。 - Dieter Donnert

3

尝试这个(适用于Windows)

  1. 取消选中Android SDK命令行工具(最新版本)
  2. 选中Android SDK命令行工具8.0
  3. 点击应用
  4. 在Windows中,前往 “C:\Users\USERNAME\AppData\Local\Android\Sdk\cmdline-tools”
    并将8.0文件夹重命名为“latest”
  5. 再次运行Flutter doctor。

解决方案非常好。为了更加方便地提供一些额外的信息:如果您在使用Android Studio,则可以转到更多操作-> SDK管理器->然后如果您勾选“隐藏过时的软件包”和“显示软件包详细信息”,那么您应该能够在命令行工具中找到SDK命令行工具8.0。 - Joginder Malik

1

问题似乎出现在安装的Android Studio版本为Android Studio Electric Eel

您需要做的是:

  1. 点击此链接下载并安装JDKhttps://www.oracle.com/java/technologies/downloads/#jdk19-mac
  2. 安装完成后,前往Finder -> Applications -> Android Studio。右键单击Android Studio并选择“显示包内容”
  3. 打开Contents文件夹并创建一个名为jre的新文件夹
  4. 有一个名为jbr的文件夹,打开它并将其中的文件夹复制并粘贴到第3步中新创建的文件夹(jre)中。
  5. 现在可以通过运行flutter doctor --android-licences来接受许可证。

1
您可以运行以下命令来查看是否安装了多个Java版本:
/usr/libexec/java_home -V

在我的电脑上有两个版本的Java:Java 8和Java 19。我按照官方 Java网站 的说明删除了旧版本:
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin

0
我找到了一个简单的解决方案来解决这个问题 - 直接更新JDK,然后重新安装Android Studio。起初我遇到了类似的问题,我使用的是Windows 10专业版,以下是我是如何解决的:
  • 检查Flutter的更新。在我的情况下,我使用的是3.10.6版本。
  • 验证并更新系统上安装的JDK。我从Java 8升级到了Java 20.0.2。
  • 将Android Studio更新到最新版本。我之前使用的是Electric Eel,现在更新到了Giraffe。
  • 重新下载SDK。我最初是在Electric Eel版本上下载的,更新后发现SDK不需要单独更新。这节省了我一些时间。在卸载Electric Eel时,我没有删除SDK缓存。
  • 再次运行flutter doctor -v命令,并通过flutter doctor --android-licenses接受Android许可证。

需要注意的是,Flutter只能与最新版本的JAVA一起使用,而这与您使用的Android Studio版本密切相关。


0
在我的情况下,Windows系统的原因是Flutter在sdk文件夹而不是Sdk文件夹下搜索Android SDK命令行工具。

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