搭建Flutter开发环境踩过的一些坑

无主题博客 » 未分类 » 搭建Flutter开发环境踩过的一些坑

官方安装文档:
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)

发表评论

电子邮件地址不会被公开。 必填项已用*标注