文章目录[隐藏]
缘由
最近重温Android的开发,想到了一直没有配置好的flutter,又想尝试配置,结果还是失败!最后感觉失败之处是java版本过高了。但也有点不想弄了,java都到13了,你一个flutter连JAVA11都支持不了,我也不清楚吐槽什么了,不过也有点反思为啥有些东西的支持永远那么靠后?难道是为了兼容大部分的系统配置?或许我得考虑考虑把配置给将降了,不清楚是否可以多个环境,有空可以研究研究;
安装flutter
下载flutter
推荐到Github去下载
flutter镜像配置
- 编辑环境变量如下:
变量 值 FLUTTER_STORAGE_BASE_URL https://mirrors.tuna.tsinghua.edu.cn/flutter PUB_HOSTED_URL https://mirrors.tuna.tsinghua.edu.cn/dart-pub
flutter升级
我大概一年前捣鼓过这玩意,有安装就先更新了一下;
flutter upgrade
运行 flutter doctor
打开一个新的命令提示符或PowerShell窗口并运行以下命令以查看是否需要安装任何依赖项来完成安装:
flutter doctor
在命令提示符或PowerShell窗口中运行此命令。目前,Flutter不支持像Git Bash这样的第三方shell。
该命令检查您的环境并在终端窗口中显示报告。Dart SDK已经在捆绑在Flutter里了,没有必要单独安装Dart。 仔细检查命令行输出以获取可能需要安装的其他软件或进一步需要执行的任务(以粗体显示)
unable to locate ANDROID SDK
- 运行如上图所示则需添加环境变量
添加后需重启terminal才能生效,后继续运行flutter doctor检查
变量 | 值 |
---|---|
ANDROID_HOME | 和你系统环境变量ANDROID_SDK_HOM的值一样 |
Android license status unknown
- 运行如下命令即可
flutter doctor --android-licenses
一般如果是JAVA11版本一下的都没有问题了,JAVA11及以后因为缺少java.se.ee而陷入无法配置成功的麻烦;
一堆JAVA报错(如为下图,则建议降级JAVA到JAVA8)
报错如下:
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)
... 5 more
- 如何解决?
找到自己SDK目录(tools\bin\sdkmanager.bat)加以编辑:
DEFAULT_JVM_OPTSk 看到原值是
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."
将其(前面加最前面 @rem 即可)注释掉,修改为:
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
- 再次运行flutter doctor --android-licenses
结果提示为Error occurred during initialization of boot layer
java.lang.module.FindException: Module java.se.ee not found
后查到的一个说法是,后面我就放弃了,不太可能为了一个软件而改动其他软件需要的java环境,真无语了!
This workaround only works for Java 9-10, java 11 removed java.se.ee entirely.
The Google team has known about the deprecation of se.ee since 2017. It's fucking retarded that they haven't updated it.
更新
我把JAVA降级到8版本,就不需要更改tools\bin\sdkmanager.bat文件了,如果更改的请改回默认值;
- 后运行flutter doctor --android-licenses结果如下所示
会让你连输入几个确定的y
- 再次运行则显示
- 运行 flutter doctor
如有下面的配置,则去Android Studio 安装插件;
android 配置
- 没安装的,移步Android Studio 配置
- 在设置里搜索安装插件Flutter即可,具体使用移步官网;
参考
- flutter中文网
- Flutter 镜像安装帮助
- flutter 开发环境配置 遇到各种问题的学习笔记
- 安卓学习笔记(21)-flutter doctor时显示X Unable to locate Android SDK的解决方案
- java.lang.module.findexception: Module java.se.ee not found
- How to fix 'java.lang.module.FindException: module java.se.ee not found' error when packaging my kivy application with buildozer