当安装android sdk工具时,会产生以下错误:

java.lang.NoClassDefFoundError: javax / xml /绑定/注释/ XmlSchema

为什么会发生这种情况,如何解决?

调试输出:

$ java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
$ brew cask install android-sdk
==> Caveats
We will install android-sdk-tools, platform-tools, and build-tools for you.
You can control android sdk packages via the sdkmanager command.
You may want to add to your profile:
  'export ANDROID_SDK_ROOT=/usr/local/share/android-sdk'

This operation may take up to 10 minutes depending on your internet connection.
Please, be patient.

==> Satisfying dependencies
==> Downloading https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip
Already downloaded: /Users/tomasnovella/Library/Caches/Homebrew/Cask/android-sdk--3859397,26.0.1.zip
==> Verifying checksum for Cask android-sdk
==> Installing Cask android-sdk
==> 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.SdkManagerCli.main(SdkManagerCli.java:117)
==>     at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
==> Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
==>     at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
==>     at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
==>     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
==>     ... 5 more
Error: Command failed to execute!

==> Failed command:
/usr/local/Caskroom/android-sdk/3859397,26.0.1/tools/bin/sdkmanager tools platform-tools build-tools;26.0.1

==> Standard Output of failed command:


==> Standard Error of failed command:
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.SdkManagerCli.main(SdkManagerCli.java:117)

当前回答

为Windows用户寻找解决方案

选项1在Android Studio SDK管理器中安装cmdline-tools


选项2从这个链接下载https://developer.android.com/studio#cmdline-tools

然后按照下面的教程来设置它 https://www.youtube.com/watch?v=wvi03sOBKWQ


接下来将cmdline-tools安装的路径复制到bin文件夹中

使用Android Studio SDK管理器 cmdline-tools安装在Android SDK Location下 例子: C:\Users\ %用户名% \ AppData \当地\ Android最新\ Sdk \ cmdline-tools \ \ bin


然后将该路径粘贴到环境变量路径中

控制面板>设置“查看路径”为“大图标”>系统>在右侧的“相关设置”下选择“高级系统设置”>环境变量

从这里开始,在“系统变量”下添加路径

确保cmdline-tools路径在tools路径(在图中红色框中突出显示)的上方。

选择路径>编辑>选择cmdline-tools路径(蓝色部分)>上移

其他回答

从Android命令行工具的最新版本(撰写本文时为2.1)开始,不再需要给sdkmanager打补丁,也不再需要降级到古老的Java版本。

只需更新SDK包,并将命令行工具切换到最新版本,即可跟踪新版本:

sdkmanager --update
sdkmanager 'cmdline-tools;latest'
sdkmanager --uninstall 'cmdline-tools;1.0'

如果sdkmanager的完整路径不在您的path中,您可能需要提供它,如果它显式地引用1.0工具,您可能需要在之后调整您的path。

不需要卸载机器上已经安装的其他java版本。无论何时需要,您都可以方便地使用实用程序“update-alternatives”来选择您希望激活的Java运行时。它将自动更新所需的符号链接。

您只需要运行下面的命令并选择您所选择的版本。这是所有!

sudo update-alternatives --config java

今天早上我遇到了类似的问题(尝试使用Unity3D为Android构建)。我最终卸载了JDK9,并安装了Java SE Development Kit 8u144。

卸载java9 酿造tap自酿/桶酿版本 安装java8 如果没有这个文件,点击~/.android/repositories.cfg #,下一步将发生错误 Brew install—cask android-sdk

刚刚有这个错误,通过在Android Studio上下载Android SDK命令行工具(最新),在首选项>外观和行为>系统设置> Android SDK > SDK工具并重新运行flutter doctor——Android -licenses来解决

最后,将新工具添加到你的PATH中,在你的.bashrc, .zshrc或类似的目录中,在过时的工具之前:

export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin

对我来说,我安装了java版本8,并在“JDK位置”中选择java版本: