当安装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)

当前回答

如果你不想改变你的Java版本(我不想),你可以暂时改变你的shell版本:

第一次运行

/usr/libexec/java_home -V

然后选择一个主版本,如果你安装了它,否则先安装它:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

现在可以运行sdkmanager了。

其他回答

更新2019 - 10:

正如问题跟踪器中所述,谷歌一直在开发一个新的Android SDK命令行工具版本,该版本运行在当前的jvm(9,10, 11+)上,并且不依赖于已弃用的JAXB EE模块!

您可以在Android Studio内下载和使用新的Android SDK命令行工具,也可以从谷歌服务器手动下载:

Linux SDK工具 Mac OS SDK工具 Windows SDK工具

对于最新版本,请检查repository.xml中的url。

如果您手动解包命令行工具,请注意将它们放在$ANDROID_HOME内的子文件夹中(例如$ANDROID_HOME/cmdline-tools/…)

2021 - 03年更新:

最新的稳定命令行工具可以在google下载网站上找到。这些工具比上面链接的工具更新。

我也有这个错误

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:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 5 more

然后不再卸载最新的Java环境(在我的例子中是Java 13) 安装Java 8, 我已经完成了以下步骤 打开android studio >进入配置>选择SDK管理器>进入SDK工具>勾选android SDK命令行工具>应用>并等待安装

重新启动命令行工具 输入命令颤振医生 输入命令flutter doctor——android-licenses 并输入y来接受所有的许可。

这个问题有多种答案,取决于潜在的问题。也有多种答案可以间接解决实际问题。

核心问题是:

Android SDK工具与最新的Oracle JDK存在问题。您可以使用最新的Open JDK。(最新的OpenJDK附带Android Studio。) 你没有安装最新的Android SDK命令行工具。 您已经安装了最新的Android SDK命令行工具,但您使用的是E:\Android\ SDK \tools\bin而不是E:\Android\ SDK \cmdline-tools\latest\bin。

这里有一些系统的步骤来识别和解决你可能遇到的上述问题。

将环境变量指向Android Studio中的OpenJDK安装。根据您的安装,在这里找到:E:\Program Files\Android\Android Studio\jre。你必须遍历所有必要的变量,如PATH、JAVA_HOME、JAVA_BIN等,并确保它们都指向你的OpenJDK。

注意:您不必卸载/重新安装jdk。这可能只是修复了你上面的变量作为一个副作用。

检查环境变量是否正确(Windows: echo %JAVA_HOME%, echo %PATH%, where javac等) 进入Android Studio。在“设置”中,导航到“外观和行为>系统设置> Android SDK”。安装“Android SDK命令行工具” 在shell中,打开E:\Android\Sdk\cmdline-tools\latest\bin,然后运行sdkmanager——install "cmdline-tools;latest"

其他故障排除提示: 我把Android环境变量也弄乱了。运行'flutter doctor -v',输出将帮助您排除其他环境配置问题。

对于windows机器,如果JDK大于1.8.172,请卸载JDK。 安装JDK 1.8.172

我在windows 10和java 10中也遇到了同样的问题。我卸载了java 10,安装了java8,它现在对我来说工作很好:)

TLDR;试着在OSX上设置JAVA_HOME工作得很好

export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

从AdoptOpenJDK安装JDKs 8 (LTS):

# brew tap adoptopenjdk/openjdk

brew cask install adoptopenjdk/openjdk/adoptopenjdk8