Flutter编译Android 64位程序遇许可证及JDK相关问题求助
解决Flutter编译时Android许可证及sdkmanager的JAXB类缺失问题
我之前也碰到过完全一样的问题,根源就是你用的JDK 13.0.1和旧版Android SDK工具不兼容,给你一套亲测有效的解决方案:
第一步:降级JDK到8版本
Android SDK的旧版sdkmanager依赖Java EE里的JAXB API,但JDK 9及以上版本已经把这些API从JDK内置中移除了,这就是你看到javax.xml.bind.annotation.XmlSchema找不到错误的核心原因。你需要:
- 卸载当前的JDK 13.0.1,安装Oracle JDK 8或者OpenJDK 8(两者任选其一即可)
- 配置系统的
JAVA_HOME环境变量,指向JDK 8的安装路径 - 确保系统
PATH环境变量里,JDK 8的bin目录排在其他JDK版本的前面,避免调用到旧版本
第二步:完成SDK更新和许可证配置
- 重新打开命令行(确保环境变量生效),执行
sdkmanager --update,这时候应该能正常更新Android SDK了 - 接着运行
flutter doctor --android-licenses,按照提示输入y接受所有许可证协议 - 最后再执行
flutter doctor,检查Android toolchain的问题是否已经解决
问题链解释
你遇到的一系列问题其实是连锁反应:
- 最初的
JAVA_HOME提示,大概率是升级Android Studio后,它对JDK版本的检测变得更严格了 - 升级后出现的许可证状态未知,是因为SDK需要更新,但旧的
sdkmanager和JDK 13不兼容,导致无法完成更新,进而无法验证许可证状态
你提供的命令执行日志参考:
c:\src\flutter>flutter doctor Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, v1.9.1+hotfix.5, on Microsoft Windows [Version 10.0.17763.805], locale en-CA) [!] Android toolchain - develop for Android devices (Android SDK version 29.0.2) X Android license status unknown. Try re-installing or updating your Android SDK Manager. See https://developer.android.com/studio/#downloads or visit https://flutter.dev/setup/#android-setup for detailed instructions. [√] Android Studio (version 3.5) [!] Connected device ! Doctor found issues in 2 categories. c:\src\flutter>flutter doctor --android-licenses A newer version of the Android SDK is required. To update, run: C:\Users\mctrivia\AppData\Local\Android\sdk\tools\bin\sdkmanager --update c:\src\flutter>C:\Users\mctrivia\AppData\Local\Android\sdk\tools\bin\sdkmanager --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:602) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 5 more
内容的提问来源于stack exchange,提问作者Matthew Cornelisse
相关产品推荐
相关产品推荐

