Skip to content

Flutter Androidライセンスエラーの修正:Javaバージョン不一致の解決法

問題の説明

Ubuntu環境でFlutter開発をセットアップ中、flutter doctorを実行すると以下の警告が表示される場合があります:

text
✗ Android license status unknown.
  Run `flutter doctor --android-licenses` to accept the SDK licenses.

この警告に対処するためflutter doctor --android-licensesを実行すると、次のエラーが発生します:

text
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 SDKツール(特にsdkmanager)が Java 17以上(クラスファイルバージョン61.0)でビルドされているのに対し、システムで使用されているJavaバージョンがJava 11以下(クラスファイルバージョン55.0まで対応)であるということです。

注意点

Javaをアップグレードしたにも関わらずエラーが解消されない場合、システムが依然として古いJavaバージョンを使用している可能性があります。環境変数の設定やデフォルトJavaの選択が正しく行われていないケースが多く見られます。

推奨解決策:Java 17の正しいインストールと設定

ステップ1: OpenJDK 17のインストール

ターミナルで以下のコマンドを実行し、最新のOpenJDK 17をインストールします:

bash
sudo apt update
sudo apt install openjdk-17-jdk

ステップ2: デフォルトJavaの切り替え

インストール後、システムのデフォルトJavaをJava 17に設定します:

bash
sudo update-alternatives --config java

表示されるメニューで、OpenJDK 17に対応する番号を選択します。例:

text
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
* 2            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      manual mode

ステップ3: 環境変数の設定

JAVA_HOME環境変数を設定します。~/.bashrcまたは使用しているシェルの設定ファイルを編集:

bash
echo 'export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"' >> ~/.bashrc
source ~/.bashrc

ステップ4: 設定の確認

以下のコマンドで正しく設定されているか検証します:

bash
java -version
echo $JAVA_HOME

出力例:

text
openjdk version "17.0.10" 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+7-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 17.0.10+7-Ubuntu-0ubuntu122.04, mixed mode, sharing)

/usr/lib/jvm/java-17-openjdk-amd64

ステップ5: Androidライセンスの承認

最後に以下のコマンドを実行し、Androidライセンスを承認します:

bash
flutter doctor --android-licenses

成功の確認

各ライセンスに対してyを入力して承諾します。最後にflutter doctorを実行し、Android license statusが緑色のチェックマークになれば解決です。

代替解決策:Android SDKコマンドラインツールのダウングレード

Javaのアップグレードが不可能な場合の一時的な対処法として、Android SDKツールを古いバージョン(8.0)にダウングレードする方法があります。

手順

  1. Android Studioを開き、ツール > SDK Manager に移動

  2. SDK Tools タブを選択

  3. Android SDK Command-line Tools (latest) のチェックを外す

  4. 右下のShow Package Detailsをチェック

  5. Android SDK Command-line Tools 8.0 を選択してインストール SDK Manager画面

  6. ターミナルでAndroid SDKのパスに移動(通常は~/Android/Sdk/cmdline-tools

    bash
    cd ~/Android/Sdk/cmdline-tools
  7. インストールした8.0フォルダをlatestにリネーム

    bash
    mv 8.0 latest
  8. Flutter doctorを再実行

    bash
    flutter doctor --android-licenses

注意

この方法は一時的な回避策です。Android SDK最新ツールの機能が制限されるため、Javaアップグレードが長期ソリューションとして推奨されます。

トラブルシューティング

JAVA_HOMEが正しく設定されているか確認

以下のコマンドでJAVA_HOMEパスがJava 17を指しているか確認:

bash
echo $JAVA_HOME
# 正しい例: /usr/lib/jvm/java-17-openjdk-amd64

複数Javaバージョンがインストールされている場合

update-alternativesでJDK全体を設定:

bash
sudo update-alternatives --config javac

パス更新を反映

設定変更後はターミナルを再起動、または以下を実行:

bash
source ~/.bashrc

根本原因と予防策

この問題はAndroid SDK May 2023アップデート(バージョン8.0)でツールがJava 17を要求するようになった際に頻発しました。予防策として:

  1. 定期的なJavaバージョンチェック

    bash
    java -version
  2. Flutter環境のアップデートチェック

    bash
    flutter upgrade
  3. Android SDK Toolsの最新版は常にJava LTSバージョンへの対応を確認

Android公式ドキュメント:Javaバージョン要件にて最新要件を確認できます。

これらの手順により、FlutterのAndroidライセンスエラーとJavaバージョン不一致問題が解決できるはずです。開発環境の整合性を保つために、定期的な依存関係の更新をお勧めします。