Failed to install android-sdk: "java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema"
Failed to install android-sdk: "java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema"
安装 android sdk 工具时出现以下错误:
java.lang.NoClassDefFoundError: javax/xml/bind/annotation/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)
我今天早上遇到了类似的问题(尝试使用 Unity3D 为 Android 构建)。我最终卸载了 JDK9 并安装了 Java SE Development Kit 8u144。希望这有帮助。
brew cask uninstall java
# 卸载 java9
brew tap homebrew/cask-versions
brew cask install java8
# 安装 java8
touch ~/.android/repositories.cfg
# 没有这个文件,下一步会出错
brew install --cask android-sdk
奇怪的是 Java9 与 android-sdk
不兼容
$ avdmanager
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.AvdManagerCli.run(AvdManagerCli.java:213)
at com.android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.java:200)
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
将所有命令合二为一,方便参考:
$ sudo rm -fr /Library/Java/JavaVirtualMachines/jdk-9*.jdk/
$ sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
$ sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane
$ /usr/libexec/java_home -V
Unable to find any JVMs matching version "(null)".
Matching Java Virtual Machines (0):
Default Java Virtual Machines (0):
No Java runtime present, try --request to install
$ brew tap caskroom/versions
$ brew cask install java8
$ touch ~/.android/repositories.cfg
$ brew cask install android-sdk
$ echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> ~/.bash_profile
$ java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
$ avdmanager
Usage:
avdmanager [global options] [action] [action options]
Global options:
-s --silent : Silent mode, shows errors only.
-v --verbose : Verbose mode, shows errors, warnings and all messages.
--clear-cache: Clear the SDK Manager repository manifest cache.
-h --help : Help on a specific command.
Valid actions are composed of a verb and an optional direct object:
- list : Lists existing targets or virtual devices.
- list avd : Lists existing Android Virtual Devices.
- list target : Lists existing targets.
- list device : Lists existing devices.
- create avd : Creates a new Android Virtual Device.
- move avd : Moves or renames an Android Virtual Device.
- delete avd : Deletes an Android Virtual Device.
我找到了两个对我有用的答案,而无需卸载 JDK 10(或 9),这是我 create-react-app
所需要的。 JDK 9 和 10 都不兼容 android-sdk !
Siu Ching Pong -Asuka Kenji- 建议 mod 修改 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时被覆盖
查看他的 post 和他链接到的那个,了解更多详情。
该方案也是本github issues thread.
中提到的方案之一
指出冲突的来源,并提出不会被更新覆盖的修复。
他建议重命名 /Library/Java/JavaVirtualMachines/Info.plist
作为一种从脚本中隐藏它的方法,该脚本会查找驻留在您系统上的 Java 的最高版本。这样就默认返回了JDK8。
明确引用 JDK 10,或将其设置为 $JAVA_HOME
,您可以在需要时使用 JDK 10 而不是默认值。
详情在他的 post.
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
这为我解决了 Windows 上的问题。
Source 1, source 2
对于 windows 机器,如果它超过 1.8.172,请卸载 JDK。
安装 JDK 1.8.172
我在 windows 10 和 java 10 中遇到了同样的问题。我卸载了 java 10 并安装了 java8 它现在对我来说工作正常: )
在 Mac/Linux 上使用以下命令:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
适用于 JDK 9 和 10,无需 修补任何脚本(sdkmanager、avdmanager)。
对于 Java 11,请参阅:
要解决此错误,您可以降级 Java 版本。
或者在您的终端上导出以下选项:
Linux/MAC:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Windows:
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
如果这不起作用,请尝试导出 java.xml.bind
。
Linux:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind'
Windows:
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind
要永久保存它,您可以在 Linux(.zshrc
、.bashrc
等)上导出配置文件中的 JAVA_OPTS
或将其添加为永久在 Windows.
上的环境变量
ps. 这不适用于 Java 11/11+,它没有 Java EE 模块。对于此选项是个好主意,请降级 Java 版本或等待 Flutter update.
命令行中的 运行 java -version
和 javac -version
命令以确保它们来自相同的 JDK (例如:版本 1.8.0_181)
如果不是,您必须修改 PATH
变量,使其仅指向一个 JDK。如果您不确定如何卸载,只需卸载除 Java 8(Add/Remove 中的 Windows 程序)之外的所有其他 Java 实例。至于今天,Unity和Android都推荐大家使用JDK 8.
使用 Java 8,不需要导出 java.se.ee
模块,如其他一些答案所示。您还可以删除任何 JAVA_OPTS
或您设置的其他 environment variables。
如果您不想更改 Java 版本(我不想),您可以临时更改 shell 中的版本:
第一个运行
/usr/libexec/java_home -V
如果已经安装,则选择主版本,否则先安装:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
现在您可以运行 sdkmanager。
由于 Java 11 已删除 JavaEE,您需要下载一些 jar 并添加到类路径中:
JAXB:
https://javaee.github.io/jaxb-v2/
贾夫:
https://www.oracle.com/technetwork/articles/java/index-135046.html
然后编辑 sdkmanager.bat 以便 set CLASSPATH=... 以 ;%CLASSPATH%[=13= 结尾]
设置 CLASSPATH 以包含 JAXB 和 JAF:
set CLASSPATH=jaxb-core.jar;jaxb-impl.jar;jaxb-api.jar;activation.jar
那么sdkmanager.bat就可以了。
对于 Linux 用户(我使用的是 Debian Distro、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 以保存 space
第 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
备注
- 原文章在这里:https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linux,
还设置了 mozilla 的默认插件。我假设我们真的不需要插件
只是想为 android.
开发
- 如@spassvogel 的回答,您还应该在 ~/.android 目录中放置一个 @repositories.cfg 文件
因为这是更新工具回购列表所必需的
- 移动一些东西可能需要 root 权限。明智地使用 sudo。
- sdkmanager的使用方法见官方指南:https://developer.android.com/studio/command-line/sdkmanager
您需要将以下内容添加到您的个人资料中(适用于 MacOS):
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
无需修补任何东西。
我 运行 在 运行 时遇到同样的问题:
$ /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"
使用 Linux 时,一个简单的选择是安装 JDK version 8
然后选择它作为默认使用:
sudo update-alternatives --config java
降级您的 java version.Whatever 系统或 ide。
确保java版本不高于8
在我的 case.I 中更改 ide java verion.This 解决了我的问题。
当您的 Android stuio/jre 使用不同版本的 java 时,您将收到此错误。要解决它,只需将 Android studio/jre 设置为您的 JAVA_HOME。并卸载您自己的 java.
2019-10 更新:
由于 stated in the issue tracker,Google 一直致力于开发新的 Android SDK 命令行工具 版本,该版本可在当前 JVM 上运行( 9、10、11+),并且不依赖于已弃用的 JAXB EE 模块!
您可以在 Android Studio 中下载并使用新的 Android SDK 命令行工具,或者从 Google 服务器:
对于最新版本,请检查 repository.xml.
中的 URL
如果您手动解压缩命令行工具,请注意将它们放在 $ANDROID_HOME
的子文件夹中(例如 $ANDROID_HOME/cmdline-tools/...
)。
2021 年 3 月更新:
最新稳定的命令行工具可在 Googles Downloads-Website 获得。这些工具比上面链接的工具更新。
我遇到了同样的问题。虽然我有点过时的开发人员(仍在使用 windows 开发 :P)
解决这个问题 在 windows :
第 1 步:如果未安装 jdk 8(jdk 9 或 11 不起作用,但您可以安装它们用于其他开发用途)。
使用 Chocolatey 非常简单:
choco install jdk8
(如果使用 Chocolatey 安装,请跳过第 2 步和第 3 步)
第 2 步:转到环境变量设置并将 JAVA_HOME 设置为 jdk 8 的安装目录。
第 3 步:转到路径变量并添加 jdk8 的 bin 目录并将其移动到顶部。
第 4 步:关闭所有打开的终端会话并重新启动新会话
可选步骤 5:取决于您在终端 objective 中的 运行(可能需要将 sdkmanager 添加到路径或仅导航到目录):
sdkmanager --update
就是这样! :O 享受飘飘然! :D
对我来说,我安装了 java 版本 8 并且 select java 版本在 "JDK location" 中:
就我的情况而言,我使用 sdkman 来管理多个 java 版本。我将默认 java 版本设置为 13。安装版本 8,现在它工作正常。
我最近通过卸载更高版本的JDK并安装JDK解决了这个问题 8.安装JDK后你需要给出路径。然后你需要在 "C:\Users\Milan Adhikari\AppData\Local\Android\Sdk\tools" 和 运行 "sdkmanager --update" 中打开命令提示符,这将更新你的 sdk 然后你需要在 cmd 中 运行 "flutter doctor --android-licenses" 并接受所有许可证。
现在你的问题应该已经解决了。
最好的方法是使用下面的命令
$ wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
$ unzip \platform-tools-latest-linux.zip
$ sudo cp platform-tools/adb /usr/bin/adb
$ sudo cp platform-tools/fastboot /usr/bin/fastboot
现在 运行 adb 版本以验证它是否已更新。
就我而言,我需要 JDK 8(尝试在 ubuntu 下的 Qt 中使用 AVD 和 SDK 管理器)和 11 用于不同的工具。删除版本 11 不是一个选项。
'JAVA_OPTS' 解决方案没有做任何事情。我真的不喜欢导出 JAVA_HOME,因为它可能会强制您从同一个 shell(如 Qt)启动任何调用这些实用程序的工具,或者强制您将其永久化,这不是方便。
所以对我来说,解决方案非常简单。在 ~/Android/tools/bin/sdkmanager 和 ~/Android/tools/bin/avdmanager:
的第二行添加类似这样的内容
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(或您的 rev 8 jdk 的任何路径)。
因此,这些命令行工具以独立模式工作,它们在被其他工具(如 Qt)调用时也可以工作,并且 jdk11 仍然是其他工具的系统默认值。无需混合库等...
唯一的缺点是对这些命令行工具的任何更新都会删除这些修改,您必须将其重新放入。
就我而言,我有 Java 14 个,需要 Java 8 个。
我在 Arch Linux 并且已经安装 jdk8-openjdk jre8-openjdk
https://www.archlinux.org/packages/extra/x86_64/java8-openjdk/
对于 Debian 用户 https://wiki.debian.org/Java, or Fedora https://docs.fedoraproject.org/en-US/quick-docs/installing-java/。
在执行以下步骤之前,使用包管理器安装 Java 8(或所需版本,在本例中为 jdk8-openjdk jre8-openjdk
)。
1。找出我的 Java:
在哪里
# which java
/usr/bin/java
2。正在检查 java 个文件:
我可以看到这里所有 java 个文件都是指向 /usr/lib/jvm/default[something]
的链接。这意味着 java
命令链接到某些特定版本的 java
可执行文件。
# ls -l /usr/bin/java*
lrwxrwxrwx 1 root root 37 May 16 06:30 /usr/bin/java -> /usr/lib/jvm/default-runtime/bin/java
lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javac -> /usr/lib/jvm/default/bin/javac
lrwxrwxrwx 1 root root 32 May 16 06:30 /usr/bin/javadoc -> /usr/lib/jvm/default/bin/javadoc
lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javah -> /usr/lib/jvm/default/bin/javah
lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javap -> /usr/lib/jvm/default/bin/javap
3。检查 default
和 default-runtime
在这里我可以看到默认版本链接到 14(唯一安装版本)。
# cd /usr/lib/jvm
# ls -l
lrwxrwxrwx 1 root root 14 Aug 8 20:44 default -> java-14-openjdk
lrwxrwxrwx 1 root root 14 Aug 8 20:44 default-runtime -> java-14-openjdk
drwxr-xr-x 7 root root 4096 Jul 19 22:38 java-14-openjdk
drwxr-xr-x 6 root root 4096 Aug 8 20:42 java-8-openjdk
4。切换默认版本
首先,删除链接到 java-14 版本的现有 default
和 default-runtime
。
# rm default default-runtime
然后,创建指向所需版本的新链接(在本例中为 java-8)。
# ln -s java-8-openjdk default
# ln -s java-8-openjdk default-runtime
策略是使用上面的 ln -s
链接到所需的软件版本(在本例中为 java8)。然后,此链接链接到 java bin 目录中的二进制文件( 无需更改 $PATH
环境变量!)
或者您可能希望使用 archlinux-java
命令更改 Java 版本,而不是更安全的方法:https://wiki.archlinux.org/index.php/Java
从 Android command-line 工具的最新版本(撰写本文时为 2.1)开始,不再需要修补 sdkmanager 也不再需要降级到 [=25 的旧版本=].
只需更新您的 SDK 包并将您的 command-line 工具切换到 latest
版本,它将跟踪新版本的出现:
sdkmanager --update
sdkmanager 'cmdline-tools;latest'
sdkmanager --uninstall 'cmdline-tools;1.0'
如果 sdkmanager
不在您的 PATH
上,您可能需要提供 sdkmanager
的完整路径,如果 PATH
指的是 1.0
显式工具。
TLDR;尝试设置 JAVA_HOME 在 OSX
上对我来说效果很好
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
刚遇到这个错误,通过在 Android Studio 上的 Preferences > Appearance & Behavior > System Settings > Android SDK > SDK Tools
和 re-running flutter doctor --android-licenses
下下载 Android SDK Command-line Tools (latest)
解决了
最后,将新工具添加到您的路径中,在您的 .bashrc
、.zshrc
或类似工具中,在过时的工具之前:
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
无需卸载计算机上已安装的其他 java 版本。无论何时需要,您都可以方便地使用实用程序 'update-alternatives' 选择您希望激活的 Java 运行 时间。它将自动更新所需的符号链接。
您只需要 运行 下面的命令和 select 您选择的版本。就这些!
sudo update-alternatives --config java
正如@steven 指出的那样,安装 Java 8(此处 link 用于 Ubuntu 16.04、18.04 和 20.04/20.10 https://computingforgeeks.com/how-to-install-java-8-on-ubuntu/),然后将其设置为使用此命令的默认 Java 版本:
sudo update-alternatives --config java
我遇到了同样的问题,并按照建议安装了 openjdk-8-jdk
。检查 javac -version
结果版本正确,但 java -version
显示版本 11。
解决方案是使用:
sudo update-alternatives --config java
和 select 菜单中的版本 8。
这个问题有很多答案,由于用户安装不同的工具链和使用不同的 Java 版本,所以答案都不一样。
使用 Android 开发工具链的推荐方法,或者至少是我建议使用的方法,是遵循 Android Studio 文档中的说明:
You should always keep your Build Tools component updated by downloading the latest version using the Android SDK Manager.
Android studio 允许您轻松管理已安装的 SDK 和构建工具,是的,它需要一些 space 在您的硬盘上,但它会节省您一些时间。一旦你熟悉了它的工作原理,那么你就可以考虑只安装命令行工具了。
如果没有特殊原因使用旧 Java 版本,请使用最新(稳定)版本,您将拥有有趣的新功能,并且编译的应用程序将受益于所有新的优化。
全新安装
- 删除本地
Android
文件夹,通常在主目录中
- Download Android studio
- 安装后,打开
Settings
,搜索 Android SDK
并打开它
- 在
SDK Platforms
select 您的应用的目标 Android 版本
- 在
SDK Tools
选项卡中,selectAndroid SDK Build-Tools
、Android SDK Command-line Tools (latest)
、Android Emulator
、Android SDK Platform-Tools
- 在按“确定”之前,请检查
Android SDK Location
路径是否适合您
- 按确定,让 Android Studio 下载并安装所有内容
(可选)如果您需要从命令行使用已安装的二进制文件,请务必将其文件夹添加到您的 PATH 变量中。如果您使用 Android studio,则不需要它。
我的机器上安装了 Java 14,无论如何你可以使用 Android Studio 附带的 jre。
- 我也有这个错误
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
、
- 我已经完成了以下步骤
open the android studio > go to configure > select sdk manager > go to sdk tools > make a tick on android sdk command line tools >apply > and wait for installation
重启命令行工具
输入指令flutter doctor
输入指令flutter doctor --android-licenses
并输入 y
接受所有许可
我的 Java 版本是 15.0.1 。对于 OS Mac.
这就是我解决问题的方法。
已下载 zip:jaf-1_1_1.zip 来自: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:https://download.oracle.com/otn-pub/java/jaf/1.1.1/jaf-1_1_1.zip?AuthParam=1609860571_68ca6f30491c76e81970a3849504fb6a
解压缩到一个文件夹中:~/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=$CLASSPATH:$APP...
保存文件并再次运行命令。
就我而言,我的机器上没有安装所需的 sdk 版本。
所以请确保你已经安装了错误中给出的sdk版本。
在这里您可以通过 Android Studio 导航检查和安装。
更新了我当前的 Android SDK,一切都很顺利。
得到这个错误 运行ning "flutter doctor --android-licenses" 在 Windows 10. 我解决了它创建这两个环境变量
ANDROID_SDK_ROOT
C:\Users\youruser\AppData\Local\Android\Sdk
ANDROID_SDK_HOME
C:\Users\youruser\.android
刷新环境变量或重新启动,然后再次运行命令。
我正在使用 macOS,在构建 flutter 应用程序时发生错误,提示 android sdk 许可证未被接受。因此,在接受许可时发生了这个错误。
在我的案例中出现此错误的原因是我没有安装接受许可证所需的 sdkmanager 命令行工具。
所以,安装命令行工具最简单的方法是:
- 打开android工作室。
- 打开SDK管理器(参考下图):
- Select里面的SDK工具吧。
- 勾选选项Android SDK命令行工具(最新)
- 应用它。
- 运行 flutter doctor -android-licenses if using flutter or you can continue the process of the error.
安装 android sdk 工具时出现以下错误:
java.lang.NoClassDefFoundError: javax/xml/bind/annotation/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)
我今天早上遇到了类似的问题(尝试使用 Unity3D 为 Android 构建)。我最终卸载了 JDK9 并安装了 Java SE Development Kit 8u144。希望这有帮助。
brew cask uninstall java
# 卸载 java9brew tap homebrew/cask-versions
brew cask install java8
# 安装 java8touch ~/.android/repositories.cfg
# 没有这个文件,下一步会出错brew install --cask android-sdk
奇怪的是 Java9 与 android-sdk
不兼容$ avdmanager
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.AvdManagerCli.run(AvdManagerCli.java:213)
at com.android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.java:200)
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
将所有命令合二为一,方便参考:
$ sudo rm -fr /Library/Java/JavaVirtualMachines/jdk-9*.jdk/
$ sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
$ sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane
$ /usr/libexec/java_home -V
Unable to find any JVMs matching version "(null)".
Matching Java Virtual Machines (0):
Default Java Virtual Machines (0):
No Java runtime present, try --request to install
$ brew tap caskroom/versions
$ brew cask install java8
$ touch ~/.android/repositories.cfg
$ brew cask install android-sdk
$ echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> ~/.bash_profile
$ java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
$ avdmanager
Usage:
avdmanager [global options] [action] [action options]
Global options:
-s --silent : Silent mode, shows errors only.
-v --verbose : Verbose mode, shows errors, warnings and all messages.
--clear-cache: Clear the SDK Manager repository manifest cache.
-h --help : Help on a specific command.
Valid actions are composed of a verb and an optional direct object:
- list : Lists existing targets or virtual devices.
- list avd : Lists existing Android Virtual Devices.
- list target : Lists existing targets.
- list device : Lists existing devices.
- create avd : Creates a new Android Virtual Device.
- move avd : Moves or renames an Android Virtual Device.
- delete avd : Deletes an Android Virtual Device.
我找到了两个对我有用的答案,而无需卸载 JDK 10(或 9),这是我 create-react-app
所需要的。 JDK 9 和 10 都不兼容 android-sdk !
Siu Ching Pong -Asuka Kenji- 建议 mod 修改 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时被覆盖
查看他的 post 和他链接到的那个,了解更多详情。
该方案也是本github issues thread.
他建议重命名 /Library/Java/JavaVirtualMachines/Info.plist
作为一种从脚本中隐藏它的方法,该脚本会查找驻留在您系统上的 Java 的最高版本。这样就默认返回了JDK8。
明确引用 JDK 10,或将其设置为 $JAVA_HOME
,您可以在需要时使用 JDK 10 而不是默认值。
详情在他的 post.
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
这为我解决了 Windows 上的问题。
Source 1, source 2
对于 windows 机器,如果它超过 1.8.172,请卸载 JDK。 安装 JDK 1.8.172
我在 windows 10 和 java 10 中遇到了同样的问题。我卸载了 java 10 并安装了 java8 它现在对我来说工作正常: )
在 Mac/Linux 上使用以下命令:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
适用于 JDK 9 和 10,无需 修补任何脚本(sdkmanager、avdmanager)。
对于 Java 11,请参阅:
要解决此错误,您可以降级 Java 版本。
或者在您的终端上导出以下选项:
Linux/MAC:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Windows:
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
如果这不起作用,请尝试导出 java.xml.bind
。
Linux:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind'
Windows:
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind
要永久保存它,您可以在 Linux(.zshrc
、.bashrc
等)上导出配置文件中的 JAVA_OPTS
或将其添加为永久在 Windows.
ps. 这不适用于 Java 11/11+,它没有 Java EE 模块。对于此选项是个好主意,请降级 Java 版本或等待 Flutter update.
运行 java -version
和 javac -version
命令以确保它们来自相同的 JDK (例如:版本 1.8.0_181)
如果不是,您必须修改 PATH
变量,使其仅指向一个 JDK。如果您不确定如何卸载,只需卸载除 Java 8(Add/Remove 中的 Windows 程序)之外的所有其他 Java 实例。至于今天,Unity和Android都推荐大家使用JDK 8.
使用 Java 8,不需要导出 java.se.ee
模块,如其他一些答案所示。您还可以删除任何 JAVA_OPTS
或您设置的其他 environment variables。
如果您不想更改 Java 版本(我不想),您可以临时更改 shell 中的版本:
第一个运行
/usr/libexec/java_home -V
如果已经安装,则选择主版本,否则先安装:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
现在您可以运行 sdkmanager。
由于 Java 11 已删除 JavaEE,您需要下载一些 jar 并添加到类路径中:
JAXB: https://javaee.github.io/jaxb-v2/
贾夫: https://www.oracle.com/technetwork/articles/java/index-135046.html
然后编辑 sdkmanager.bat 以便 set CLASSPATH=... 以 ;%CLASSPATH%[=13= 结尾]
设置 CLASSPATH 以包含 JAXB 和 JAF:
set CLASSPATH=jaxb-core.jar;jaxb-impl.jar;jaxb-api.jar;activation.jar
那么sdkmanager.bat就可以了。
对于 Linux 用户(我使用的是 Debian Distro、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 以保存 space
第 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
备注
- 原文章在这里:https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linux, 还设置了 mozilla 的默认插件。我假设我们真的不需要插件 只是想为 android. 开发
- 如@spassvogel 的回答,您还应该在 ~/.android 目录中放置一个 @repositories.cfg 文件 因为这是更新工具回购列表所必需的
- 移动一些东西可能需要 root 权限。明智地使用 sudo。
- sdkmanager的使用方法见官方指南:https://developer.android.com/studio/command-line/sdkmanager
您需要将以下内容添加到您的个人资料中(适用于 MacOS):
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
无需修补任何东西。
我 运行 在 运行 时遇到同样的问题:
$ /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"
使用 Linux 时,一个简单的选择是安装 JDK version 8
然后选择它作为默认使用:
sudo update-alternatives --config java
降级您的 java version.Whatever 系统或 ide。
确保java版本不高于8
在我的 case.I 中更改 ide java verion.This 解决了我的问题。
当您的 Android stuio/jre 使用不同版本的 java 时,您将收到此错误。要解决它,只需将 Android studio/jre 设置为您的 JAVA_HOME。并卸载您自己的 java.
2019-10 更新:
由于 stated in the issue tracker,Google 一直致力于开发新的 Android SDK 命令行工具 版本,该版本可在当前 JVM 上运行( 9、10、11+),并且不依赖于已弃用的 JAXB EE 模块!
您可以在 Android Studio 中下载并使用新的 Android SDK 命令行工具,或者从 Google 服务器:
对于最新版本,请检查 repository.xml.
中的 URL如果您手动解压缩命令行工具,请注意将它们放在 $ANDROID_HOME
的子文件夹中(例如 $ANDROID_HOME/cmdline-tools/...
)。
2021 年 3 月更新:
最新稳定的命令行工具可在 Googles Downloads-Website 获得。这些工具比上面链接的工具更新。
我遇到了同样的问题。虽然我有点过时的开发人员(仍在使用 windows 开发 :P)
解决这个问题 在 windows :
第 1 步:如果未安装 jdk 8(jdk 9 或 11 不起作用,但您可以安装它们用于其他开发用途)。
使用 Chocolatey 非常简单:
choco install jdk8
(如果使用 Chocolatey 安装,请跳过第 2 步和第 3 步)
第 2 步:转到环境变量设置并将 JAVA_HOME 设置为 jdk 8 的安装目录。
第 3 步:转到路径变量并添加 jdk8 的 bin 目录并将其移动到顶部。
第 4 步:关闭所有打开的终端会话并重新启动新会话
可选步骤 5:取决于您在终端 objective 中的 运行(可能需要将 sdkmanager 添加到路径或仅导航到目录):
sdkmanager --update
就是这样! :O 享受飘飘然! :D
对我来说,我安装了 java 版本 8 并且 select java 版本在 "JDK location" 中:
就我的情况而言,我使用 sdkman 来管理多个 java 版本。我将默认 java 版本设置为 13。安装版本 8,现在它工作正常。
我最近通过卸载更高版本的JDK并安装JDK解决了这个问题 8.安装JDK后你需要给出路径。然后你需要在 "C:\Users\Milan Adhikari\AppData\Local\Android\Sdk\tools" 和 运行 "sdkmanager --update" 中打开命令提示符,这将更新你的 sdk 然后你需要在 cmd 中 运行 "flutter doctor --android-licenses" 并接受所有许可证。
现在你的问题应该已经解决了。
最好的方法是使用下面的命令
$ wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
$ unzip \platform-tools-latest-linux.zip
$ sudo cp platform-tools/adb /usr/bin/adb
$ sudo cp platform-tools/fastboot /usr/bin/fastboot
现在 运行 adb 版本以验证它是否已更新。
就我而言,我需要 JDK 8(尝试在 ubuntu 下的 Qt 中使用 AVD 和 SDK 管理器)和 11 用于不同的工具。删除版本 11 不是一个选项。
'JAVA_OPTS' 解决方案没有做任何事情。我真的不喜欢导出 JAVA_HOME,因为它可能会强制您从同一个 shell(如 Qt)启动任何调用这些实用程序的工具,或者强制您将其永久化,这不是方便。
所以对我来说,解决方案非常简单。在 ~/Android/tools/bin/sdkmanager 和 ~/Android/tools/bin/avdmanager:
的第二行添加类似这样的内容JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(或您的 rev 8 jdk 的任何路径)。
因此,这些命令行工具以独立模式工作,它们在被其他工具(如 Qt)调用时也可以工作,并且 jdk11 仍然是其他工具的系统默认值。无需混合库等...
唯一的缺点是对这些命令行工具的任何更新都会删除这些修改,您必须将其重新放入。
就我而言,我有 Java 14 个,需要 Java 8 个。
我在 Arch Linux 并且已经安装 jdk8-openjdk jre8-openjdk
https://www.archlinux.org/packages/extra/x86_64/java8-openjdk/
对于 Debian 用户 https://wiki.debian.org/Java, or Fedora https://docs.fedoraproject.org/en-US/quick-docs/installing-java/。
在执行以下步骤之前,使用包管理器安装 Java 8(或所需版本,在本例中为 jdk8-openjdk jre8-openjdk
)。
1。找出我的 Java:
在哪里# which java
/usr/bin/java
2。正在检查 java 个文件:
我可以看到这里所有 java 个文件都是指向 /usr/lib/jvm/default[something]
的链接。这意味着 java
命令链接到某些特定版本的 java
可执行文件。
# ls -l /usr/bin/java*
lrwxrwxrwx 1 root root 37 May 16 06:30 /usr/bin/java -> /usr/lib/jvm/default-runtime/bin/java
lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javac -> /usr/lib/jvm/default/bin/javac
lrwxrwxrwx 1 root root 32 May 16 06:30 /usr/bin/javadoc -> /usr/lib/jvm/default/bin/javadoc
lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javah -> /usr/lib/jvm/default/bin/javah
lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javap -> /usr/lib/jvm/default/bin/javap
3。检查 default
和 default-runtime
在这里我可以看到默认版本链接到 14(唯一安装版本)。
# cd /usr/lib/jvm
# ls -l
lrwxrwxrwx 1 root root 14 Aug 8 20:44 default -> java-14-openjdk
lrwxrwxrwx 1 root root 14 Aug 8 20:44 default-runtime -> java-14-openjdk
drwxr-xr-x 7 root root 4096 Jul 19 22:38 java-14-openjdk
drwxr-xr-x 6 root root 4096 Aug 8 20:42 java-8-openjdk
4。切换默认版本
首先,删除链接到 java-14 版本的现有 default
和 default-runtime
。
# rm default default-runtime
然后,创建指向所需版本的新链接(在本例中为 java-8)。
# ln -s java-8-openjdk default
# ln -s java-8-openjdk default-runtime
策略是使用上面的 ln -s
链接到所需的软件版本(在本例中为 java8)。然后,此链接链接到 java bin 目录中的二进制文件( 无需更改 $PATH
环境变量!)
或者您可能希望使用 archlinux-java
命令更改 Java 版本,而不是更安全的方法:https://wiki.archlinux.org/index.php/Java
从 Android command-line 工具的最新版本(撰写本文时为 2.1)开始,不再需要修补 sdkmanager 也不再需要降级到 [=25 的旧版本=].
只需更新您的 SDK 包并将您的 command-line 工具切换到 latest
版本,它将跟踪新版本的出现:
sdkmanager --update
sdkmanager 'cmdline-tools;latest'
sdkmanager --uninstall 'cmdline-tools;1.0'
如果 sdkmanager
不在您的 PATH
上,您可能需要提供 sdkmanager
的完整路径,如果 PATH
指的是 1.0
显式工具。
TLDR;尝试设置 JAVA_HOME 在 OSX
上对我来说效果很好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
刚遇到这个错误,通过在 Android Studio 上的 Preferences > Appearance & Behavior > System Settings > Android SDK > SDK Tools
和 re-running flutter doctor --android-licenses
Android SDK Command-line Tools (latest)
解决了
最后,将新工具添加到您的路径中,在您的 .bashrc
、.zshrc
或类似工具中,在过时的工具之前:
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
无需卸载计算机上已安装的其他 java 版本。无论何时需要,您都可以方便地使用实用程序 'update-alternatives' 选择您希望激活的 Java 运行 时间。它将自动更新所需的符号链接。
您只需要 运行 下面的命令和 select 您选择的版本。就这些!
sudo update-alternatives --config java
正如@steven 指出的那样,安装 Java 8(此处 link 用于 Ubuntu 16.04、18.04 和 20.04/20.10 https://computingforgeeks.com/how-to-install-java-8-on-ubuntu/),然后将其设置为使用此命令的默认 Java 版本:
sudo update-alternatives --config java
我遇到了同样的问题,并按照建议安装了 openjdk-8-jdk
。检查 javac -version
结果版本正确,但 java -version
显示版本 11。
解决方案是使用:
sudo update-alternatives --config java
和 select 菜单中的版本 8。
这个问题有很多答案,由于用户安装不同的工具链和使用不同的 Java 版本,所以答案都不一样。
使用 Android 开发工具链的推荐方法,或者至少是我建议使用的方法,是遵循 Android Studio 文档中的说明:
You should always keep your Build Tools component updated by downloading the latest version using the Android SDK Manager.
Android studio 允许您轻松管理已安装的 SDK 和构建工具,是的,它需要一些 space 在您的硬盘上,但它会节省您一些时间。一旦你熟悉了它的工作原理,那么你就可以考虑只安装命令行工具了。
如果没有特殊原因使用旧 Java 版本,请使用最新(稳定)版本,您将拥有有趣的新功能,并且编译的应用程序将受益于所有新的优化。
全新安装
- 删除本地
Android
文件夹,通常在主目录中 - Download Android studio
- 安装后,打开
Settings
,搜索Android SDK
并打开它 - 在
SDK Platforms
select 您的应用的目标 Android 版本 - 在
SDK Tools
选项卡中,selectAndroid SDK Build-Tools
、Android SDK Command-line Tools (latest)
、Android Emulator
、Android SDK Platform-Tools
- 在按“确定”之前,请检查
Android SDK Location
路径是否适合您 - 按确定,让 Android Studio 下载并安装所有内容
(可选)如果您需要从命令行使用已安装的二进制文件,请务必将其文件夹添加到您的 PATH 变量中。如果您使用 Android studio,则不需要它。
我的机器上安装了 Java 14,无论如何你可以使用 Android Studio 附带的 jre。
- 我也有这个错误
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
、 - 我已经完成了以下步骤
open the android studio > go to configure > select sdk manager > go to sdk tools > make a tick on android sdk command line tools >apply > and wait for installation
重启命令行工具
输入指令
flutter doctor
输入指令
flutter doctor --android-licenses
并输入
接受所有许可y
我的 Java 版本是 15.0.1 。对于 OS Mac.
这就是我解决问题的方法。
已下载 zip:jaf-1_1_1.zip 来自: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:https://download.oracle.com/otn-pub/java/jaf/1.1.1/jaf-1_1_1.zip?AuthParam=1609860571_68ca6f30491c76e81970a3849504fb6a
解压缩到一个文件夹中:~/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=$CLASSPATH:$APP...
保存文件并再次运行命令。
就我而言,我的机器上没有安装所需的 sdk 版本。
所以请确保你已经安装了错误中给出的sdk版本。
在这里您可以通过 Android Studio 导航检查和安装。
更新了我当前的 Android SDK,一切都很顺利。
得到这个错误 运行ning "flutter doctor --android-licenses" 在 Windows 10. 我解决了它创建这两个环境变量
ANDROID_SDK_ROOT
C:\Users\youruser\AppData\Local\Android\Sdk
ANDROID_SDK_HOME
C:\Users\youruser\.android
刷新环境变量或重新启动,然后再次运行命令。
我正在使用 macOS,在构建 flutter 应用程序时发生错误,提示 android sdk 许可证未被接受。因此,在接受许可时发生了这个错误。
在我的案例中出现此错误的原因是我没有安装接受许可证所需的 sdkmanager 命令行工具。
所以,安装命令行工具最简单的方法是:
- 打开android工作室。
- 打开SDK管理器(参考下图):
- Select里面的SDK工具吧。
- 勾选选项Android SDK命令行工具(最新)
- 应用它。
- 运行 flutter doctor -android-licenses if using flutter or you can continue the process of the error.