繁体   English   中英

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 医生时收到 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

只需在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,则许可可能已更改。 根据您进行更新的方式,您可能会或可能不会被提示接受更改,或者它可能只是没有保存您确实以一种颤振可以理解的方式接受它们的事实。

要解决,请尝试运行

flutter doctor --android-licenses

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

如果您仍然有这样做之后的问题,它可能是值得要么开在一个新的bug扑Github上库,或像现有的问题添加注释这一个,因为它可能是你看到的。

错误:

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更新

参考: JDK 11:Java EE 模块之路的尽头

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

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

在此处输入图片说明

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

在此处输入图片说明

我写这个是因为在安装 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

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

  1. 打开你的终端
  2. 输入flutter doctor --android-licenses
  3. y接受,此过程可能会发生多次。 完成!

在我的情况下,问题是缺少Android SDK Command-line tools

在此处输入图片说明

我找到了这个必须使用 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,解决方法

  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

这是我的解决方案:

  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

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%

参考-- 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 用户)。 希望本教程可以帮助寻找解决方案的人

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它将自动接受许可证。

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

安装JDK8后运行以下命令

   flutter doctor --android-licenses

我的环境:Windows 10 64 位,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作为提示

对我来说同样的问题,请检查您的 Java 版本至少必须是 1.8

  1. 打开安卓工作室。
  2. 转到文件-> 设置。
  3. 搜索AndroidSDK
  4. 将您的 API 级别更新到最新版本。
  5. 然后重新加载 Android Studio。

对于仍然面临问题的人
正如下面汤米 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文件路径名添加到环境变量中的用户变量中。

我遇到了同样的问题,如上所述,我尝试了这些。

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

这对我有用:

  1. 从 SDK Manager 中删除“Android SDK Tools”
  2. 首先取消选择“Hide Obsolete Packages”,然后选择“Android SDK Tools (Obsolete)”,重新安装它。
  3. 运行flutter doctor --android-licenses并选择y作为提示
  4. 运行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缺少写入权限。

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

然后运行下面的命令。

  1. flutter doctor --android-licenses

它会自动处理许可证。

请按照以下简单步骤操作。

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

即使在 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。 现在它正在工作。 “颤振医生”命令没有问题。

在 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 蚂蚁,我可以通过以下步骤成功解决这个问题:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM