🙆

flutterを最新版に更新したらflutter doctor でエラーが出てしまった件【2023年2月】/ MAC

2023/02/23に公開

こんにちは!
今回も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
https://qiita.com/y-okudera/items/d5b79be030c8a526ad80

・Android StudioのSDK Managerを開いて次のSDKがインストールされているか確認
https://dtpscriptin.com/flutter-android-license-status-unknown/

Discussion