くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Flutter doctor --android-licensesでエラーになる

ひさびさにflutter doctorを実行するとこんなエラーが。。

$ fvm flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.16.9, on macOS 13.2.1 22D68 darwin-arm64, locale ja-JP)
[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    ✗ 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.

同意しようと実行して見ると、謎のエラーが。。

$ fvm flutter doctor --android-licenses
エラー: メイン・クラスcom.android.sdklib.tool.sdkmanager.SdkManagerCliのロード中にLinkageErrorが発生しました
        java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
Android sdkmanager tool was found, but failed to run (/Users/foo/Library/Android/sdk/cmdline-tools/latest/bin/sdkmanager): "exited code 1".
Try re-installing or updating your Android SDK,
visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions.

class file versionが異なるので、だめっぽい。
各バージョンに対応するのは、こんな感じ。

  • 61.0 = Java17
  • 55.0 = Java11

Javaのバージョンを見てみると。。

# brewで入れたopenjdk
$ java -version
openjdk version "20.0.1" 2023-04-18
OpenJDK Runtime Environment Homebrew (build 20.0.1)
OpenJDK 64-Bit Server VM Homebrew (build 20.0.1, mixed mode, sharing)
$ which java
/opt/homebrew/opt/openjdk/bin/java

$ /usr/libexec/java_home
/Users/foo/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home

$ /opt/homebrew/Caskroom/android-studio/2022.1.1.20/Android\ Studio.app/Contents/jre/Contents/Home/bin/java -version
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
OpenJDK 64-Bit Server VM (build 11.0.15+0-b2043.56-8887301, mixed mode)

解決法: Android SDK Command-line Toolsを8.0に落とす

これを参考にとりあえずの暫定対処

Android SDK Command-line Toolsは11.0を入れていたけど、
Android StudioSDK Managerから、
11.0をアンインストールして、8.0を入れ直したらうまくいった。。


他に試した方法

Android SDK Command-line Toolsの最新化

Android SDK Command-line Toolsをlatest(12.0)にしたけど、だめだった。。

Java11を入れる

これもだめだった。。

$ brew install java11
$ export JAVA_HOME="/opt/homebrew/Cellar/openjdk@11/11.0.22/"
$ export PATH="${JAVA_HOME}/bin:${PATH}"
$ fvm flutter doctor --android-licenses
エラー: メイン・クラスcom.android.sdklib.tool.sdkmanager.SdkManagerCliのロード中にLinkageErrorが発生しました
...

参考にしたサイト様