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 优化。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IAM17前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值