[!] 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 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
小智 216
只需在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
Run Code Online (Sandbox Code Playgroud)
...然后您将获得一大堆许可证,可在您啜饮您最喜爱的饮料时阅读。
mah*_*mnj 37
正确的解决方案是,如果您安装了 android studio
Android SDK Tools (Obsolete)flutter doctor,它现在应该提示你flutter doctor --android-licenses
运行许可证命令,通过点击 y 接受所有许可证,它应该可以解决问题rmt*_*zie 31
如果您更新了android SDK,许可证可能已更改.根据您执行更新的方式,您可能会或可能不会提示您接受更改,或者可能只是因为您确实接受了这些更改,因为这样可以让客户理解.
要解决,请尝试运行flutter doctor --android-licenses.这应该会提示您接受许可证(它可能会先询问您,如果只是键入y并按下输入 - 尽管它应该告诉您).
如果您仍然有这样做之后的问题,它可能是值得要么开在一个新的bug 扑Github上库,或像现有的问题添加注释这一个,因为它可能是你所看到的.
Aja*_*rge 20
我写这个是因为在安装 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 在新终端中运行该命令,它将起作用
STEP 7: 重新运行 flutter doctor,你可以看到它说运行命令flutter doctor --android-licenses。所以flutter doctor --android-licenses 在终端中运行并在询问时按 y
cod*_*ade 16
错误:
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
Run Code Online (Sandbox Code Playgroud)
是因为当前的SDK版本与Java 9不兼容.
因此,要解决此问题,您可以将Java版本降级到Java 8,或者使用解决方法可以在终端上导出以下选项:
Linux的:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Run Code Online (Sandbox Code Playgroud)
Windows:
set JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Run Code Online (Sandbox Code Playgroud)
而为了让坚持下来,你可以导出JAVA_OPTS在您的个人资料文件在Linux( .zshrc,.bashrc等)或永久添加为环境在Windows上.
然后,您可以键入flutter或sdkmanager命令:
颤动:
flutter doctor --android-licenses
Run Code Online (Sandbox Code Playgroud)
sdkmanager:
sdkmanager --licenses
Run Code Online (Sandbox Code Playgroud)
并在需要接受许可证时输入Y.
我找到了这个必须使用 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'
Run Code Online (Sandbox Code Playgroud)
通过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,解决方法
代替
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
Run Code Online (Sandbox Code Playgroud)
有了这个
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Run Code Online (Sandbox Code Playgroud)
对于 Android 许可证状态未知问题,我尝试通过以下步骤解决:
转到您的 Android SDK 位置 C:\Users%user%\AppData\Local\Android\Sdk\tools\bin 或 ~/Library/Android/sdk/tools/bin
运行命令:./sdkmanager --license
参考
无法使用 Java 9 运行 sdkmanager --list (Android SDK)
如何解决 Java 9 中的 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
小智 5
这是我的解决方案:
安装 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
| 归档时间: |
|
| 查看次数: |
29390 次 |
| 最近记录: |