当安装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)
更新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下载网站上找到。这些工具比上面链接的工具更新。
Linux用户(我使用的是Debian发行版,Kali)
以下是我的解决方法。
如果您还没有jdk-8,您可以在oracle的网站上获得它
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
我得到了jdk-8u191-linux-x64.tar.gz
步骤1 -安装Java
在一个合适的位置移动并打开它,像这样
$ mv jdk-8u191-linux-x64.tar.gz /suitablelocation/
$ tar -xzvf /suitablelocation/jdk-8u191-linux-x64.tar.gz
您应该得到一个解压缩的文件夹,如jdk1.8.0_191
您可以随后删除tarball以节省空间
步骤2 -设置默认java位置的替代方案
$ update-alternatives --install /usr/bin/java java /suitablelocation/jdk1.8.0_191/bin/java 1
$ update-alternatives --install /usr/bin/javac javac /suitablelocation/jdk1.8.0_191/bin/javac 1
步骤3 -选择您的默认选项
$ update-alternatives --set java /suitablelocation/jdk1.8.0_191/bin/java
$ update-alternatives --set javac /suitablelocation/jdk1.8.0_191/bin/javac
步骤4 -确认默认java版本
$ java -version
笔记
In the original article here: https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linux,
the default plugin for mozilla was also set. I assume we don't really need the plugins as we're
simply trying to develop for android.
As in @spassvogel's answer, you should also place a @repositories.cfg file in your ~/.android directory
as this is needed to update the tools repo lists
Moving some things around may require root authority. Use sudo wisely.
For sdkmanager usage, see official guide: https://developer.android.com/studio/command-line/sdkmanager
我找到了两个对我有用的答案,而不需要卸载创建-反应-app所需的JDK 10(或9)。JDK 9和JDK 10都不兼容android-sdk !
Siu Ching Pong -飞鸟健二-建议修改sdkmanager脚本,替换这一行:
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
:
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
注意,这个mod在更新sdkmanager时会被覆盖。
查看他的帖子和他的链接,了解更多细节。
这个解决方案也是这个github问题线程中提到的解决方案之一。
German的帖子指出了冲突的来源,并提出了不会被更新覆盖的修复方案。
他建议重命名/Library/Java/JavaVirtualMachines/Info。plist是一种将它与寻找系统中Java的最高版本的脚本隔离的方法。这样,JDK 8将作为默认值返回。
显式引用JDK 10,或将其设置为$JAVA_HOME,您可以在需要时使用JDK 10,而不是默认值。
详情见他的文章。
我也有这个错误
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来接受所有的许可。