在搭建Flutter Android环境后,在终端执行Flutter doctor
命令,踩了一些坑,记录下。
坑一
在终端执行flutter doctor --android-licenses
,提示Android sdkmanager tool not found
解决办法
需要在Android Studio(或者IDEA)装Android SDK Tools
坑二
在终端执行flutter doctor --android-licenses
,提示
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:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 5 more
解决办法
需要在Android Studio(或者IDEA)装Android SDK Command-line Tools
坑三
执行Flutter doctor
提示:
[!]Android Studio
x Flutter plugin not installed; this adds Flutter specific functionality.
x Dart plugin not installed; this adds Dart specific functionality.
解决办法
情况一
按照要求去插件市场下载安装Flutter插件(一般会提示,需要顺带安装dart)就可以解决了。
情况二
但有些情况,你明明已经安装了,也重启了Android Studio、重启电脑了还是这样的提示。这是因为Android Studio安装的插件文件路径和该版本Flutter SDK所能识别的路径不一致导致的。需要添加软链接来解决,具体如下:
像我们公司项目用的Flutter 版本很老,是Flutter 1.12.13+hotfix.9
, 在使用Android Studio时就很容易出现上面的问题,需要终端执行
ln -s ~/Library/Application\ Support/Google/AndroidStudio4.2/plugins ~/Library/Application\ Support/AndroidStudio4.2
也就是说,我这个版本的Android Studio插件是保存在~/Library/Application\ Support/Google/AndroidStudio4.2/plugins
路径的,而当前版本的Flutter SDK却在~/LIbrary/Application\ Support/AndroidStudio4.2
里面找,当然找不到了,需要添加一个软链接(替身文件),使得能够被正常访问。
同理,在使用IntelliJ IDEA时也一样,但是IDEA插件真实安装位置可能是下面几个当中的一个(跟版本有关):
-
/Users/用户名/Library/Application Support/IntelliJIdeaXXXXXX
,用于保存安装的插件 -
/Users/用户名/Library/Caches/IntelliJIdeaXXXXXX
,用于保存缓存、日志、以及本地的版本控制信息(local history 这个功能) -
/Users/用户名/Library/Preferences/IntelliJIdeaXXXXXX
,用于保存自己IDEA的个人配置,相当于 Windows版本的config目录 -
/Users/用户名/Library/Application Support/JetBrains/IntelliJIdeaXXXXXX
,这个目录下也有其配置文件
坑四
执行Flutter doctor
提示:
[!]Android Studio
x Unable to find bundled java version.
- 如果
Applications/Android Studio.app/Contents/jre/
下没有jdk
文件夹,那么将原本Applications/Android Studio.app/Contents/jre/
里面的所有东西整个拷贝到jdk
文件夹里面。 - 如果连
Applications/Android Studio.app/Contents/jre/
也不存在,那么就copyApplications/Android Studio.app/Contents/jbr
变成Applications/Android Studio.app/Contents/jre
。