Flutter Androidライセンスエラーの修正:Javaバージョン不一致の解決法
問題の説明
Ubuntu環境でFlutter開発をセットアップ中、flutter doctorを実行すると以下の警告が表示される場合があります:
✗ Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.この警告に対処するためflutter doctor --android-licensesを実行すると、次のエラーが発生します:
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をインストールします:
sudo apt update
sudo apt install openjdk-17-jdkステップ2: デフォルトJavaの切り替え
インストール後、システムのデフォルトJavaをJava 17に設定します:
sudo update-alternatives --config java表示されるメニューで、OpenJDK 17に対応する番号を選択します。例:
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または使用しているシェルの設定ファイルを編集:
echo 'export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"' >> ~/.bashrc
source ~/.bashrcステップ4: 設定の確認
以下のコマンドで正しく設定されているか検証します:
java -version
echo $JAVA_HOME出力例:
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ライセンスを承認します:
flutter doctor --android-licenses成功の確認
各ライセンスに対してyを入力して承諾します。最後にflutter doctorを実行し、Android license statusが緑色のチェックマークになれば解決です。
代替解決策:Android SDKコマンドラインツールのダウングレード
Javaのアップグレードが不可能な場合の一時的な対処法として、Android SDKツールを古いバージョン(8.0)にダウングレードする方法があります。
手順
Android Studioを開き、ツール > SDK Manager に移動
SDK Tools タブを選択
Android SDK Command-line Tools (latest) のチェックを外す
右下のShow Package Detailsをチェック
Android SDK Command-line Tools 8.0 を選択してインストール

ターミナルでAndroid SDKのパスに移動(通常は
~/Android/Sdk/cmdline-tools)bashcd ~/Android/Sdk/cmdline-toolsインストールした8.0フォルダを
latestにリネームbashmv 8.0 latestFlutter doctorを再実行
bashflutter doctor --android-licenses
注意
この方法は一時的な回避策です。Android SDK最新ツールの機能が制限されるため、Javaアップグレードが長期ソリューションとして推奨されます。
トラブルシューティング
JAVA_HOMEが正しく設定されているか確認
以下のコマンドでJAVA_HOMEパスがJava 17を指しているか確認:
echo $JAVA_HOME
# 正しい例: /usr/lib/jvm/java-17-openjdk-amd64複数Javaバージョンがインストールされている場合
update-alternativesでJDK全体を設定:
sudo update-alternatives --config javacパス更新を反映
設定変更後はターミナルを再起動、または以下を実行:
source ~/.bashrc根本原因と予防策
この問題はAndroid SDK May 2023アップデート(バージョン8.0)でツールがJava 17を要求するようになった際に頻発しました。予防策として:
定期的なJavaバージョンチェック
bashjava -versionFlutter環境のアップデートチェック
bashflutter upgradeAndroid SDK Toolsの最新版は常にJava LTSバージョンへの対応を確認
Android公式ドキュメント:Javaバージョン要件にて最新要件を確認できます。
これらの手順により、FlutterのAndroidライセンスエラーとJavaバージョン不一致問題が解決できるはずです。開発環境の整合性を保つために、定期的な依存関係の更新をお勧めします。