157
>[!] 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 doctor 时,我遇到了 Android SDK 错误,尽管我仍然可以在我的设备上构建/运行它。我只是好奇如何解决这个问题。我相信我已经下载了最新版本的 Android SDK,不知道发生了什么,因为我上周没有这个问题。

##New 问题在评论中遵循了几个可能的修复后,它导致了一个新问题。我安装了较新版本的 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\username\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
4

31 回答 31

245

只需在 android studio 中安装下面的 sdk 命令行工具(最新)。 在此处输入图像描述

然后运行: flutter doctor --android-licenses

之后你应该得到:

coolcoders@myhost ~ % flutter doctor --android-licenses
5 of 7 SDK package licenses not accepted. 100% Computing updates...             
Review licenses that have not been accepted (y/N)? y

...然后,您将获得一大堆阅读许可,同时您啜饮您最喜爱的饮料。

于 2020-09-21T11:30:28.670 回答
100

如果您更新了 android SDK,则许可证可能已更改。根据您进行更新的方式,您可能会或可能不会被提示接受更改,或者它只是无法保存您确实以 Flutter 可以理解的方式接受它们的事实。

要解决,请尝试运行

flutter doctor --android-licenses

这应该会提示您接受许可证(它可能会先询问您,以防只需键入y并按 Enter 键 - 尽管它应该会告诉您)。

如果您在这样做之后仍然遇到问题,那么可能值得在Flutter Github 存储库中打开一个新错误,或者在现有问题上添加评论,因为它可能就是您所看到的。

于 2018-04-10T16:55:45.643 回答
68

错误:

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(等)上的配置文件中导出 JAVA_OPTS,.zshrc或者.bashrc在 Windows 上永久添加为环境。


然后,您可以键入 flutter 或 sdkmanager 命令:

颤振

flutter doctor --android-licenses

sdkmanager

sdkmanager --licenses

并在需要时键入 Y 以接受许可证。

附言。这不适用于没有 Java EE 模块的 Java 11/11+。因为这个选项是个好主意,请降级您的 Java 版本或等待 Flutter更新

参考:JDK 11:Java EE 模块之路的终结

于 2018-08-02T02:43:11.200 回答
37

正确的解决方案是如果您安装了 android studio

  1. 打开 SDK 管理器
  2. 在 SDK 工具下取消选中隐藏底部的过时软件包
  3. 那么你应该看到一个名为Android SDK Tools (Obsolete)

在此处输入图像描述

  1. 检查并申请并让工作室下载包
  2. 一旦完成运行命令flutter doctor,它现在应该提示您flutter doctor --android-licenses 运行许可证命令后,点击 y 接受所有许可证,它应该可以解决问题

在此处输入图像描述

于 2020-03-16T11:53:04.377 回答
20

我写这篇文章是因为安装颤振的挫败感......大多数问题都是由简单的配置问题引起的。请按照以下步骤解决您的问题。

第 1 步:ANDROID LICENSES --android-licenses,将解决大多数情况

既然你在这里,你已经遇到了 Android 工具链的“Android 许可证状态未知”问题,正如许多人建议的那样flutter doctor --android-licenses。如果你对所有配置都很好。它应该要求是,然后按 y 和瞧。但如果它显示一个

在此处输入图像描述未找到 Android sdkmanager 工具(C\Users\__\local\Android\sdk\tools\bin\sdkmanager)。进入第二步

第 2 步:从 Android Studio 安装 SDK 管理器

打开您的 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_error 这意味着您的 java 未安装或版本不正确。转到下一步

第 5 步: JAVA 8.1 和 JAVA_HOME 路径。

安装 JAVA 8.1 并设置 JAVA_HOME 路径。确保它是8.1版本(注册免费帐户并从oracle下载8.1版本,记住以上11+不适用于flutter 在此处输入图像描述

注意yaniv maymon: 如果您的计算机上已经安装了 Java,并且 sdkmanager --update 仍然无法正常工作。转到环境变量并更新 jdk 文件夹的“JAVA_HOME”路径。然后退出命令提示符,再次打开并运行更新命令——

第 6 步:最后一步

正确安装和设置路径后,C\Users\__\local\Android\sdk\tools\bin\sdkmanager --update 在新终端中运行命令,它将起作用

STEP 7:重新运行flutter doctor,你可以看到它说运行命令flutter doctor --android-licenses。所以flutter doctor --android-licenses 在终端中运行并在被问到时按 y

于 2020-03-16T18:20:34.307 回答
11

以下是解决我的问题的步骤:

  1. 打开你的终端
  2. 类型flutter doctor --android-licenses
  3. y接受,这个过程可能会发生几次。完毕!
于 2018-04-10T21:08:15.790 回答
10

就我而言,这个问题不见了Android SDK Command-line tools

在此处输入图像描述

于 2020-10-15T06:47:56.073 回答
8

我发现这个解决方案必须使用 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。

于 2019-06-09T15:30:25.367 回答
5

这也是我的问题,与#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 的解决方法

  1. 在编辑器中打开 sdkmanager。
  2. 附加 DEFAULT_JVM_OPTS

代替

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'
  1. 保存文件并退出编辑器,然后再次尝试运行该命令。

对于 Android 许可证状态未知问题,我尝试通过以下步骤解决:

  1. 打开终端
  2. 转到您的 Android SDK 位置 C:\Users%user%\AppData\Local\Android\Sdk\tools\bin 或 ~/Library/Android/sdk/tools/bin

  3. 运行命令:./sdkmanager --license

参考

无法使用 Java 9 运行 sdkmanager --list (Android SDK)

如何在 Java 9 中解决 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

于 2018-04-11T20:16:34.807 回答
5

这是我的解决方案:

  1. 安装 SDKMan

    $ curl -s "https://get.sdkman.io" | bash

  2. 设置你的 bash_profile

    $ source "$HOME/.sdkman/bin/sdkman-init.sh

    $ source ~/.bash_profile

  3. 找到java sdk,然后选择要安装的版本

    $ sdk ls java

    $ sdk install java 8.0.192-zulu

  4. 复制您的颤振医生警告消息以更新 sdkmanager

    $ /Users/YourUserName/Library/Android/sdk/tools/bin/sdkmanager --update

  5. 1~4后重做

    $ flutter doctor --android-licenses

于 2018-12-12T07:45:50.477 回答
4

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%
于 2018-04-20T01:59:32.013 回答
4

参考——https ://robbinespu.gitlab.io/blog/2020/03/03/flutter-issue-fixed-android-license-status-unknown-on-windows/

所以这里的解决方案,打开你的 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 用户)。希望本教程对寻找解决方案的人有所帮助

于 2020-04-08T14:17:28.540 回答
3

MacOS 10.15:Android Studio 3.5.1:

对我有用的解决方案是使用Java Environment 工具 jenv(通过homebrew安装)。此工具在 java 版本之间切换时更改$JAVA_HOME 。

在我的情况下,我安装了多个 Java 版本,并且当前使用的全局版本是默认版本。我还发现在使用这个工具时有必要将我的$JAVA_HOME环境变量注释掉。.bash_profile

在终端中,我输入jenv global 1.8运行 java 1.8 而不是更高版本(我安装了多个版本)。

之后:

flutter doctor --android-licenses

或者

sdkmanager --licenses

两者都工作正常。

注意:如果您必须重新定义 $JAVA_HOME 环境变量,您可能需要退出并重新打开终端 shell。

于 2019-10-13T19:35:20.320 回答
2

对于那些在 Linux 上并且在flutter doctor --android-licenses.

尝试接受许可证时,我不断收到无法创建设置的警告,我通过指定 SDK 位置解决了这个问题:

sdkmanager --sdk_root=/home/adel/bin/android-sdk --licenses

然后 Sdkmanager 打印:接受所有 SDK 包许可证。

但是 Flutter 不断给出android license status unknown错误。并且尝试打电话flutter doctor --android-licenses会给我同样的无法创建我曾经得到的设置错误。

为了解决这个问题,我编辑了sdkmanager位于${your android tools location} /tools/bin/ 的脚本,并将最后一行从:

exec "$JAVACMD" "$@"

到:

exec "$JAVACMD" "$@" --sdk_root=/home/adel/bin/android-sdk

这将使 Flutter 在传递所需的 sdk_root 参数时调用 sdkmanager,这是flutter doctor --android-licenses修复问题的最终调用。

我不必使用 Java 8。

于 2020-04-05T09:37:49.397 回答
1

从flutter SDK根文件夹打开flutter_console.bat文件并运行命令

flutter doctor --android-licenses

它将接受新下载的 Android SDK 更新的许可证。每次下载和更新 Android SDK 时都需要运行它。

于 2018-11-21T06:55:17.223 回答
1

尝试降级您的 java 版本,当您的系统 java 版本与 android 的版本不兼容时会发生这种情况。一旦你改变了你的java版本,flutter doctor它就会自动接受许可证。

于 2019-04-09T13:52:23.747 回答
1

我将我的 Java 版本降级到 1.8 并解决了,这里是下载JDK8的链接

安装JDK8后运行以下命令

   flutter doctor --android-licenses
于 2019-11-29T11:21:41.977 回答
1

我的环境:Windows 10 64bit,OpenJDK 14.0.2

初始错误如上所述。

错误解决后

  1. 将环境变量 PATH 和 JAVA_HOME 中的“ C:<installation-folder>\openjdk-14.0.2_windows-x64_bin\jdk-14.0.2 ”替换为“* C:\Program Files\Android\Android Studio\jre* ”
  2. 运行flutter doctor --android-licenses并选择y作为提示
于 2020-08-01T16:51:37.753 回答
0

对我来说同样的问题,检查你的java版本至少它必须是1.8

于 2018-09-15T15:36:19.877 回答
0

对于仍然面临这个问题的人
正如 Tommie C、Aba 和其他少数人在下面回答的那样,但我发现它可能不够清楚。
尝试按照此处在 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并接受所有许可证。希望能帮助到你。

于 2019-11-20T09:51:31.453 回答
0

我找到了这个解决方案。我下载了JDK 8。然后我将JAVA_HOME的下载jdk文件路径名添加到环境变量中的用户变量中。

于 2019-12-24T22:03:24.457 回答
0

我遇到了同样的问题,就像上面提到的我试过这些。

  1. 安装 JDK 1.8 并将我的 JAVA_HOME 环境设置为 1.8 - 这不起作用
  2. 我的 Android 工作室没有显示任何“Android SDK 工具(已过时)”,但有一个“Android SDK 工具”

这对我有用:

  1. 从 SDK 管理器中删除“Android SDK 工具”
  2. 首先取消选择“Hide Obsolete Packages”重新安装它,然后选择“Android SDK Tools (Obsolete)”,安装它。
  3. 运行flutter doctor --android-licenses并选择y提示
  4. 运行flutter doctor,一切都会好起来的!!!!
于 2020-04-01T10:55:36.600 回答
0

我正面临问题。tools文件夹中也缺少该文件Android SDK夹。我相信tools文件夹仅在安装后出现Android SDL tools(obsolete)。这个选项对我不可用。

解决方案: 我将Java版本 8 升级到版本 12,并且能够安装这些工具。Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses发出命令时,您可能仍然会收到错误消息flutter doctor -v。运行命令,每次出现这个问题flutter doctor --android-licenses,点击后都会审核licenseyesAccept? (y/N):

希望它会帮助某人。

于 2020-04-11T05:16:04.537 回答
0

如果你使用自制酒桶,你可以做

brew cask install android-sdk
mkdir ~/Library/Android/sdk/tools
ln -s /usr/local/bin/ ~/Library/Android/sdk/tools/bin
flutter doctor --android-licenses
于 2020-04-19T05:05:12.193 回答
0

对于Windows 人来说,一个短期的解决方案是降级到 JDK8。希望 Flutter 能够尽快解决 Android SDK 与 >JDK8 一起使用的问题。

于 2020-06-27T16:04:09.230 回答
0

在对我的 Ubuntu 20.04 进行大量分析后,我找到了解决方案

对我来说,错误/home/rk/Android/Sdk/tools/bin/sdkmanager是缺少权限。

  1. chmod +w home/rk/Android/Sdk/tools/bin/sdkmanager

然后运行以下命令。

  1. flutter doctor --android-licenses

它会自动处理许可证。

于 2020-08-05T11:36:39.187 回答
0

遵循这些简单的步骤。

  1. 转到工具,然后是 SDK 管理器,然后单击 android SDK。
  2. 单击 SDK 更新站点选项卡。
  3. 选中说明 https://..sources 要使用 https:// 获取的复选框。
  4. 单击应用并确定。
  5. 现在重启安卓工作室。
  6. 转到 SDK 工具并选中显示隐藏过时软件包的复选框。
  7. 等待大约一分钟左右的包裹出现。
  8. 然后选择一个名为“android SDK tools (obsolete)”的包,然后按 OK。
  9. 继续安装包。
  10. 安装后重启android studio并重启cmd,然后运行flutter doctor。
  11. 这将需要几分钟,它应该工作
于 2020-08-15T14:28:28.443 回答
0

即使在 2021 年,我也面临同样的问题

  • Android Studio - 北极狐 2020.3.1 补丁 2
  • Java jdk-16.0.2
  • 安卓 SDK 版本 31.0.0
  • 颤振 2.5

除了编辑 sdkmanager.bat 文件之外,我已经尝试了上面的答案。但根本没有成功。

然后我使用“flutter upgrade”命令将flutter 2.5升级到2.5.1。现在它正在工作。“颤振医生”命令没有问题。

于 2021-09-18T11:37:40.813 回答
0

在 linux:20.10 请确保您设置了 ANDROID_HOME、ANDROID_SDK_ROOT链接的路径

我必须更新最新的命令行工具:

path/to/sdkmanager --install "cmdline-tools;latest"

让你的 path/to/sdkmanager 运行:

which sdkmanager

然后我可以运行:

flutter doctor --android-licenses
于 2022-02-06T15:55:14.150 回答
-1

警告:如果您对 JAVA_HOME 环境变量及其方向有疑问,此答案很有用。如果您没有此问题,则不应尝试此解决方案。

如果您遇到此错误并且您尝试使用颤振医生 --android-licenses 或 sdkmanager --licenses 并且您的 JAVA_HOME 环境变量有问题,那么您必须阅读此内容。

我有一个 MacOS Catalina ant,我可以通过以下步骤成功解决此问题:

  1. 打开你的终端
  2. 类型:open -e .bash_profile (你应该看到几乎两个环境变量:flutter 和 JAVA_HOME)
  3. 如果您愿意,可以将 JAVA_HOME 环境变量保存在 textEdit 文件中,然后删除 JAVA_HOME 环境变量。保存 bash_profile。
  4. 再次转到终端并运行 source $HOME/.bash_profile
  5. 再试一次颤振医生,你不应该再看到同样的错误。

如果您有疑问,请告诉我。

于 2019-12-13T22:02:38.980 回答
-1

这是我为解决我的问题所做的。请注意,您不必卸载旧版本的 Android Studio/SDK。在您安装最新版本时,Android Studio 会处理这些问题。

  1. 下载并安装最新版本的Android Studio
  2. 按照本教程中的说明进行操作
  3. 安装完成后,运行flutter doctor并检查,您的问题应该已经解决。如果问题得到解决,则无需运行flutter doctor --android-licenses命令。
于 2020-04-01T23:17:14.713 回答