Flutter.io Android 许可证状态未知

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 doctor 时,Android SDK 出现错误,尽管我仍然可以 build/run 在我的设备上使用它。我只是好奇如何解决这个问题。我相信我已经下载了最新版本的 Android SDK,不确定发生了什么,因为我上周没有遇到这个问题。

##新问题 在评论中进行了几个可能的修复后,它导致了一个新问题。我安装了更新版本的 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

如果您更新了 android SDK,许可证可能已更改。根据您进行更新的方式,系统可能会提示您接受更改,也可能不会提示您接受更改,或者它可能不会以 flutter 可以理解的方式保存您确实接受了更改的事实。

要解决,请尝试 运行

flutter doctor --android-licenses

这应该会提示您接受许可(它可能会先询问您,以防万一只需键入 y 并按回车键 - 虽然它应该会告诉您)。

如果这样做之后您仍然遇到问题,可能值得在 Flutter Github repository, or adding a comment on an existing issue like this one 中打开一个新错误,因为它可能就是您所看到的。

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

  1. 打开终端
  2. 输入flutter doctor --android-licenses
  3. y接受,这个过程可能会出现多次。完成!

这也是我的问题#16025

对于线程中的异常 "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema 这个问题似乎通常发生在您之前安装 Java 9 时。顺便说一句,它与 android-sdk 不兼容,如果仍然存在,请尝试删除 Java 9 JDK。

In general JAXB APIs are considered to be Java EE APIs, and therefore are no longer contained on the default class path in Java SE 9. Java 9 introduces the concepts of modules, and by default the java.se aggregate module is available on the class path (or rather, module path). As the name implies, the java.se aggregate module does not include the Java EE APIs that have been traditionally bundled with Java 6/7/8. Fortunately, these Java EE APIs that were provided in JDK 6/7/8 are still in the JDK, but they just aren't on the class path by default. The extra Java EE APIs are provided in the following modules

安装了 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 license status unknown 问题,我尝试通过以下步骤解决:

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

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

参考资料

Failed to run sdkmanager --list (Android SDK) with Java 9

GitHub issue community 提供的这一行解决了我的问题,这里只是为了以防万一它能帮助到其他人。

@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%

错误:

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 版本与 Java9.

不兼容

因此,要解决它,您可以将 java 版本降级到 Java 8,或者使用解决方法,您可以在终端上导出以下选项:

Linux:

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

Windows:

set JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

为了让它坚持下去,您可以在 Linux(.zshrc.bashrc 等)上导出配置文件中的 JAVA_OPTS 或添加为永久在 Windows.

上的环境

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

颤动:

flutter doctor --android-licenses

sdkmanager:

sdkmanager --licenses

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

ps. 这不适用于 Java 11/11+,它没有 Java EE 模块。对于此选项是个好主意,请降级 Java 版本或等待 Flutter update.

参考:JDK 11: End of the road for Java EE modules

和我一样的问题,检查你的 java 版本 至少必须是 1.8

打开 flutter SDK 根文件夹中的 flutter_console.bat 文件和 运行 命令

flutter doctor --android-licenses

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

这是我的解决方案:

  1. 安装SDKMan

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

  2. 正在设置您的 bash_profile

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

    $ source ~/.bash_profile

  3. 找到javasdk,select想安装版本

    $ sdk ls java

    $ sdk install java 8.0.192-zulu

  4. 复制你的 flutter doctor 警告信息来更新 sdkmanager

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

  5. 1~4之后重做

    $ flutter doctor --android-licenses

尝试 ,当您的系统 java 版本与 android 的版本不兼容时,就会发生这种情况。一旦您将 java 版本更改为 运行 flutter doctor,它将自动接受许可证。

我发现这个 solution 因为必须使用 JDK 8(您现在需要一个帐户才能下载!)- 使用 [=24= 附带的嵌入式 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'

Command-line 通过 gradlew 和任何其他 well-behaved 脚本构建,然后将使用 Android Studio 2.2+ 附带的 SDK 版本。

*我的Mac还在用默认的Java7.

MacOS 10.15: Android Studio 3.5.1:

对我有用的解决方案是使用 Java Environment tool jenv (installed via homebrew)。当在 java 版本之间切换时,此工具会更改 $JAVA_HOME

在我的例子中,我安装了多个 Java 版本,当前使用的全球版本是默认版本。我还发现有必要在使用此工具时在我的 .bash_profile 中注释掉 $JAVA_HOME 环境变量。

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

之后:

flutter doctor --android-licenses

sdkmanager --licenses

两者都很好。

Note: You may need to exit and reopen your Terminal shell if you have to redefine the $JAVA_HOME environment variable.

对于仍然面临问题的人:
正如下面由 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) : [How to set java_home on Windows 7?.
在 linux 上:[https://askubuntu.com/questions/175514/how-to-set-java-home-for-java].
然后 运行 flutter doctor --android-licenses 并接受所有许可。希望对你有帮助。

我将 Java 版本降级到 1.8 并已解决,这里是 link 下载 JDK8

运行安装JDK8后执行如下命令

   flutter doctor --android-licenses

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

如果你有这个错误并且你尝试使用 flutter doctor --android-licenses 或 sdkmanager --licenses 而你的 JAVA_HOME 环境变量有问题,那么你必须阅读这个。

我有一个 MacOS Catalina ant 我可以通过后续步骤成功解决这个问题:

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

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

我找到了这个solution.I下载JDK8.Then我把下载jdkJAVA_HOME的文件路径名添加到环境变量的用户变量中

如果您安装了 android 工作室,那么正确的解决方案是

  1. 打开 SDK 管理器
  2. 在 SDK 工具下取消选中隐藏底部的过时包
  3. 然后您应该会看到一个名为 Android SDK Tools (Obsolete)
  4. 的选项

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

我写这篇文章是因为在安装 flutter 时遇到了挫折......大多数问题都是由简单的配置问题引起的。请按照以下步骤解决您的问题。

STEP 1:ANDROID 许可证 --android-许可证,将解决大多数情况

既然你在这里,你就遇到了 Android 工具链的 "Android License Status Unknown" 问题,许多人建议尝试 flutter doctor --android-licenses。如果你对所有配置都很好。它应该要求是,然后按 y 和 Voila。但是如果它显示

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,取消选中隐藏过时的包,select 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。如果是运行ning,那就酷了。让它完成并重复第 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 命令在新终端 就可以了

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

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

  1. 安装了 JDK 1.8 并将我的 JAVA_HOME env 设置为 1.8 - 这没有用
  2. 我的 Android 工作室没有显示任何 "Android SDK Tools (Obsolete)" 但有一个 "Android SDK Tools"

这对我有用:

  1. 从 SDK 管理器中删除 "Android SDK Tools"
  2. 通过先删除 select "Hide Obsolete Packages" 然后 select "Android SDK Tools (Obsolete)" 重新安装它。
  3. 运行 flutter doctor --android-licenses 和 select y 用于提示
  4. 运行 flutter doctor 一切都会好的!!!!

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

  1. 已下载并安装最新版本 Android Studio
  2. 按照此 tutorial
  3. 中的说明进行操作
  4. 安装完成后,运行 flutter doctor检查一下,你的问题应该已经解决了。如果问题已解决,则无需 运行 flutter doctor --android-licenses 命令。

对于那些使用 Linux 并且在 flutter doctor --android-licenses 期间不断出错的人。

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

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

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

但是 Flutter 一直给出 android 许可证状态未知 错误。并且尝试调用 flutter doctor --android-licenses 会给我同样的 could not create settings 错误,我曾经遇到过。

为了解决这个问题,我编辑了位于 ${您的 android 工具位置}/tools/bin/ 的 sdkmanager 脚本,并更改​​了最后一个行来自:

exec "$JAVACMD" "$@"

收件人:

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

这会使 Flutter 在传递所需的 sdk_root 参数时调用 sdkmanager,最终调用 flutter doctor --android-licenses 解决了这个问题。

我不必使用 Java 8.

参考--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 Android 工作室

很好,现在如果你 运行 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 用户)。希望本教程对寻求解决方案的人有所帮助

我遇到了问题。 tools 文件夹也从 Android SDK 文件夹中丢失。我相信 tools 文件夹仅在安装 Android SDL tools(obsolete 后出现)。我无法使用此选项。

解法: 我将 Java 从版本 8 升级到版本 12,并且能够安装这些工具。在给出命令 flutter doctor -v 时,您可能仍然会收到错误 Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses。 运行 命令 flutter doctor --android-licenses,每次出现此问题时,单击 yes 时将审查许可证 Accept? (y/N):

希望它能对某人有所帮助。

如果你使用homebrew cask,你可以做到

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 一起工作的问题。

我的环境:Windows10 64位,OpenJDK 14.0.2

初始错误如上所述。

错误已在

后解决
  1. 将“C:<安装文件夹>\openjdk-14.0.2_windows-x64_bin\jdk-14.0.2”替换为“* C:\程序Files\Android\AndroidStudio\jre*" 在环境变量 PATH & JAVA_HOME
  2. 运行flutter doctor --android-licenses并选中y 为提示

在对我的 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

它会自动处理许可证。

按照这些简单的步骤操作。

  1. 转到工具,然后是 SDK 管理器,然后单击 android SDK。
  2. 单击 SDK 更新站点选项卡。
  3. 选中声明 https://..sources to be fetched using https:// 的复选框。
  4. 点击应用并确定。
  5. 现在重新启动 android 工作室。
  6. 转到 SDK 工具并选中隐藏过时包的复选框。
  7. 等待大约一分钟左右,包就会出现。
  8. 然后 select 一个名为“android SDK 工具(已过时)的包,然后按确定。
  9. 继续安装包。
  10. 安装完成后重启android studio 并重启cmd,然后运行 flutter doctor.
  11. 这将需要几分钟,它应该可以工作

只需在 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

...然后您将获得一大堆许可证,可以一边啜饮您最喜欢的饮料一边阅读。

在我的案例中,问题丢失了 Android SDK Command-line tools

即使在 2021 年,我也遇到了同样的问题

  • Android工作室-北极狐2020.3.1补丁2
  • Java jdk-16.0.2
  • Android SDK 版本 31.0.0
  • 颤振 2.5

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

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

在linux:20.10 请确保为 ANDROID_HOME、ANDROID_SDK_ROOT link

设置路径

我必须更新最新的 cmdline-tools:

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

得到你的 path/to/sdkmanager 运行 :

which sdkmanager

然后我可以 运行 :

flutter doctor --android-licenses