颤振医生 --android-licenses 给出一个 java 错误

Posted

技术标签:

【中文标题】颤振医生 --android-licenses 给出一个 java 错误【英文标题】:flutter doctor --android-licenses gives a java error 【发布时间】:2021-11-07 10:14:41 【问题描述】:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more

我在运行 Flutter Doctor --android-licenses 时遇到上述错误。有谁知道为什么会发生这种情况以及我该如何解决?我已经在颤振控制台上运行它了。

【问题讨论】:

【参考方案1】:

我是 Mac 用户,我解决了这个问题。

这个回答也帮助 Windows 用户和 Linux 用户从用户的反馈中解决问题。

起初,这是我遇到的问题$ flutter doctor -v

以下命令不适用于我的情况。$ flutter doctor --android-licenses

解决此问题的方法是安装Android SDK 命令行工具。怎么做? 您只需要通过以下两个步骤即可。

安装:Android SDK 命令行工具

第 1 步。打开 SDK 管理器 顶部菜单 -> 工具 -> SDK 管理器

第 2 步。安装命令行工具

    展开外观和行为 展开系统设置 点击Android SDK 点击SDK工具标签 检查 Android SDK 命令行工具(最新) 点击应用按钮。 然后点击确定按钮完成安装。

继续签署 android 许可证。

Android Studio 安装完成后,您可以执行以下操作。$ flutter doctor --android-licenses 多次同意后,所有的android许可证都已签署。

再次由颤振医生检查。

$颤振医生-v

你可以看到 接受所有 Android 许可证。

恭喜你完成了这个任务!

【讨论】:

适用于 Windows。谢谢。 同样适用于 linux。 在 MacBook M1 上工作✅? 在 Pops!_OS 上工作 我希望更多的答案会有这样漂亮的图片和分步说明!谢谢【参考方案2】:

Android SDK Manager 安装 Android SDK 命令行工具 为我完成了这项工作。

    打开工具 > SDK管理器 从左侧选择,外观和行为 > 系统设置 > Android SDK 从顶部菜单中选择 SDK 工具 勾选Android SDK命令行工具并点击“应用”。

第 1 步的替代方法:WINDOWS:文件 > 设置 (Ctrl+Alt+S) / MAC:Android Studio > 偏好

此修复适用于 WindowsLinuxMac OS X


如果您在执行上述步骤后仍然遇到问题,可以尝试将系统升级到 JDK 8。升级到 JDK 8 的官方文档可在 here 获取。

【讨论】:

谢谢!这解决了问题,但为什么呢? Flutter Doctor 需要 SDK 命令行工具,为什么 Flutter 没有打包这些工具? “Android SDK 命令行工具”是一个 Android SDK 打包工具,随您的 Android Studio 一起提供(RE:developer.android.com/studio/command-line)。它不能包含在颤振安装中。 显然这在 MacBook 上是必需的,但在 Windows 上不需要。我没有在 windows 中设置命令行工具。 我在Windows环境下遇到了问题 与直觉相反,即使对于使用 VS Code 进行开发的人,此解决方案也解决了该问题。【参考方案3】:

我遇到了同样的问题,通过安装 android studio 的命令行工具解决了这个问题

点击文件,设置然后在搜索栏输入sdk并点击android sdk

然后点击 sdk tools,勾选android命令行工具框,点击apply允许下载。然后尝试在您的 cmd 上再次运行 flutter doctor --android-licenses,系统将提示您接受许可证

【讨论】:

在 Mac 上,设置窗口位于 Android Studio -> Preferences 下 为什么不接受这个答案?为我解决了。【参考方案4】:

您需要 JDK 8,因为所需文件已在更高版本中删除。

安装后,您可以使用在版本之间切换

sudo update-alternatives --config java

然后选择 JDK 8 选项。这还将显示您需要的 JDK 8 安装位置:

export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre/"
PATH=$PATH:$JAVA_HOME/bin

【讨论】:

【参考方案5】:

对我来说,在 Windows 10 上,答案就是删除 JAVA_HOME 环境变量。

如果您是 Java 开发人员,或者您依赖一些 Java 软件来完成您的工作,这可能不是一个好主意,但如果您是一个不在 Java 领域工作的开发人员并且您像我一样刚开始使用 Flutter,然后进入系统环境变量并杀死那个。 flutter doctor --android-licenses 在我这样做之后就像它应该的那样工作。

【讨论】:

【参考方案6】:

上述解决方案完全有效,但有一个解决方案我看到的次数比我预期的要少: sdkman => https://sdkman.io/

安装了这样的工具,改变java版本很快(以java 8为例):

❯ sdk install java 8.0.282.hs-adpt
❯ sdk use java 8.0.282.hs-adpt

【讨论】:

【参考方案7】:

首先你需要知道flutter在jdk 8上工作,所以如果你安装了其他版本你需要清除它们以完全删除其他版本

注意:这是根据我的情况 Ubuntu 20.04,这是根据我的情况,不保证为您工作

如果您有 jdk 11,要卸载使用这两个命令之一,具体取决于您已安装的命令,或者如果您不知道您的计算机上安装了哪一个命令,则可以同时运行这两个命令。

sudo apt purge openjdk-11-jre-headless

sudo apt purge openjdk-11-jre

如果是任何其他版本,请将 11 替换为该数字。 如果你使用默认的 jdk 然后卸载使用以下命令

sudo apt purge default-jre

为了确保我们删除与 java 相关的所有内容,请运行此命令

sudo apt auto remove

注意:您可以运行上述所有命令,以确保完全删除与 java 相关的所有内容

验证我们已经删除了所有运行

java -v

如果您看到以下错误或 java 版本,则 java 尚未卸载

Unrecognized option: --version
Error: Could not create the Java Virtual Machine. 
Error: A fatal exception has occurred. Program will exit.

但是如果你得到响应说没有找到java并且有java安装建议,这意味着java已经被卸载了

现在我们需要安装 jdk 8 运行这个命令

sudo apt install openjdk-8-jre

如果一切顺利,重新启动您的计算机并运行 flutter doctor 并按照说明接受许可证

问候,希望这篇文章对你有所帮助

【讨论】:

除了卸载现有的java版本还可以使用sudo apt purge openjdk*卸载任何现有的java版本,然后执行sudo apt autoremove清除和删除系统上所有java相关的组件【参考方案8】:

我的解决方案是: 我安装了 Android SDK Build-Tools、Android Emulator 和 Android SDK Platform-Tools。我在环境变量中有JAVA_HOME 变量。

所以我决定卸载 Android SDK Build-Tools、Android Emulator 和 Android SDK Platform-Tools 并重新安装它们。此外,我删除了JAVA_HOME 变量。在这些操作之后,我在终端中运行flutter doctor --android-licenses。不知何故,它成功了。

【讨论】:

【参考方案9】:

在 Linux 上

Android SDK 仅适用于 JDK 8,因此请卸载您当前的 JDK 版本。

通过命令并按tab自动完成,删除它显示的所有以openjdk-开头的东西

sudo apt remove openjdk-

现在安装JDK 8

sudo apt install openjdk-8-jdk

【讨论】:

【参考方案10】:

您似乎遇到了 JDK 异常,当您没有在系统变量上设置 JAVA_HOME 时会发生这种情况您几乎设置了 JDK 但错误您正在尝试使用错误的 JDK 运行 SDK 管理器(允许您接受 Android 许可证)。

如果是 JDK 9 或更高版本:

实际上,Android SDK Manager 仅适用于在 JDK 8 版本上编译的 Gradle 用于 Android 开发,因此,如果您已在系统变量上设置了最新的 JDK 版本,请考虑降级到 JDK 版本 8。

这个版本适合我:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

如果已安装 JDK 8

如果你手动将JDK文件夹解压到一个目录下,可能是你设置的“错误”。我的意思是:您将错误的方式指向 bin Java 文件夹,但它仍然有效。 您必须将 JAVA_HOME 设置为 JDK 的根目录,例如: 在JDK的压缩文件夹中,你要解压并指向解压后的文件夹中的系统变量,不直接在bin目录下,你必须将JAVA_HOME作为系统变量,并将bin文件夹声明为可执行文件。

例子:

Linux

在你的 shell 配置文件中:

export JAVA_HOME="/home/user/jdk1.8.0_261"
export PATH="$PATH:$JAVA_HOME/bin"

Windows

在您的环境变量管理器中:

设置一个名为 JAVA_HOME 的新系统变量

然后,编辑 PATH 变量并为其添加一个新寄存器:

%JAVA_HOME%\bin

实际上,我真的不知道如何在 MacOS 中管理 JDK,如果那是你的操作系统,对不起:(

希望对你有帮助!

【讨论】:

此解决方案在 Windows 10 上不适用于我 @user12166478 非常感谢这解决了我的问题,但我一直缺少的是我的变量系统名称是没有 bin 的 JAVA_HOME 解决了我的问题我将其更改为 %JAVA_HOME%\bin 并且一切正常喜欢魅力!欢呼 这解决了我在 Windows 10 上的问题,谢谢!值得注意的是,reference JDK 8 有效,它不需要更重的 Oracle 许可证。 Android Studio 附带 Java 11 似乎仍然很奇怪,但 SDK 工具仍然需要 Java 8。【参考方案11】:

我建议清除 android-studio-dir 和 android-sdk 设置,让 Flutter 自动检测它们的路径:这对我有用。

flutter config --android-studio-dir=""

flutter config --android-sdk=""

【讨论】:

@guccisekspir:它将如何检测,我要不要再次运行颤振医生?

以上是关于颤振医生 --android-licenses 给出一个 java 错误的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试运行颤振医生 --android-licenses 时出错

颤振医生 --android-licenses 显示错误消息

颤振医生 --android-licenses 给出一个 java 错误

颤振医生 --android-licenses 错误,如何解决这个问题?

如何修复“颤振医生 --android-licenses”java 错误?没有安卓工作室

颤振医生 --android-licenses 错误:无法找到或加载主类 Studio