大家好,我是 17。
Android studio 是2020 年的版本,有点老,昨天突发想法,升级到了 Android Studio Electric Eel 2022.1。
计划今天和明天写那个 Flutter WebView 优化的文章,这篇是 在 Flutter 中使用 webview_flutter 4.0 | js 交互 的续集。早上起来,发现 Flutter 有新版本了,版本号是 3.7.3。既然已经是第三个小版本了,那应该不会有什么坑了吧,手一抖就开始升级了。升级过程很顺利,一跑应用傻眼了,报错!。用 flutter doctor
检查输出以下信息
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.7.3, on macOS 12.5 21G72 darwin-x64, locale zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
✗ Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
[✓] Chrome - develop for the web
[!] Android Studio (version 2022.1)
✗ Unable to find bundled Java version.
[✓] VS Code (version 1.75.1)
[✓] Connected device (4 available)
[✓] HTTP Host Availability
根据提示,执行命令
flutter doctor --android-licenses
然后又报错了
Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocationsProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
看起来是有两个 java 起了冲突。用 java_home 命令查了一下,发现果然有两个版本存在,11.0 和 1.8。
/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
11.0.14.1 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/qihoo/Library/Java/JavaVirtualMachines/corretto-11.0.14.1/Contents/Home
1.8.0_312 (x86_64) "Amazon" - "Amazon Corretto 8" /Users/qihoo/Library/Java/JavaVirtualMachines/corretto-1.8.0_312/Contents/Home
解决的办法有两个,一个是删除老的版本,一个是增加环境变量 JAVA_HOME。我觉得环境变量更简单也更安全,于是在 ~/.bash_profile 中增加 JAVA_HOME 的变量输出
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
再次执行 flutter doctor --android-licenses
,居然好了,大喜,这样我就不用删除 java 的老版本了。兴冲冲的再次执行 flutter doctor
,结果被泼了一盆冷水,还是报错 Unable to find bundled Java versio。革命尚未成功,同志还需努力。
然后在网上碰巧查到有人说新建一个文件夹 jre 把 jbr 中的内容都 copy 到 jre中。我一想,如果是名字的问题,那也不用 copy 了,直接建一个软链不是更香吗?然后尝试下面的命令。
ln -s /Applications/Android\ Studio.app/Contents/jbr /Applications/Android\ Studio.app/Contents/jre
再次执行 flutter doctor
现在是一片绿色,现在看起来格外的顺眼。
到这里其实就结束了,但文章显得有点短,我再闲扯两个可能遇到的问题。如果你没有这样的问题,直接跳过。
还有你可能还会遇到这个错误 无法打开“iproxy”,因为无法验证开发者。这个解决起来很简单
sudo xattr -d com.apple.quarantine 你本机的flutter根目录/bin/cache/artifacts/usbmuxd/iproxy
android studio 新版本的 设置 jdk 的位置变了, 现在移到 gradle setting 了。
当你在 build gradle 中指定 compileSdkVersion 33 的时候,可能会报错。解决的办法很简单,安装最新的 sdk 即可。
找到更新 sdk 的位置分两步
-
在 mac 左上角找到 Android Studio,选 Preferences 菜单
-
找到 System Settings 下面的 Android SDK,把 右边的 Android 13.0 勾选上更新即可。
模拟器也要同步升级。android studio 顶部靠右的手机的图标,这个是 Device Manager。在下面会列出当前 Device。点右边的笔形图标,可以更新 API
再说一个 ios 可能遇到的问题,本老好好的,突然有一天无法 签名,根据报错信息(没有保留现在场)说我的配置有问题,我查了半天也没发现有问题,版本号设置也查了,最小都是 11.0,然后我猜想是不是 apple 开发者账号的问题。在网页登录开发者账号立即弹出同意新协议的弹窗,同意后,再次 build 签名成功。
因为 ios 的这个问题没有记录,所以无法给出准确的报错信息了,下次再遇到什么问题都要详细记下来。小伙伴们遇到哪些问题,还是及时分享的好,这样其它人遇到了可以节省很多时间。
如果 flutter build 出现什么问题,第一时间 可以用 flutter clean 处理一下,大部分问题都可以解决。
行了,就这么多了,再久远的问题也想不起来了。
一看时间都中午了,上午是什么事也做不成了,做饭,吃饭,下午开始写 在 Flutter 中使用 webview_flutter 4.0 | js 交互 的续集 Flutter WebView 优化。