应该是没有兼容 java8以上的版本导致的问题

今天在安装flutter的时候,运行flutter doctor -v 检查有没有组件缺失的情况时,发现有一个错误提示:

✗ Android license status unknown

虽然不妨碍使用, 不过作为强迫症不能忍受

网上查看文档发现, 可以运行flutter doctor --android-licenses ,然后会给出具体的错误和建议, 运行结果是

A newer version of the Android SDK is required. To update, run:
/Users/shingle/Library/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: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

好吧, 先忍一忍, 继续google查找相关问题,终于在一个 issue 讨论中找到了一个终极解决方案. issue 地址在这里

编辑你的sdkmanager脚本文件,替换第31行为如下的内容

# 原内容:
# 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'

然后再次运行一下sdkmanager --update ,等待更新完成之后, 再次运行flutter doctor --android-licenses , 输入 y接受协议即可.

Warning: File /Users/shingle/.android/repositories.cfg could not be loaded.
4 of 6 SDK package licenses not accepted. 100% Computing updates...
Review licenses that have not been accepted (y/N)? y