Flutter.io Android许可证状态未知

时间:2018-04-10 16:39:45

标签: android flutter

  

[!] 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医生时,我收到了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

30 个答案:

答案 0 :(得分:29)

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

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

enter image description here

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

enter image description here

答案 1 :(得分:24)

如果您更新了Android SDK,许可证可能已更改。根据您执行更新的方式,您可能会或可能不会提示您接受更改,或者它可能无法保存您确实接受这些更改的事实。

要解决此问题,请尝试运行store。这应该会提示您接受许可证(如果只是键入flutter doctor --android-licenses,可能会先询问您,然后按回车键 - 虽然它应该告诉您)。

如果您在执行此操作后仍然遇到问题,则可能需要在Flutter Github repository中打开新错误,或在this one等现有问题上添加评论,因为它可能是您的所在&# 39;重看。

答案 2 :(得分:15)

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

步骤1:Android许可 --android-licenses,将解决大多数情况

自从您来到这里以来,您已经遇到了Android工具链出现“ Android许可证状态未知”的问题,许多建议尝试一下flutter doctor --android-licenses。如果您对所有配置都满意。它应该要求是,然后按y和Voila。但是如果显示

enter image description here找不到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。

enter image description here 它将安装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+以上版本将无法正常运行 enter image description here

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

步骤6:最后一步

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

第7步:重新运行扑打医生, 您会看到它显示运行命令flutter doctor --android-licenses。因此请在终端中运行flutter doctor --android-licenses,并在询问时按y

答案 3 :(得分:6)

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

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

答案 4 :(得分:6)

错误:

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'

Windows

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。

答案 5 :(得分:4)

只需在android studio中安装以下sdk命令行工具(最新)。 enter image description here

答案 6 :(得分:3)

这也是我的问题#16025

对于线程中的异常&#34; main&#34; java.lang.NoClassDefFoundError:javax / xml / bind / annotation / XmlSchema 当您以前安装Java 9时,通常会发生此问题。 BTW它与android-sdk不兼容尝试删除Java 9 JDK如果仍然存在。

  

通常,JAXB API被认为是Java EE API,因此   Java SE 9中的缺省类路径中不再包含Java   9介绍了模块的概念,默认情况下是java.se   聚合模块在类路径(或更确切地说,模块)上可用   路径)。顾名思义,java.se聚合模块没有   包括传统捆绑的Java EE API   Java 6/7/8。幸运的是,提供了这些Java EE API   JDK 6/7/8仍然在JDK中,但它们并不在类路径上   默认情况下。以下提供了额外的Java EE API   模块

如果安装了Java9 / 10,则解决方法

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

    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. 保存文件并退出编辑器,然后再次尝试运行该命令。
    2. 对于Android许可证状态未知问题,我已尝试通过以下步骤解决:

      1. 打开终端
      2. 转到Android SDK位置 C:\ Users%user%\ AppData \ Local \ Android \ Sdk \ tools \ bin或 〜/库/ Android设备/ SDK /工具/ bin中

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

      4. 参考

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

        How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9

答案 7 :(得分:3)

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%

答案 8 :(得分:3)

引用-{https://robbinespu.gitlab.io/blog/2020/03/03/flutter-issue-fixed-android-license-status-unknown-on-windows/

因此,在此解决方案中,打开您的SDK管理器,然后取消选中Hide Obsolete Packages

enter image description here

现在,您会看到Android SDK Tools (Obsolete) 26.1.1出现。勾选该软件包并点击apply button,然后单击确定按钮。它将下载sdk。 然后restart Android 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用户)。希望本教程对寻求解决方案的人有所帮助

答案 9 :(得分:2)

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

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

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

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

但是Flutter一直显示 android许可状态未知错误。尝试调用flutter doctor --android-licenses会给我同样的无法创建设置的错误。

要解决此问题,我编辑了 $ {您的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。

答案 10 :(得分:2)

MacOS 10.15: Android Studio 3.5.1:

最适合我的解决方案是使用Java Environment tool jenv(通过homebrew安装)。当在Java版本之间切换时,此工具会更改 $ JAVA_HOME

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

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

之后:

flutter doctor --android-licenses

OR

sdkmanager --licenses

都可以。

  

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

答案 11 :(得分:1)

就我而言,问题Android SDK Command-line tools不存在

enter image description here

答案 12 :(得分:1)

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

初始错误如上所述。

错误已解决

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

答案 13 :(得分:1)

我发现这个solution是因为必须使用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。

答案 14 :(得分:1)

这是我的解决方法:

  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

答案 15 :(得分:1)

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

的链接

在安装JDK8之后运行以下命令

   flutter doctor --android-licenses

答案 16 :(得分:0)

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

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

flutter doctor --android-licenses

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

答案 19 :(得分:0)

遵循这些简单步骤。

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

答案 20 :(得分: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

它会自动处理许可证。

答案 21 :(得分:0)

对于 Windows用户,短期的解决方案是降级到JDK8。希望flutter能够尽快解决此问题,以便Android SDK与> JDK8一起使用。

答案 22 :(得分:0)

如果您使用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

答案 23 :(得分: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,每次出现此问题yes

时,单击Accept? (y/N):都会检查许可证。

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

答案 24 :(得分:0)

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

答案 25 :(得分: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,一切都会好起来!!!

答案 26 :(得分: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):[How to set java_home on Windows 7?
在Linux上:[https://askubuntu.com/questions/175514/how-to-set-java-home-for-java]
然后运行@Component public class ThreadPoolMetricProbe implements MeterBinder { @Inject private Executor taskExecutor; private AtomicDouble executorCompletedTaskCount; private AtomicDouble executorMaximumPoolSize; private AtomicDouble executorLargestThreadsNumberEver; private AtomicDouble executorCurrentNumberOfThreads; private AtomicDouble executorTotalTaskCount; private AtomicDouble executorActiveThreadsCount; @Override public void bindTo(MeterRegistry meterRegistry) { ThreadPoolTaskExecutor exec = (ThreadPoolTaskExecutor) taskExecutor; long completedTaskCount = exec.getThreadPoolExecutor().getCompletedTaskCount(); int largestPoolSizeEver = exec.getThreadPoolExecutor().getLargestPoolSize(); int maximumPoolSize = exec.getThreadPoolExecutor().getMaximumPoolSize(); int currentNumberOfThreads = exec.getThreadPoolExecutor().getPoolSize(); long totalTaskCountEver = exec.getThreadPoolExecutor().getTaskCount(); int activeThreadsCount = exec.getThreadPoolExecutor().getActiveCount(); executorCompletedTaskCount = meterRegistry.gauge("executor.completed.task.count", new AtomicDouble(completedTaskCount)); executorMaximumPoolSize = meterRegistry.gauge("executor.maximum.pool.size", new AtomicDouble(maximumPoolSize)); executorLargestThreadsNumberEver = meterRegistry.gauge("executor.largest.threads.number.ever", new AtomicDouble(largestPoolSizeEver)); executorCurrentNumberOfThreads = meterRegistry.gauge("executor.current.number.of.threads", new AtomicDouble(currentNumberOfThreads)); executorTotalTaskCount = meterRegistry.gauge("executor.total.tasks.ever.countunt", new AtomicDouble(totalTaskCountEver)); executorActiveThreadsCount = meterRegistry.gauge("executor.active.threads.count", new AtomicDouble(activeThreadsCount)); } @Scheduled(fixedDelay = 5000) public void measure(){ ThreadPoolExecutor threadPoolExecutor = ((ThreadPoolTaskExecutor) taskExecutor).getThreadPoolExecutor(); executorCompletedTaskCount.set(threadPoolExecutor.getCompletedTaskCount()); executorMaximumPoolSize.set(threadPoolExecutor.getMaximumPoolSize()); executorLargestThreadsNumberEver.set(threadPoolExecutor.getLargestPoolSize()); executorCurrentNumberOfThreads.set(threadPoolExecutor.getPoolSize()); executorTotalTaskCount.set(threadPoolExecutor.getTaskCount()); executorActiveThreadsCount.set(threadPoolExecutor.getActiveCount()); } 并接受所有许可证。希望对您有所帮助。

答案 27 :(得分:0)

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

答案 28 :(得分:-1)

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

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

答案 29 :(得分:-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,您应该再也不会看到相同的错误。

请让我知道是否有疑问。