flutter升级3.7.3报错Unable to find bundled Java version解决
作者:IAM17 发布时间:2023-07-29 16:57:52
引言
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报错
当你在 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 优化。
来源:https://juejin.cn/post/7198715401441034300


猜你喜欢
- 前言在开发中我们经常要使用图片或者drawable文件夹下的xml,来实现一些效果,Drawable的用法都和xml相关,我们可以使用sha
- 前言:自定义View可以分为两种方式:第一种通过继承ViewGroup,内部通过addView的方式将其他的View组合到一起。第二种则是通
- 1、添加spring相关jar包2、配置ehcache jar包。3、添加ehcache mybatis 适配器jar包(在mybatis官
- aes 对称加密密钥必须是32字节using System;using System.Security.Cryptography;using
- 当我们在页面上进行selenium.type()或者selenium.click()操作的时候,往往需要需要等待一个元素的出现,对于一般的网
- Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。
- switch语句的格式如下:(它的功能是选出一段代码执行) switch(整数选择因子) { case 整数值1 : 语句; break;
- 数字可以标志货币、百分比、积分和电话号码等,就货币而言,在不同的国家会以不同的格式来定义,本实例将接收用户输入的数字,然后在控制台中输出其货
- 在查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标
- 本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与
- 这篇文章主要介绍了springmvc如何使用POJO作为参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 本篇文章主要记录一下Android中打开Wifi、获取Wifi接入点信息及连接指接入点的方法。自己写的demo主要用于测试接口的基本功能,因
- docker简介Docker 是一个开源的应用容器引擎,和传统的虚拟机技术相比,Docker 容器性能开销极低,因此也广受开发者喜爱。随着基
- 由于公司平台访问人数逐渐增多,公司项目的数据库已经几次出现宕机现象。为减轻数据库压力,我上个月对公司项目做了下调整。把新闻板块提取出来单独一
- 本文实例分析了C#泛型用法。分享给大家供大家参考。具体分析如下:这里演示如何创建具有单个类型参数的自定义泛型列表类,以及如何实现 IEnum
- 排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下:首先,数学中排列组合
- 抽象类1.引出抽象类向上转型带来的最大的好处就是参数统一化,使用共同的父类引用,就可以接收所有的子类实例。多态非常依赖方法覆写,但是子类可以
- 在上一篇文章中,我为大家介绍了《5种创建文件并写入文件数据的方法》,本节我们为大家来介绍6种从文件中读取数据的方法.另外为了方便大家理解,我
- 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对
- 这篇文章主要介绍了spring如何实现两个xml配置文件间的互调,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值