Flutter.io Android许可证状态未知


85

[!] Android工具链-为Android设备开发(Android SDK 27.0.3)

•Android SDK a .. \ Android \ sdk•未配置Android NDK位置(可选;对本机性能分析支持很有用)•平台android-27,构建工具27.0.3•Java二进制文件位于:C:\ Program Files \ Android \ Android Studio \ jre \ bin \ java•Java版本OpenJDK运行时环境(内部版本1.8.0_152-release-1024-b02)X And​​roid许可证状态未知。

运行Flutter doctor时,Android Sdk出现错误,尽管我仍然可以在设备上构建/运行。我只是对如何解决此问题感到好奇。我相信我已经下载了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

可能对将来的参考很有用。我使用Windows 10,并且拥有JDK 11版本。正如大多数人所建议的那样,我将JDK降级为版本8。然后执行flutter doctor。它仍然说许可证需要被接受。然后我跑去flutter doctor --android-licensesyes所有许可协议。最终问题消失了:)。带走到降级到JDK 8将解决此问题
Gihanmu

Answers:


74

如果您更新了android SDK,则许可证可能已更改。根据您执行更新的方式,您可能会提示是否接受更改,或者可能只是没有保存您确实以颤振可以理解的方式接受更改的事实。

要解决,请尝试运行

flutter doctor --android-licenses

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

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


10
它告诉我需要更新版本的Android SDK。要更新,请运行:C:\ Users \ abc \ AndroidSDK \ tools \ bin \ sdkmanager --update。我该怎么办?
Huzaifa Asif

@HuzaifaAsif您是否尝试过运行该命令?它有望解决该问题。如果失败,则您可能需要查找其他问题或询问新问题。
rmtmckenzie

2
@HuzaifaAsif,我也遇到过几次这个问题,正如Tommie C的回答,尝试手动安装Java 1.8并将$ JAVA_HOME设置到它的bin文件夹,然后运行flutter doctor --android-licenses并接受所有许可证。希望能帮助到你。
Deepak Joshi

@HuzaifaAsif您如何重新安装SDK ...由于使用Android Studio 3.6版,我陷入了此错误
Mahmoud Harooney

只是一个提示!这只是我的工作使用Java 8.
卢卡斯萨尔达尼亚

48

错误:

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'

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


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

颤振

flutter doctor --android-licenses

sdkmanager

sdkmanager --licenses

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

ps。这不适用于没有Java EE模块的Java 11/11 +。使用此选项是一个好主意,请降级Java版本或等待Flutter更新

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


4
如果同时安装了Java 11和8,则另一个选择是将JAVA_HOME导出到java8:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
Cristiano

1
我在Windows上的环境变量中将JAVA_HOME更改为JDK 8,它起作用了
GabrielBB

2
这不起作用,因为java.se.ee在Java的较新版本中已将其删除
Phani Rithvij,

1
您无法在Java 11中做到这一点。您必须安装Java8。请参阅以下答案
Vahid

29

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

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

在此处输入图片说明

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

在此处输入图片说明


这与最佳答案不同吗?
tdmiller

1
这正是截至2020年3月18日Mac的当前官方文档-请参阅flutter.dev/docs/get-started/install/…。这是一个已知问题
yair

1
感谢您的链接@yair不知道
maheshmnj

15

我写这篇文章是因为安装Flutter时感到沮丧...大多数问题是由简单的配置问题引起的。请按照以下步骤解决您的问题。

步骤1:Android许可证 --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)并按Apply 。

在此处输入图片说明 它将安装SDK,然后通过检查此路径是否存在来确认它(C\Users\__\local\Android\sdk\tools\bin\sdkmanager)

步骤3:重复1

安装后在新命令行中重复步骤1,检查其是否正常运行,否则转到步骤4

步骤4:sdkmanager-更新

它将要求您更新sdk,只需运行terminal中给出的命令即可 C\Users\__\local\Android\sdk\tools\bin\sdkmanager --update。如果它正在运行,那么它很酷。让它完成并重复步骤1,否则,如果它抛出诸如java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchemaetc之类的异常, java_error 则表明您的Java未安装或版本不正确。转到下一步

步骤5: JAVA 8.1和JAVA_HOME路径。

安装JAVA 8.1并设置JAVA_HOME路径。确保它是8.1版(注册免费帐户并从Oracle 8.1版下载,请记住11+以上版本将无法正常运行 在此处输入图片说明

注意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


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


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。


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.lang.NoClassDefFoundError:Java 9中的javax / xml / bind / JAXBException


从那以后,我尝试过该解决方案,文件似乎略有更改,但是我仍然进行了必要的修改,但仍然没有运气。我想我只是希望以后能解决此问题的更新,因为我仍然可以运行该应用程序。反正谢谢你!
tdmiller

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%

4

这是我的解决方案:

  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. 复制您的Flutter Doctor警告消息以更新sdkmanager

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

  5. 1〜4之后重做

    $ flutter doctor --android-licenses


停止!java 8.0.192-zulu不可用。可能的原因:* 8.0.192-zulu是无效版本* Java二进制文件与Darwin不兼容* Java尚未发布
Hos Mercury


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环境变量,则可能需要退出并重新打开Terminal shell。


3

请参阅-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。然后是restartAndroid Studio

不错,现在,如果您运行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用户)手动下载软件包。希望本教程对寻求解决方案的人有所帮助


这确实对我有帮助:)
说OL

2

对于那些在Linux上不断出错的人flutter doctor --android-licenses

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

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

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

但是Flutter一直给android许可证状态提供未知错误。尝试致电flutter doctor --android-licenses会给我同样的无法创建我以前得到的设置错误。

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

exec "$JAVACMD" "$@"

至:

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

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

我不必使用Java 8。


感谢您的答复,这解决了我的问题。我不明白为什么有人拒绝了它。再次感谢你。
marijnz0r

互联网上唯一对我有用的解决方案!谢谢,兄弟!:)
Punita Ojha

1

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

flutter doctor --android-licenses

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




1

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

初始错误如上所述。

错误已解决

  1. 用“ * C:\ Program Files \ Android \ Android Studio \ jre *替换” C:<安装文件夹> \ openjdk-14.0.2_windows-x64_bin \ jdk-14.0.2在环境变量PATH和JAVA_HOME中,将 ”
  2. 跑了扑医生--android-licenses并选择y作为提示




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 path($ JAVA_HOME):[如何在Windows 7上设置java_home?
在Linux上:[ /ubuntu/175514/how-to-set-java-home-for-java]
然后运行flutter doctor --android-licenses并接受所有许可证。希望能帮助到你。


0

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


0

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

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

这对我有用:

  1. 从SDK Manager删除“ Android SDK工具”
  2. 通过首先取消选择“隐藏过时的软件包”,然后选择“ Android SDK Tools(过时)”来重新安装它,进行安装。
  3. 运行flutter doctor --android-licenses并选择y提示
  4. 运行flutter doctor,一切都会好起来的!

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-licensesyes每次出现此问题时,单击,许可证就会被检查Accept? (y/N):

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


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


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

它会自动处理许可证。


0

请遵循以下简单步骤。

  1. 转到工具,然后单击SDK Manager,然后单击android SDK。
  2. 点击SDK更新网站标签。
  3. 选中指出使用https://提取https://..sources的复选框。
  4. 单击“应用”,然后单击“确定”。
  5. 现在重新启动android studio。
  6. 转到SDK工具,然后选中表明隐藏过时的软件包的复选框。
  7. 等待大约一分钟左右,以便软件包出现。
  8. 然后选择一个名为“ android SDK工具(已过时)”的软件包,然后按“确定”。
  9. 继续安装该软件包。
  10. 安装后重新启动android studio并重新启动cmd,然后运行flutter doctor。
  11. 这将需要几分钟,并且应该可以正常工作

-1

警告:如果您对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环境变量保存在textEdit文件中,然后删除JAVA_HOME环境变量。保存bash_profile。
  4. 再次转到终端并运行源$ HOME / .bash_profile
  5. 再试一次Flutter Doctor,您应该再也不会看到相同的错误。

请让我知道是否有疑问。


-1

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

  1. 下载并安装最新版本的Android Studio
  2. 请按照本教程中的说明进行操作
  3. 安装完成后,运行flutter doctor并检查,您的问题应已解决。如果问题已解决,则无需运行flutter doctor --android-licenses命令。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.