官方安装文档:
https://flutter.dev/docs/get-started/install/macos
中文安装文档:
https://flutterchina.club/setup-macos/
1.flutter doctor 提示 Android license status unknown.
运行 flutter doctor
提示如下:
[!] Android toolchain - develop for Android devices (Android SDK version 29.0.0)
✗ 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.
尝试使用 sdkmanager --update
命令更新sdk解决,没有成功,报错如下:
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:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
Google一番之后,发现却是有人遇到了同样的问题,在flutter官方github issuess 中找到了同样的问题:https://github.com/flutter/flutter/issues/16025 ,顺着文章往下看找到了tackoverflow 中的一个解决方法:
https://stackoverflow.com/questions/47150410/failed-to-run-sdkmanager-list-android-sdk-with-java-9
大概意思是修改 sdkmanager
中的 DEFAULT_JVM_OPTS
变量:
将: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'
尝试修改之后,重新执行 sdk update 操作,报错变成:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module java.se.ee not found
意思是没有找到这个 java.se.ee
Module;想想java Module是java9的新特性,目前为止,我还没有接触过java9,实在是无从下手;灵机一动,看了下当前系统的java版本,果然不出所料,我目前版本是java12,说实话java8还没完全搞懂呢。果断切换了jdk版本,并且恢复了之前对 sdkmanager
的修改,重新执行 sdk update 操作,这次成功了。但是提示了一个 warning。
sdkmanager --update
Warning: File /Users/frank/.android/repositories.cfg could not be loaded.
[=======================================] 100% Computing updates...
在指定位置创建一个 repositories.cfg
文件,并在此执行 sdk update 操作,warning消失:
touch /Users/frank/.android/repositories.cfg
sdkmanager --update
[=======================================] 100% Computing updates...
这次的目的是搭建flutter开发环境,至于为什么在 java12 环境下会出现异常,之后再研究。
sdk update 操作执行完之后再次尝试执行 flutter doctor
提示信息变成了:
[!] Android toolchain - develop for Android devices (Android SDK version 29.0.0)
! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
按照提示运行 flutter doctor --android-licenses
:
按照提示输入 y
进行确认,接着会出现几个用户协议,很长很长,反正我也看不懂,都输入y
同意就是了。
再次运行 flutter doctor
,Android 部分已经OK了。
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.0)