GradleとJavaのバージョン不一致エラー「Unsupported class file major version」の解決方法
問題
Apple Silicon (ARM) MacでFlutterプロジェクトを実行しようとすると、以下のエラーが発生します:
Could not open settings generic class cache for settings file '/path/to/settings.gradle'
> BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 61
このエラーは、GradleのバージョンとJavaのバージョンが互換性がない場合に発生します。
原因
GradleとJavaのバージョンには互換性マトリックスがあり、特定のJavaバージョンに対応するGradleバージョンを使用する必要があります。例えば:
- Java 17 には Gradle 7.3 以上が必要
- Java 19 には Gradle 7.6 以上が必要
- Java 21 には Gradle 8.4 以上が必要
解決方法
方法1: Gradleバージョンの更新(推奨)
プロジェクトの android/gradle/wrapper/gradle-wrapper.properties
ファイルを開き、distributionUrl
を適切なバージョンに変更します。
# 変更前(例)
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
# 変更後(Java 17の場合)
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
GradleとJavaの互換性表
最新の互換性情報はGradle公式ドキュメントで確認してください。
方法2: Flutterが使用するJDKの設定
Flutterが使用するJDKを明示的に設定します:
flutter config --jdk-dir '使用したいJDKのパス'
例:
# Macの場合
flutter config --jdk-dir '/Users/username/Library/Java/JavaVirtualMachines/corretto-17.0.12/Contents/Home'
# Windowsの場合
flutter config --jdk-dir="C:\Program Files\Java\jdk-17"
現在Flutterが使用しているJDKを確認するには:
flutter doctor -v
方法3: Android Studioでの設定
- Android Studioを開く
Preferences
>Build, Execution, Deployment
>Build Tools
>Gradle
に移動Gradle JDK
を適切なバージョンに変更
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
方法4: キャッシュのクリア
Gradleキャッシュが破損している場合、以下の手順でクリアできます:
- Android Studioで
Settings
>Build, Execution, Deployment
>Build Tools
>Gradle
を開く Gradle user home
のパスを確認- 該当フォルダを削除または名前を変更
- プロジェクトを再ビルド
トラブルシューティング
インストールされているJDKの確認
MacでインストールされているJDKを確認するには:
/usr/libexec/java_home -V
環境変数の設定
システムの環境変数 JAVA_HOME
を設定することも有効です:
# .zshrcまたは.bash_profileに追加
export JAVA_HOME="/path/to/your/jdk"
export PATH=$JAVA_HOME/bin:$PATH
予防策
- 定期的なアップデート: GradleとJavaのバージョンを定期的に更新する
- 互換性の確認: 新しいバージョンを導入する前に互換性を確認する
- バージョン管理: プロジェクトのドキュメントに使用バージョンを明記する
まとめ
「Unsupported class file major version」エラーは、GradleとJavaのバージョン不一致が主な原因です。現在使用しているJavaバージョンに対応するGradleバージョンに更新するか、Flutterが使用するJDKを明示的に設定することで解決できます。
最新の互換性情報は常にGradle公式ドキュメントで確認することをおすすめします。