Skip to content

GradleとJavaバージョンの互換性問題

エラー概要

Unsupported class file major version 61エラーは、プロジェクトのGradleバージョンJavaバージョンの互換性が失われた際に発生します。環境アップデート後のFlutterプロジェクトで頻発する問題です。典型的な環境:
✅ Gradle 6.8.3
✅ Java 17
✅ Flutter 3.7.12+
✅ Android Studio 2022.2.1+

問題の原因

Java 17(クラスファイルバージョン61)はGradle 6.8.3と互換性がありません。
Gradle公式互換性マトリックスによれば:

GradleバージョンサポートJavaバージョン
6.x8〜13
7.0+8〜17
8.1+8〜21

Android Studioの更新でJavaバージョンが17以上にアップグレードされると、古いGradleを使用しているプロジェクトでクラッシュが発生します。

解決策:互換性の確保

最も推奨される方法はGradleのアップグレードですが、プロジェクトのアップグレードが困難な場合はJavaパスの明示的設定でも対処可能です。

✅ 解決法1:Gradleのバージョンアップ (推奨)

  1. android/gradle/wrapper/gradle-wrapper.propertiesを編集:

    properties
    distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
  2. Android Gradle Pluginを更新 (android/build.gradle):

    groovy
    dependencies {
      classpath 'com.android.tools.build:gradle:8.3.2' // AGP 8.3.2以上
    }
  3. JDKバージョンをFlutterに明示:

    bash
    # Mac/Linux例
    flutter config --jdk-dir /usr/lib/jvm/java-17-openjdk-amd64/
    
    # Windows例
    flutter config --jdk-dir "C:\Program Files\Java\jdk-17"
  4. プロジェクトの再ビルド:

    bash
    flutter clean
    flutter pub get
    ./gradlew cleanBuildCache # Androidディレクトリで実行

互換性チェック方法

以下のサイトで使用中のJavaバージョンに合ったGradleバージョンを確認:
Gradle-Java Compatibility Matrix

✅ 解決法2:プロジェクトを変更せずにJavaパスを設定

既存のGradleバージョンを維持する場合:

  1. android/gradle.propertiesにJavaホームパス追加:

    properties
    org.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64
  2. FlutterのJDKディレクトリを設定:

    bash
    flutter config --jdk-dir "パス/to/Javaインストール"

Javaパスの特定方法

Linux/macOS(SDKMAN利用時):

bash
echo "$HOME/.sdkman/candidates/java/17.0.11-amzn"

Windows(Android Studio内蔵JDK):

C:\Program Files\Android\Android Studio\jbr

✅ トラブルシューティング追加手順

  1. Android Studioのキャッシュ削除:
    File > Invalidate Caches / Restart

  2. 複数Javaバージョンの競合解消:

    bash
    # javaコマンドのパスを固定
    sudo update-alternatives --config java
  3. 環境変数の確認:

    bash
    echo $JAVA_HOME  # Linux/macOS
    echo %JAVA_HOME% # Windows

根本原因と予防策

BUG! exception in phase 'semantic analysis'の根本原因は Gradleの古いバージョンが高いJavaバージョンを解釈できない点 です。予防方法:

  • Android Studioを更新前にgradle-wrapper.propertiesのバージョンをチェック
  • Flutterプロジェクトの定期的なGradleアップグレード
  • bash
    flutter config --jdk-dir
    で常に明示的なパスを指定

これにより、開発環境のJavaバージョン変更時にも互換性を確保できます。