flutter 升级到 3.7.3 报错 Unable to find bundled Java version

大家好,我是 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 的位置分两步

  1. 在 mac 左上角找到 Android Studio,选 Preferences 菜单

  2. 找到 System Settings 下面的 Android SDK,把 右边的 Android 13.0 勾选上更新即可。

image.png

模拟器也要同步升级。android studio 顶部靠右的手机的图标,这个是 Device Manager。在下面会列出当前 Device。点右边的笔形图标,可以更新 API

image.png

image.png

再说一个 ios 可能遇到的问题,本老好好的,突然有一天无法 签名,根据报错信息(没有保留现在场)说我的配置有问题,我查了半天也没发现有问题,版本号设置也查了,最小都是 11.0,然后我猜想是不是 apple 开发者账号的问题。在网页登录开发者账号立即弹出同意新协议的弹窗,同意后,再次 build 签名成功。

因为 ios 的这个问题没有记录,所以无法给出准确的报错信息了,下次再遇到什么问题都要详细记下来。小伙伴们遇到哪些问题,还是及时分享的好,这样其它人遇到了可以节省很多时间。

如果 flutter build 出现什么问题,第一时间 可以用 flutter clean 处理一下,大部分问题都可以解决。

行了,就这么多了,再久远的问题也想不起来了。

一看时间都中午了,上午是什么事也做不成了,做饭,吃饭,下午开始写 在 Flutter 中使用 webview_flutter 4.0 | js 交互 的续集 Flutter WebView 优化。

猜你喜欢

转载自blog.csdn.net/m0_55635384/article/details/128983851