[英]Flutter.io Android License Status Unknown
>[!] Android toolchain - develop for Android devices (Android SDK 27.0.3)
>>• Android SDK a ..\Android\sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 27.0.3
• Java binary at C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
X Android license status unknown.
我在运行 Flutter 医生时收到 Android SDK 错误,尽管我仍然可以在我的设备上构建/运行它。 我只是好奇如何解决这个问题。 我相信我已经下载了 Android SDK 的最新版本,不确定发生了什么,因为我上周没有遇到这个问题。
##New Issues 在评论中进行了几个可能的修复后,它导致了一个新问题。 我安装了更新版本的 android sdk P、8 和 7 以及新的 jdk10。 显然还不够更新。
C:\Flutter\flutter>flutter doctor --android-licenses
A newer version of the Android SDK is required. To update, run:
C:\Users\tdmil\AppData\Local\Android\sdk\tools\bin\sdkmanager --update
C:\Flutter\flutter>C:\users\用户名\appdata\local\android\sdk\tools\bin\sdkmanager.bat --update
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
错误:
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
发生的原因是当前的 SDK 版本与 Java 9 不兼容。
因此,要解决此问题,您可以将 Java 版本降级到 Java 8,或者使用一种变通方法,您可以在终端上导出以下选项:
Linux:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
窗户:
set JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
为了让它坚持下去,您可以在 Linux 上的配置文件( .zshrc
、 .bashrc
等)中导出 JAVA_OPTS 或在 Windows 上永久添加为环境。
然后,您可以输入 flutter 或 sdkmanager 命令:
颤振:
flutter doctor --android-licenses
sdkmager :
sdkmanager --licenses
并在需要时键入 Y 以接受许可证。
附: 这不适用于没有 Java EE 模块的 Java 11/11+。 对于此选项是个好主意,请降级您的 Java 版本或等待 Flutter更新。
我写这个是因为在安装 flutter 时遇到了挫折......大多数问题都是由简单的配置问题引起的。 请按照以下步骤解决您的问题。
第 1 步:ANDROID LICENSES --android-licenses,将解决大多数情况
既然你在这里,你已经遇到了 Android 工具链的“Android 许可证状态未知”问题,许多人建议尝试flutter doctor --android-licenses
。 如果你对所有配置都很好。 它应该要求是,然后按 y 和 Voila。 但是如果它显示一个
找不到 Android sdkmanager 工具(C\\Users\\__\\local\\Android\\sdk\\tools\\bin\\sdkmanager)
。 进入第二步
第 2 步:从 Android Studio 安装 SDK Manager
打开您的 Android Studio , File-> settings->System settings(left tab) ->Android SDK,
转到该页面中的SDK Tool section
,取消选中隐藏过时的包,选择Android SDL tools(obsolete)
并按应用。
它将安装 SDK,您通过检查此路径是否存在(C\\Users\\__\\local\\Android\\sdk\\tools\\bin\\sdkmanager)
第 3 步:重复 1
在新的命令行中安装后重复步骤 1 检查其是否有效,否则转到步骤 4
第 4 步:sdkmanager --update
它会要求您更新 sdk,只需运行终端C\\Users\\__\\local\\Android\\sdk\\tools\\bin\\sdkmanager --update
。 如果它正在运行,那么它很酷。 让它完成并重复步骤 1,否则如果它抛出一些异常,如java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
等, 这意味着您的java未安装或版本不正确。 进入下一步
第 5步: JAVA 8.1 和 JAVA_HOME 路径。
安装 JAVA 8.1 并设置 JAVA_HOME 路径。 确保它是8.1版本(注册免费帐户并从oracle下载8.1版本,记住11+以上不适用于flutter
注意:由yaniv maymon 提供:如果您的计算机上已经安装了 Java 并且 sdkmanager --update 仍然无法正常工作。 转到环境变量并将“JAVA_HOME”路径更新到 jdk 文件夹。 然后退出命令提示符,再次打开并运行更新命令——
第 6 步:最后一步
正确安装并设置好路径后,在新终端运行C\\Users\\__\\local\\Android\\sdk\\tools\\bin\\sdkmanager --update
命令即可
步骤 7:重新运行 flutter doctor ,您可以看到它说运行命令flutter doctor --android-licenses
。 所以在终端中运行flutter doctor --android-licenses
并在询问时按 y
以下是解决我的问题的步骤:
flutter doctor --android-licenses
y
接受,此过程可能会发生多次。 完成!我找到了这个必须使用 JDK 8 的解决方案(您现在需要一个帐户才能下载!) - 使用 Android Studio 附带的嵌入式 OpenJDK:
将此添加到您的~/.profile
或类似文件中:
# Use the JDK embedded with Android Studio for command-line builds
export JAVA_HOME='/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home'
通过gradlew
和任何其他表现良好的脚本进行命令行构建,然后将使用 Android Studio 2.2+ 附带的 SDK 版本。
*我的 Mac 仍在使用默认的 Java 7。
这也是我的问题,与#16025相同
对于线程“main”中的异常 java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema 这个问题似乎通常发生在您之前安装 Java 9 时。 顺便说一句,它与 android-sdk 不兼容,如果仍然存在,请尝试删除 Java 9 JDK。
一般来说,JAXB API 被认为是 Java EE API,因此不再包含在 Java SE 9 的默认类路径中。Java 9 引入了模块的概念,默认情况下 java.se 聚合模块在类中可用路径(或者更确切地说,模块路径)。 顾名思义,java.se 聚合模块不包括传统上与 Java 6/7/8 捆绑在一起的 Java EE API。 幸运的是,JDK 6/7/8 中提供的这些 Java EE API 仍在 JDK 中,只是默认情况下它们不在类路径中。 以下模块中提供了额外的 Java EE API
如果您安装了 Java9/10,解决方法
替换
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'
对于 Android 许可证状态未知问题,我尝试通过以下步骤解决:
转到您的 Android SDK 位置 C:\\Users%user%\\AppData\\Local\\Android\\Sdk\\tools\\bin 或 ~/Library/Android/sdk/tools/bin
运行命令:./sdkmanager --license
参考文献
无法使用 Java 9 运行 sdkmanager --list (Android SDK)
如何解决 Java 9 中的 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
这是我的解决方案:
安装 SDKMan
$ curl -s "https://get.sdkman.io" | bash
设置你的 bash_profile
$ source "$HOME/.sdkman/bin/sdkman-init.sh
$ source ~/.bash_profile
找到java sdk,选择要安装的版本
$ sdk ls java
$ sdk install java 8.0.192-zulu
复制您的颤振医生警告消息以更新 sdkmanager
$ /Users/YourUserName/Library/Android/sdk/tools/bin/sdkmanager --update
1~4后重做
$ flutter doctor --android-licenses
GitHub 问题社区上提供的这一行解决了我的问题,这里只是为了帮助其他人。
@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS%
所以这里是解决方案,打开您的 SDK 管理器,然后取消选中Hide Obsolete Packages
现在您将看到Android SDK Tools (Obsolete) 26.1.1
出现。 勾选那个包并点击apply button
然后点击确定按钮。 它会下载sdk。 然后restart
安卓工作室
很好,现在如果你运行flutter doctor
,你应该得到如下的阳性结果
PS D:\Workplace\flutter_projects> flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.12.13+hotfix.8, on Microsoft Windows [Version 10.0.18363.657], locale en-MY)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[√] Android Studio (version 3.6)
[√] VS Code (version 1.42.1)
[√] Connected device (1 available)
• No issues found!
PS D:\Workplace\flutter_projects> flutter doctor --android-licenses -v
All SDK package licenses accepted.======] 100% Computing updates...
运行flutter doctor --android-licenses
并在询问时输入 Y
如果需要,我们可以在此处手动下载软件包https://dl.google.com/android/repository/sdk-tools-windows-4333796.zip (适用于 Windows 用户)。 希望本教程可以帮助寻找解决方案的人
MacOS 10.15:Android Studio 3.5.1:
对我有用的解决方案是使用Java 环境工具jenv
(通过homebrew安装)。 当在 Java 版本之间切换时,此工具会更改$JAVA_HOME 。
就我而言,我安装了多个 Java 版本,当前使用的全局版本是默认版本。 我还发现有必要在使用此工具时注释掉.bash_profile
的$JAVA_HOME环境变量。
在终端中,我输入jenv global 1.8
来运行 java 1.8 而不是更高版本(我安装了多个版本)。
之后:
flutter doctor --android-licenses
或
sdkmanager --licenses
两者都工作正常。
注意:如果您必须重新定义 $JAVA_HOME 环境变量,您可能需要退出并重新打开终端 shell。
对于那些使用 Linux 并在flutter doctor --android-licenses
期间不断出错的人。
尝试接受许可证时,我不断收到无法创建设置警告,我通过指定 SDK 位置修复了该警告:
sdkmanager --sdk_root=/home/adel/bin/android-sdk --licenses
Sdkmanager 然后打印:所有 SDK 包许可证都被接受。
但是 Flutter 一直给android 许可证状态未知错误。 并尝试调用flutter doctor --android-licenses
会给我同样的无法创建我曾经得到的设置错误。
为了解决这个问题,我编辑了位于${your android tools location} /tools/bin/ 的sdkmanager
脚本,并将最后一行从:
exec "$JAVACMD" "$@"
至:
exec "$JAVACMD" "$@" --sdk_root=/home/adel/bin/android-sdk
这将使 Flutter 在传递所需的 sdk_root 参数时调用 sdkmanager,最后调用flutter doctor --android-licenses
修复了该问题。
我不必使用 Java 8。
从 flutter SDK 根文件夹打开 flutter_console.bat 文件并运行命令
flutter doctor --android-licenses
它将接受新下载的 Android SDK 更新的许可。 每次下载和更新 Android SDK 时都需要运行它。
尝试降级您的 java 版本,当您的系统 java 版本与来自 android 的版本不兼容时,就会发生这种情况。 一旦您更改了 Java 版本,只需运行flutter doctor
它将自动接受许可证。
我的环境:Windows 10 64 位,OpenJDK 14.0.2
初始错误如上所述。
错误解决后
对我来说同样的问题,请检查您的 Java 版本至少必须是 1.8
AndroidSDK
。对于仍然面临问题的人:
正如下面汤米 C、阿巴和其他少数人所回答的那样,但我发现的可能不够清楚。
尝试按照 windows/linux 上的说明手动安装java 1.8 :[ https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html]
并设置$JAVA_HOME变量(jdk 路径)。
在 Windows 上设置 jdk 路径($JAVA_HOME):[ 如何在 Windows 7 上设置 java_home? .
在 linux 上:[ https://askubuntu.com/questions/175514/how-to-set-java-home-for-java] 。
然后运行flutter doctor --android-licenses
并接受所有许可证。 希望它有帮助。
我找到了这个解决方案。我下载了JDK 8。然后我将JAVA_HOME的下载jdk文件路径名添加到环境变量中的用户变量中。
我遇到了同样的问题,如上所述,我尝试了这些。
这对我有用:
flutter doctor --android-licenses
并选择y
作为提示flutter doctor
,一切都会好起来的!!!!我正面临问题。 Android SDK
文件夹中也缺少tools
文件夹。 我相信tools
文件夹仅在安装Android SDL tools(obsolete
)后才会出现。 这个选项对我不可用。
解决方案:我将Java
从版本 8 升级到版本 12,并且能够安装这些工具。 您可能仍会收到错误“ Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
并提供命令flutter doctor -v
。 运行命令flutter doctor --android-licenses
,每次出现此问题时单击yes
都会检查许可证是否Accept? (y/N):
Accept? (y/N):
希望它会帮助某人。
如果你使用自制酒桶,你可以这样做
brew cask install android-sdk
mkdir ~/Library/Android/sdk/tools
ln -s /usr/local/bin/ ~/Library/Android/sdk/tools/bin
flutter doctor --android-licenses
对于Windows 用户,短期解决方案是降级到 JDK8。 希望 Flutter 能很快解决这个问题,让 Android SDK 与 >JDK8 一起工作。
在对我的 Ubuntu 20.04 进行大量分析后,我找到了解决方案
对我来说,错误是/home/rk/Android/Sdk/tools/bin/sdkmanager
缺少写入权限。
chmod +w home/rk/Android/Sdk/tools/bin/sdkmanager
然后运行下面的命令。
flutter doctor --android-licenses
它会自动处理许可证。
请按照以下简单步骤操作。
即使在 2021 年,我也面临同样的问题
除了编辑 sdkmanager.bat 文件之外,我已经尝试了上面的答案。 但根本没有成功。
然后我使用“flutter upgrade”命令将flutter 2.5升级到2.5.1。 现在它正在工作。 “颤振医生”命令没有问题。
在 linux:20.10 请确保您设置了 ANDROID_HOME、ANDROID_SDK_ROOT 链接<\/a>的路径
我必须更新最新的命令行工具:
path/to/sdkmanager --install "cmdline-tools;latest"
警告:如果您对 JAVA_HOME 环境变量及其方向有问题,则此答案很有用。 如果您没有此问题,则不应尝试此解决方案。
如果您遇到此错误并且您尝试使用 flutter doctor --android-licenses 或 sdkmanager --licenses 并且您的 JAVA_HOME 环境变量出现问题,那么您必须阅读此内容。
我有一个 MacOS Catalina 蚂蚁,我可以通过以下步骤成功解决这个问题:
如果您有疑问,请告诉我。
这是我为解决问题所做的工作。 请注意,您不必卸载旧的 Android Studio/SDK 副本。 Android Studio 会在您安装最新版本时处理这些问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.