更新后Flutter的Android许可证验证失败,求解决方案
解决Android许可证验证失败与
javax/xml/bind/annotation/XmlSchema缺失问题 嘿,我立刻就发现你问题的核心了——你当前用的是OpenJDK 11,而Android SDK的sdkmanager以及flutter doctor --android-licenses命令依赖的javax.xml.bind模块在Java 9及以上版本里被移除了!这就是为什么你之前尝试的重装SDK、替换工具文件夹这些操作都没起效,根本问题出在Java版本的兼容性上。
下面给你几个可行的解决方案,按推荐程度排序:
方案一:切换到Java 8(最稳定靠谱的选择)
Android SDK工具对Java 8的兼容性是最完善的,步骤很简单:
- 下载并安装AdoptOpenJDK 8(或者Oracle JDK 8,选你顺手的就行)
- 配置系统环境变量:
- 把Java 8安装目录下的
bin路径放到系统PATH的最顶端,确保系统优先调用Java 8 - 设置
JAVA_HOME环境变量指向Java 8的安装根目录
- 把Java 8安装目录下的
- 验证:新开一个终端窗口,执行
java --version,确认输出的是Java 8的版本信息 - 最后重新执行
flutter doctor --android-licenses,跟着提示输入y接受所有许可证就行
方案二:给命令添加Java模块参数(不用切换Java版本)
如果你不想换掉当前的Java 11,可以在执行命令时手动补上缺失的模块:
- 直接在终端执行
sdkmanager命令时加上参数:sdkmanager --licenses --add-modules java.xml.bind - 或者针对
flutter命令,给它加上JVM参数:
(Windows系统把flutter doctor --android-licenses -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/ext$JAVA_HOME换成你的Java 11实际安装路径,比如C:\Program Files\AdoptOpenJDK\jdk-11.0.7.10-hotspot)
方案三:通过Android Studio配置Java版本
如果你平时用Android Studio开发,可以直接在IDE里配置:
- 打开Android Studio,依次点
File > Project Structure > SDK Location - 在
JDK location那里选择Java 8的安装目录 - 重启Android Studio,然后用IDE内置的终端执行
flutter doctor --android-licenses
完成以上任意一种方案后,再跑一遍flutter doctor,就能看到Android license status unknown的错误消失啦!
内容的提问来源于stack exchange,提问作者Anne Almeida




