Android Studioで独自GradleプラグインやbuildSrcからAndroidのbootClasspathへアクセスすると、構成フェーズ中に「IllegalStateException: targetCompatibility is not yet finalized」でビルドが停止することがあります。Googleはこの問題をIssue #461382865として追跡し、Android Gradle Plugin(AGP)9.2.0で修正済みとしています。
代表的なエラーログ
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':app'.
> java.lang.IllegalStateException:
targetCompatibility is not yet finalized
スタックトレースには、カスタムプラグイン、buildSrc、Convention Plugin、またはbootClasspathを参照する処理が現れる場合があります。完全なクラス名や呼び出し元は構成によって異なります。
原因
AGPはDSL解析、finalizeDsl()、Variant作成、タスク作成という順に設定値を確定します。修正前のAGPでは、設定がまだ確定していない段階でbootClasspathへアクセスするだけでも、内部でtargetCompatibilityの値を必要として例外になる場合がありました。Googleの公式リリースノートでは「Error when accessing (but not evaluating) bootClasspath」と説明されています。
バージョン情報: この問題の修正版はAGP 9.2.0です。公式の公開情報は最初に問題が入ったAGPバージョンを明記していないため、旧版すべてが影響を受けるとは断定できません。
発生条件
- AGPの修正を含まないバージョンを利用している
- 独自プラグイン、
buildSrc、Convention PluginなどがAndroidのbootClasspathを構成フェーズで参照する - Providerを保持するだけの意図でも、AGP内部で値が早期に確定・参照される経路に入る
通常のアプリだけでなく、ビルドロジックを共有するマルチモジュールプロジェクトやサードパーティ製プラグイン経由でも発生し得ます。
推奨する解決手順
- スタックトレースで呼び出し元を特定します。
./gradlew assembleDebug --stacktracebuildSrc、社内プラグイン、外部プラグインのどれがbootClasspathへ触れているか確認します。 - AGP 9.2.0以降へ更新します。 AGP 9.2の公式互換表に合わせ、Gradle Wrapperは9.4.1以上、Gradle JVMはJDK 17を使用します。
- ビルドロジックを遅延評価へ移行します。 構成フェーズで値を
get()したりリストへ即時変換したりせず、AGPのVariant APIとGradleのProviderを通じてタスク入力へ接続します。 - デーモンを停止して再実行します。
./gradlew --stop ./gradlew clean ./gradlew assembleDebug --stacktrace
ビルドロジック側の修正例
次のような構成フェーズ中の即時取得は避けます。
// 避ける例:構成時に値を確定させる
val files = android.bootClasspath.files
tasks.register("inspectBootClasspath") {
doLast { println(files) }
}
使用しているAGP APIがProviderを返す場合は、値を保持したままタスク入力へ接続し、実行時まで解決を遅らせます。具体的な型はAGPバージョンで異なるため、公開Variant APIのリファレンスに合わせて実装してください。
更新できない場合の代替策
AGPをすぐ更新できない場合は、問題を起こすカスタムプラグインを最新版へ更新するか、bootClasspathへのアクセスをタスク実行時まで遅らせます。サードパーティ製プラグインが呼び出し元なら、該当機能を一時的に無効化する方法もありますが、公式に確認された恒久修正はAGP 9.2.0への更新です。
afterEvaluateで強制的に遅らせる方法は、構成キャッシュや将来のAGPとの互換性を損ねる可能性があります。GoogleはAGPの拡張に公式Variant APIを使用し、AGP内部タスクへ直接依存しないことを推奨しています。
確認方法
./gradlew assembleDebug --stacktraceが例外なしで完了する- Releaseビルドと対象のカスタムタスクも実行できる
./gradlew --versionでAGP 9.2と互換性のあるGradle/JDK構成を確認する- 構成キャッシュを利用するプロジェクトでは、連続2回のビルドでも問題が再発しないことを確認する
注意点
エラーメッセージだけを見てsourceCompatibilityやtargetCompatibilityへ同じ値を追記しても、早すぎるAPIアクセスが原因なら根本解決になりません。スタックトレースで呼び出し元を確認し、AGP更新とビルドロジックの遅延化を優先してください。
まとめ
「targetCompatibility is not yet finalized」は、bootClasspathを設定確定前に扱う経路で発生したAGPの既知問題です。AGP 9.2.0以降へ更新し、独自ビルドロジックではProviderと公式Variant APIを使って値の解決を遅らせるのが推奨対応です。
参照した公式情報
- Android Gradle Plugin 9.2 release notes(Issue #461382865、2026年9月17日更新)
- Google Issue Tracker #461382865
- Write Gradle plugins
