308
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

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

4

11 回答 11

701

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

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

步骤 #1 的替代方法:WINDOWS:文件>设置(Ctrl+Alt+S) / MAC:Android Studio >首选项

此修复适用于WindowsLinuxMac OS X。


在此处输入图像描述

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

于 2020-10-01T20:31:14.520 回答
157

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

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

起初,这是我遇到的问题
$ flutter doctor -v 在此处输入图像描述

以下命令不适用于我的情况。
$颤振医生--android-licenses 在此处输入图像描述

解决这个问题的方法是安装
Android SDK Command-line Tools。如何?
您只需要通过以下两个步骤来完成。

安装:Android SDK 命令行工具

Step 1. 打开 SDK Manager
Top Menu -> Tools -> SDK Manager 在此处输入图像描述

步骤 2. 安装命令行工具

  1. 展开外观和行为
  2. 展开系统设置
  3. 点击Android SDK
  4. 单击SDK 工具的选项卡
  5. 检查Android SDK 命令行工具(最新)
  6. 单击应用按钮。 在此处输入图像描述 然后单击确定按钮完成安装。

继续签署安卓许可证。

Android Studio 完成安装后,您可以执行以下操作。
$ flutter doctor --android-licenses
在此处输入图像描述 多次说yes后,所有的android licenses都已经签好了。

再次由颤振医生检查。

$扑医生-v
在此处输入图像描述

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

恭喜你,你已经完成了这个任务!

于 2021-06-09T06:18:14.707 回答
61

我有同样的问题,通过安装来自 android studio 的 coomand-line 工具解决了它

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

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

于 2021-05-12T03:42:07.927 回答
16

It seems you are getting a JDK exception, it happens when you does not have JAVA_HOME setted on your system variables OR you have almost setted the JDK but in the wrong folder OR you are trying to run the SDK Manager (which allows you to accept the Android Licenses) with the wrong JDK.

In case of JDK 9 or higher:

Actually, Android SDK Manager works only with Gradle compiled on version of JDK 8 for Android development, so, if you have a most-recent JDK version already setted on system variables, consider to downgrade it to the JDK version 8.

This version works fine for me: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

In case of JDK 8 already installed

If you manually extracted the JDK folder to a directory, maybe you have setted it "wrong". I mean: You pointed the wrong way to the bin Java folder, but it still works. You have to set JAVA_HOME as the root of JDK, example: In the JDK zipped folder, you have to extract it and point the system variable in the unzipped folder, no directly in the bin directory, you have to point JAVA_HOME as a system variable and declare the bin folder as an executable.

Examples:

Linux

In your shell configuration file:

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

Windows

In your environment variables manager:

Set a new SYSTEM VARIABLE named JAVA_HOME

enter image description here

Then, edit the PATH variable and add a new register to it:

%JAVA_HOME%\bin

Actually, I don't know really how to manage JDKs in MacOS, if that is you OS, sorry :(

Hope it helps!

于 2020-10-01T20:53:39.787 回答
5

您需要 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
于 2021-03-29T16:10:59.927 回答
3

在 Linux 上

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

通过命令并按 Tab 键进行自动完成,删除它向您显示的所有以开头的内容openjdk-

sudo apt remove openjdk-

现在安装JDK 8

sudo apt install openjdk-8-jdk
于 2020-11-14T18:12:15.443 回答
1

首先你需要知道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并按照说明接受许可证

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

于 2021-02-25T05:44:07.463 回答
1

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

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

flutter config --android-sdk=""
于 2020-05-24T23:48:37.517 回答
0

我的解决方案是:我安装了 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在终端中运行。不知何故,它成功了。

于 2020-12-20T14:50:13.687 回答
0

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

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

于 2021-03-22T20:07:58.503 回答
0

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

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

❯ sdk install java 8.0.282.hs-adpt
❯ sdk use java 8.0.282.hs-adpt
于 2021-03-07T23:25:07.330 回答