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 latest
Flutter 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 -version
Flutter環境のアップデートチェック
bashflutter upgrade
Android SDK Toolsの最新版は常にJava LTSバージョンへの対応を確認
Android公式ドキュメント:Javaバージョン要件にて最新要件を確認できます。
これらの手順により、FlutterのAndroidライセンスエラーとJavaバージョン不一致問題が解決できるはずです。開発環境の整合性を保つために、定期的な依存関係の更新をお勧めします。