Flutter doctor —— android 许可证给出了一个 java 错误

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 许可证时,我得到了上面的错误。有人知道为什么会这样,我该怎么补救吗?我已经在颤振控制台上运行了。

95963 次浏览

我建议清除android-studio-dir和android-sdk设置,让flutter自动检测它们的路径:这对我来说是可行的。

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


flutter config --android-sdk=""

Android SDK管理器安装Android SDK命令行工具完成了我的工作。

  1. 打开工具 >SDK经理
  2. 从左边选择,外观,行为 >系统设置祝辞Android SDK
  3. 从顶部菜单中选择SDK工具
  4. 选中Android SDK命令行工具并单击“apply”。

替代步骤#1:WINDOWS: 文件 >设置 (Ctrl+Alt+S) / MAC: Android工作室 >首选项

此修复适用于窗户LinuxMac OS X


enter image description here

如果尽管执行了上述步骤,但仍然遇到问题,您可以尝试将系统升级到JDK 8。升级到JDK 8的官方文档是在这里

似乎你得到了一个JDK异常,它发生在你没有在你的系统变量上设置JAVA_HOME时,你几乎已经设置了JDK,但在错误的文件夹中,你试图运行SDK管理器(允许你接受Android许可证),使用错误的JDK。

对于JDK 9或更高版本:

实际上,Android SDK管理器只适用于在JDK 8 用于Android开发版本上编译的Gradle,所以,如果你已经在系统变量上设置了最新的JDK版本,可以考虑将其降级到JDK版本8。

这个版本对我来说很好:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

如果JDK 8已经安装

如果你手动解压JDK文件夹到一个目录,可能你设置“错误”了。我的意思是:你指向了错误的箱子 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"

窗户

在环境变量管理器中:

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

enter image description here

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

%JAVA_HOME%\bin

实际上,我真的不知道如何在MacOS中管理jdk,如果那是你的OS,对不起:(

希望能有所帮助!

在Linux上

Android SDK只适用于JDK 8,所以请卸载当前的JDK版本。

通过命令和用于自动完成的按tab键,删除它显示给你的所有以openjdk-开头的东西

sudo apt remove openjdk-

现在安装JDK 8

sudo apt install openjdk-8-jdk
我的解决方案是: 我安装了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。不知何故,它成功了。

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

敬礼,希望这篇文章对你有所帮助

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

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

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

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

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

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

点击文件,设置然后在搜索栏类型SDK,然后点击android SDK Android Sdk < / p >

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

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

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

首先,这是我遇到的问题
$ flutter doctor -v enter image description here < / p >

下面的命令不适合我的情况。
医生——机器人执照 enter image description here < / p > 解决这个问题的方法是安装
Android SDK命令行工具。以及如何?
你只需要按以下两步来做

安装:Android SDK命令行工具

< p > 步骤1。开放SDK管理器
顶部菜单->工具→SDK经理 enter image description here < / p >

步骤2。安装命令行工具

  1. 展开外观,行为
  2. 展开系统设置
  3. 单击Android SDK
  4. 单击SDK工具页签
  5. 检查Android SDK命令行工具(最新)
  6. 单击应用按钮。 enter image description here
  7. .单击“确定”按钮完成安装

继续签署android许可。

在Android Studio完成安装后,您可以执行以下操作。
医生——机器人执照
enter image description here 经过多次确认,所有的android许可证都已签署

再让医生检查一下

< p > $ flutter doctor -v
enter image description here < / p >

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

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