Skip to content

Gradleビルドエラー:Unsupported class file major version 65の解決方法

問題の説明

Java 17に更新した後、FlutterプロジェクトでassembleDebugを実行しようとすると、次のビルドエラーが発生します:

FAILURE: Build failed with an exception.

* What went wrong:
Could not open cp_settings generic class cache for settings file '.../android/settings.gradle'.

BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 65

このエラーは通常、以下の条件で発生します:

  • Android StudioをLadybug(2024.2.1)以降にアップデートした
  • Java 17がインストールされ、JAVA_HOME環境変数が設定されている
  • gradle-wrapper.propertiesでGradle 7.3.3などのサポート対象バージョンを使用しているように見える
  • Flutter doctorがJava 17使用を正しく認識している

エラーの根本原因

クラスファイルバージョン65はJava 21に対応していますが、プロジェクトで使用している実際のGradleバージョンはJava 17コンパイラでビルドされたバイトコードを解釈できません。つまり:

  1. Android Studioの更新でGradleプラグイン(AGP)が自動更新されている場合がある
  2. プロジェクトで古いGradleバージョンがハードコードされている
  3. FlutterのデフォルトJDKパスとシステムのJAVA_HOMEに不一致がある可能性

解決方法

⚙️ 方法1: FlutterのJDKパスを明示的に設定(推奨)

最も効果的な解決策は、Flutterに明示的にJDK 17のパスを設定することです:

bash
flutter config --jdk-dir /path/to/your/jdk-17

パスの見つけ方(macOSの例):

bash
# macOSの場合
echo $(/usr/libexec/java_home -v 17)

# Windowsの場合(PowerShell)
$env:JAVA_HOME

設定後、プロジェクトのクリーンビルドを実行:

bash
flutter clean
flutter pub get
./gradlew clean build

⚙️ 方法2: GradleとAGPのバージョンを一括更新

gradle-wrapper.propertiessettings.gradlebuild.gradleの3ファイルを更新します:

1. gradle-wrapper.propertiesの更新

diff
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip # 8.10.2-allも可
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

2. settings.gradleのプラグインバージョン更新

diff
plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
-   id "com.android.application" version "7.3.0" apply false
+   id "com.android.application" version "8.1.0" apply false
    id "org.jetbrains.kotlin.android" version "1.8.22" apply false
}

3. app/build.gradleのJava/Kotlin設定更新

diff
android {
    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_8
-        targetCompatibility JavaVersion.VERSION_1_8
+        sourceCompatibility JavaVersion.VERSION_17
+        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
-        jvmTarget = '1.8'
+        jvmTarget = JavaVersion.VERSION_17.toString()
    }
}

AGPバージョンの選び方

Android Gradle Plugin(AGP)とGradleバージョンの互換性が重要です:

🔄 方法3: Gradleキャッシュのクリア

一時的なキャッシュ問題が原因の場合はキャッシュ削除が有効:

bash
# グローバルキャッシュ削除(全プロジェクトに影響)
rm -rf ~/.gradle  # macOS/Linux
Get-ChildItem -Path $env:USERPROFILE\.gradle | Remove-Item -Recurse # Windows PowerShell

# プロジェクトレベルのクリーン
cd android
./gradlew clean
cd ..
flutter clean

⚙️ 方法4: 新規プロジェクト設定の流用

既存プロジェクトの設定ファイルを新規プロジェクトで生成したものに置き換えます:

  1. 新規Flutterプロジェクト作成

    bash
    flutter create temp_fix_project
  2. 設定ファイルを既存プロジェクトにコピー:

    • /android/settings.gradle
    • /android/app/build.gradle
    • /android/gradle/wrapper/gradle-wrapper.properties
  3. 必須の差分(主にアプリIDや署名設定)をマージ

🔧 方法5: AGPアップグレードアシスタントの利用(上級者)

段階的なアップグレードが必要な複雑なプロジェクトでは:

  1. Android Studio Koala(2024.1.1) 以降をインストール
  2. androidディレクトリをAndroid Studioで開く
  3. Refactor > AGP Upgrade Assistantを実行
  4. 指示に従い段階的アップグレード(例:7.1.2 → 7.4.2 → 8.6.1)

各方法の選択ガイド

方法実行時間リスク推奨シナリオ
JDKパスの設定★☆☆ (低)即時対応が必要な場合
設定ファイル一括更新★★☆ (中)プロジェクトを最新化したい場合
Gradleキャッシュクリア★☆☆ (低)一時ファイル起因の不具合が疑われる場合
新規プロジェクト設定の流用★★★ (高)設定ファイルが複雑化している場合
AGPアップグレードアシスタント★★★ (高)中〜高大規模プロジェクトの段階的更新

Android Studio Ladybug特有の注意点

Ladybug(2024.2.1)では:

  • デフォルトJDKが変更される可能性あり
  • coreLibraryDesugaringが必要な依存関係がある場合、明示的に有効化:
gradle
android {
    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3'
}

エラーの根本的な解決に向けて

Unsupported class file major version 65は、Javaバイトコードと実行環境のバージョン不一致が原因です。長期的な安定運用のためには:

  1. JDKとGradleのバージョン互換性を公式ドキュメントで確認
  2. flutter doctor -vで全ての依存関係を監視
  3. android/.gitignoreに以下を追加し不要ファイル除外:
    **/.cxx
    .gradle
    build/

プロジェクトを最新ツールチェーンに保つことで、ビルドエラーの発生確率を大幅に低減できます。