flutter升級3.7.3報錯Unable?to?find?bundled?Java?version解決
引言
Android studio 是2020 年的版本,有點老,昨天突發(fā)想法,升級到了 Android Studio Electric Eel 2022.1。
計劃今天和明天寫那個 Flutter WebView 優(yōu)化的文章,這篇是 在 Flutter 中使用 webview_flutter 4.0 | js 交互 的續(xù)集。早上起來,發(fā)現(xiàn) Flutter 有新版本了,版本號是 3.7.3。既然已經(jīng)是第三個小版本了,那應(yīng)該不會有什么坑了吧,手一抖就開始升級了。
升級過程很順利,一跑應(yīng)用傻眼了,報錯!
用 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
根據(jù)提示,執(zhí)行命令
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 命令查了一下,發(fā)現(xiàn)果然有兩個版本存在,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
解決的辦法有兩個,一個是刪除老的版本,一個是增加環(huán)境變量 JAVA_HOME。我覺得環(huán)境變量更簡單也更安全,于是在 ~/.bash_profile 中增加 JAVA_HOME 的變量輸出
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
再次執(zhí)行 flutter doctor --android-licenses
,居然好了,大喜,這樣我就不用刪除 java 的老版本了。興沖沖的再次執(zhí)行 flutter doctor
,結(jié)果被潑了一盆冷水,還是報錯 Unable to find bundled Java versio。任務(wù)尚未成功,同志還需努力。
然后在網(wǎng)上碰巧查到有人說新建一個文件夾 jre 把 jbr 中的內(nèi)容都 copy 到 jre中。我一想,如果是名字的問題,那也不用 copy 了,直接建一個軟鏈不是更香嗎?然后嘗試下面的命令。
ln -s /Applications/Android\ Studio.app/Contents/jbr /Applications/Android\ Studio.app/Contents/jre
再次執(zhí)行 flutter doctor
現(xiàn)在是一片綠色,現(xiàn)在看起來格外的順眼。
到這里其實就結(jié)束了,但文章顯得有點短,我再閑扯兩個可能遇到的問題。如果你沒有這樣的問題,直接跳過。
還有你可能還會遇到這個錯誤 無法打開“iproxy”,因為無法驗證開發(fā)者。這個解決起來很簡單
sudo xattr -d com.apple.quarantine 你本機的flutter根目錄/bin/cache/artifacts/usbmuxd/iproxy
android studio 新版本的 設(shè)置 jdk 的位置變了, 現(xiàn)在移到 gradle setting 了。
build gradle 指定 compileSdkVersion 33報錯
當(dāng)你在 build gradle 中指定 compileSdkVersion 33 的時候,可能會報錯。
解決的辦法很簡單,安裝最新的 sdk 即可。 找到更新 sdk 的位置分兩步
在 mac 左上角找到 Android Studio,選 Preferences 菜單
- 找到 System Settings 下面的 Android SDK,把 右邊的 Android 13.0 勾選上更新即可。
模擬器也要同步升級。android studio 頂部靠右的手機的圖標(biāo),這個是 Device Manager。在下面會列出當(dāng)前 Device。點右邊的筆形圖標(biāo),可以更新 API
再說一個 ios 可能遇到的問題,本老好好的,突然有一天無法 簽名,根據(jù)報錯信息(沒有保留現(xiàn)在場)說我的配置有問題,我查了半天也沒發(fā)現(xiàn)有問題,版本號設(shè)置也查了,最小都是 11.0,然后我猜想是不是 apple 開發(fā)者賬號的問題。在網(wǎng)頁登錄開發(fā)者賬號立即彈出同意新協(xié)議的彈窗,同意后,再次 build 簽名成功。
因為 ios 的這個問題沒有記錄,所以無法給出準(zhǔn)確的報錯信息了,下次再遇到什么問題都要詳細(xì)記下來。小伙伴們遇到哪些問題,還是及時分享的好,這樣其它人遇到了可以節(jié)省很多時間。
如果 flutter build 出現(xiàn)什么問題,第一時間 可以用 flutter clean 處理一下,大部分問題都可以解決。
行了,就這么多了,再久遠(yuǎn)的問題也想不起來了。
一看時間都中午了,上午是什么事也做不成了,做飯,吃飯,下午開始寫 在 Flutter 中使用 webview_flutter 4.0 | js 交互 的續(xù)集 Flutter WebView 優(yōu)化。
以上就是flutter升級3.7.3報錯Unable to find bundled Java version解決的詳細(xì)內(nèi)容,更多關(guān)于flutter升級3.7.3報錯解決的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android 跨進程模擬按鍵(KeyEvent )實例詳解
這篇文章主要介紹了Android 跨進程模擬按鍵(KeyEvent )實例詳解的相關(guān)資料,類似手機遙控器的需求就可以這么做,需要的朋友可以參考下2016-11-11Android從系統(tǒng)Gallery獲取圖片具體實現(xiàn)
這篇文章主要介紹了Android從系統(tǒng)Gallery獲取圖片具體實現(xiàn),有需要的朋友可以參考一下2013-12-12朋友圈實現(xiàn)圖片+文字轉(zhuǎn)發(fā)功能(必看篇)
下面小編就為大家?guī)硪黄笥讶崿F(xiàn)圖片+文字轉(zhuǎn)發(fā)功能(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03Android實例代碼理解設(shè)計模式SOLID六大原則
程序設(shè)計領(lǐng)域, SOLID (單一功能、開閉原則、里氏替換、接口隔離以及依賴反轉(zhuǎn))是由羅伯特·C·馬丁在21世紀(jì)早期 引入的記憶術(shù)首字母縮略字,指代了面向?qū)ο缶幊毯兔嫦驅(qū)ο笤O(shè)計的基本原則2021-10-10