[!] 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
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
答案 0 :(得分:29)
正确的解决方案是,如果您安装了android studio,那么
Android SDK Tools (Obsolete)
flutter doctor
之后,它现在将提示您运行flutter doctor --android-licenses
一旦运行license命令,请按y接受所有许可证,这应该可以解决问题答案 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。但是如果显示
找不到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 --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+以上版本将无法正常运行
注意:由 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)
以下是解决我问题的步骤:
flutter doctor --android-licenses
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)
答案 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,则解决方法
替换
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'
对于Android许可证状态未知问题,我已尝试通过以下步骤解决:
转到Android SDK位置 C:\ Users%user%\ AppData \ Local \ Android \ Sdk \ tools \ bin或 〜/库/ Android设备/ SDK /工具/ 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
答案 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)
因此,在此解决方案中,打开您的SDK管理器,然后取消选中Hide Obsolete Packages
现在,您会看到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)
答案 12 :(得分:1)
我的环境:Windows 10 64位,OpenJDK 14.0.2
初始错误如上所述。
错误已解决
答案 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)
这是我的解决方法:
安装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
复制您的Flutter Doctor警告消息以更新sdkmanager
$ /Users/YourUserName/Library/Android/sdk/tools/bin/sdkmanager --update
1〜4之后,重做一次
$ flutter doctor --android-licenses
答案 15 :(得分:1)
答案 16 :(得分:0)
AndroidSDK
。答案 17 :(得分:0)
对我来说也是同样的问题,请检查您的Java版本 至少必须是1.8
答案 18 :(得分:0)
从flutter SDK根文件夹中打开flutter_console.bat文件并运行命令
flutter doctor --android-licenses
它将接受新下载的Android SDK更新的许可证。您每次下载和更新Android SDK时都需要运行它。
答案 19 :(得分:0)
遵循这些简单步骤。
答案 20 :(得分:0)
在对Ubuntu 20.04进行了大量分析之后,我找到了解决方案
对我来说,错误是/home/rk/Android/Sdk/tools/bin/sdkmanager
缺少写入权限。
chmod +w home/rk/Android/Sdk/tools/bin/sdkmanager
然后运行以下命令。
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)
我遇到了同样的问题,就像上面提到的那样,我尝试过这些。
这对我有用:
flutter doctor --android-licenses
并选择y
作为提示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会解决这一问题。
答案 29 :(得分:-1)
警告:如果您对JAVA_HOME环境变量及其方向有疑问,此答案很有用。如果您没有此问题,则不应尝试此解决方案。
如果您遇到此错误,并尝试使用flutter doctor --android-licenses或sdkmanager --licenses,但JAVA_HOME环境变量有问题,则必须阅读此内容。
我有MacOS Catalina ant,可以通过以下步骤成功解决此问题:
请让我知道是否有疑问。