flutterを最新版に更新したらflutter doctor でエラーが出てしまった件【2023年2月】/ MAC
こんにちは!
今回もflutterを使っていて出てしまったエラーについて、ご紹介します。
こちらの記事を発見していただきありがとうございます。
少しでもあなたのお役に立てれば幸いです。
それでは早速、どのようなエラーが出てしまったのかから説明します。
まず、flutter doctor
をターミナルに入力した際の出力が以下です。
[✓] Flutter (Channel beta, 3.8.0-10.1.pre, on macOS 13.0.1 22A400 darwin-arm64, locale en-US)
[!] 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.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.1)
[✓] VS Code (version 1.74.3)
[✓] Connected device (3 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
「com/android/prefs/AndroidLocationsProviderは、Javaのバージョン55.0(Java11)でコンパイルされていますが、皆様のマシンのJava環境はJavaのバージョン52.0(Java8)であることが読み取れます」と書かれています。
ちなみに、この「55」や「52」といった数字とJavaのバージョンの関連性は次のようになっています。
49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
つまり、Java11で実行してもらう必要があることがわかりました。
/usr/libexec/java_home -V
こちらのコマンドでどのJavaバージョンがあるか確認を行います。
Matching Java Virtual Machines (2):
1.8.351.10 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_351 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/Home
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
するとJava8しかありませんでした。
ですので、Java11をダウンロードします。
続いてJava8を消すために、以下のコマンドを実行しました。
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Oracle/Java
java -version
で確認してみると、ちゃんとJava11が使えるようになってました。
java version "11.0.18" 2023-01-17 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.18+9-LTS-195)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.18+9-LTS-195, mixed mode)
続いて、JAVA_HOMEにPathを通す必要があるので、以下のコマンドを実行。
export JAVA_HOME=`/usr/libexec/java_home -v 11`
あとは、flutter doctor --android-licenses
を実行し、flutter doctor
で確認したら、エラーがなくなっていました。
他の解決パターン
・Android SDK Command-line Tools にチェックをつけて、Apply
・Android StudioのSDK Managerを開いて次のSDKがインストールされているか確認
Discussion