首页 文章

Flutter.io Android许可证状态未知

提问于
浏览
7

[!] Android工具链 - 针对Android设备开发(Android SDK 27.0.3)•Android SDK a .. \ Android \ sdk•Android NDK位置未配置(可选;对原生分析支持很有用)•平台android-27,构建-tools 27.0.3•Java二进制文件:C:\ Program Files \ Android \ Android Studio \ jre \ bin \ java•Java版OpenJDK运行时环境(版本1.8.0_152-release-1024-b02)X Android许可证状态未知 .

当我运行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

8 回答

  • 0

    如果您更新了android SDK,许可证可能已更改 . 根据您执行更新的方式,您可能会或可能不会提示您接受更改,或者可能只是因为您确实接受了这些更改,因为这样可以让客户理解 .

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

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

  • 14

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

    • 打开终端

    • 类型 flutter doctor --android-licenses

    • y 接受,此过程可能会多次发生 . 完成!

  • 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( .zshrc.bashrc 等)或在Windows上永久添加为环境 .


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

    Flutter

    flutter doctor --android-licenses
    

    sdkmanager

    sdkmanager --licenses
    

    并在需要接受许可证时输入Y.

  • 1

    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

    这也是我的问题#16025

    对于线程“main”中的异常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 6/7/8捆绑在一起的Java EE API . 幸运的是,JDK 6/7/8中提供的这些Java EE API仍然在JDK中,但它们默认情况下不在类路径上 . 以下模块中提供了额外的Java EE API

    Solution to workaround if you have Java9/10 installed

    • 在编辑器中打开sdkmanager .

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

    For Android license status unknown issue, I've tried to solve by these steps:

    • 打开终端

    • 转到Android SDK位置C:\ Users%user%\ AppData \ Local \ Android \ Sdk \ tools \ bin或〜/ Library / Android / sdk / tools / bin

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

    参考

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

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

  • 0

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

  • 3

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

    flutter doctor --android-licenses
    

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

  • 0

    这是我的解决方案:

    • 安装SDKMan

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

    • 设置你的bash_profile

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

    $ source ~/.bash_profile

    • 找到java sdk,并选择要安装的版本

    $ sdk ls java

    $ sdk install java 8.0.192-zulu

    • 复制你的颤动医生警告信息以更新sdkmanager

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

    • 1~4之后,重做它

    $ flutter doctor --android-licenses

相关问题