当安装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 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',输出将帮助您排除其他环境配置问题。
我在跑步时也遇到了同样的问题:
$ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"_
我解的是
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
$ ls /Library/Java/JavaVirtualMachines/
jdk-11.0.1.jdk
jdk1.8.0_202.jdk
将Java改为使用1.8
$ export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home'
然后,相同的命令可以正常运行
$ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"
我的Java版本是15.0.1。适用于Mac操作系统。
这就是我解决问题的方法。
下载zip: jaf- 31_1 .zip从:https://download.oracle.com/otn-pub/java/jaf/1.1.1/jaf-1_1_1.zip?AuthParam=1609860571_68ca6f30491c76e81970a3849504fb6a
从https://download.oracle.com/otn-pub/java/jaf/1.1.1/jaf-1_1_1.zip?AuthParam=1609860571_68ca6f30491c76e81970a3849504fb6a下载了zip: jaxb-ri-2.3.1.zip
解压缩到一个文件夹:~/jars/。导出的类路径如下
export
CLASSPATH=~/jars/FastInfoset.jar:~/jars/activation.jar:~/jars/codemodel.jar:~/jars/dtd-parser.jar:~/jars/istack-commons-runtime.jar:~/jars/istack-commons-tools.jar:~/jars/jaf-1.1.1:~/jars/jaf-1_1_1.zip:~/jars/javax.activation-api.jar:~/jars/jaxb-api.jar:~/jars/jaxb-jxc.jar:~/jars/jaxb-ri:~/jars/jaxb-ri-2.3.1.zip:~/jars/jaxb-runtime.jar:~/jars/jaxb-xjc.jar:~/jars/relaxng-datatype.jar:~/jars/rngom.jar:~/jars/stax-ex.jar:~/jars/txw2.jar:~/jars/xsom.jar
cd ~/Library/Android/sdk/tools/bin/sdkmanager修改CLASSPATH如下所示
类路径=$CLASSPATH:$APP...
保存文件后重新执行命令。