PC パソコン

Android Studio「JdkImageTransform failure with JDK 26」の解決方法

Android StudioのビルドでJDK 26をGradle JVMに指定すると、JdkImageTransformが失敗し、androidJdkImageの解決やjlinkの実行段階で停止することがあります。Googleはこの問題をIssue #486844145として追跡し、Android Gradle Plugin(AGP)9.2.0の修正済み問題に「JdkImageTransform failure with JDK 26」を掲載しています。本記事では、Gradleを動かすJDKとJava toolchainを混同せず、安全に復旧する方法を説明します。

代表的なエラーログ

Execution failed for task ':app:compileDebugJavaWithJavac'.
> Could not resolve all files for configuration ':app:androidJdkImage'.
   > Failed to transform core-for-system-modules.jar
     to match attributes {artifactType=_internal_android_jdk_image, ...}.
      > Execution failed for JdkImageTransform:
        .../platforms/android-XX/core-for-system-modules.jar.
         > Error while executing process .../bin/jlink

タスク名、Android SDKのパス、属性の表示はプロジェクトによって異なります。重要な識別点は、Gradle JVMがJDK 26で、ログにJdkImageTransform、androidJdkImage、またはjlinkが現れることです。

原因

これはアプリのJava/Kotlinコードそのものではなく、Android SDKのモジュール用JARからビルド用JDKイメージを作るAGP側の変換処理とJDK 26の組み合わせで発生する互換性問題です。GoogleのAGP 9.2.0リリースノートではIssue #486844145が修正済みとして記載されています。

重要: 公開リリースノートは「最初に不具合が入ったAGPバージョン」を明記していません。そのため、特定の旧版すべてが必ず影響を受けるとは断定できません。修正版として公式に確認できるのはAGP 9.2.0です。

発生条件と対象バージョン

  • Android StudioまたはCIで、GradleデーモンをJDK 26で実行している
  • ビルドがandroidJdkImage構成とJdkImageTransformを利用する
  • Issue #486844145の修正を含まないAGPを使用している

AGP 9.2の公式互換表はGradle 9.4.1とJDK 17を最小・既定要件として示しています。JDK 26向け修正が入ったことは、JDK 26がAGP 9.2の既定実行環境になったという意味ではありません。

推奨する解決手順

  1. まずGradle JVMをJDK 17に戻します。 Android StudioのSettings(macOSではPreferences)から「Build, Execution, Deployment」→「Build Tools」→「Gradle」を開き、Gradle JDKにJDK 17を指定します。CIではJAVA_HOMEもJDK 17へ揃えます。
  2. 実際の実行JVMを確認します。
    ./gradlew --version

    出力のJVMが17になっていることを確認してください。

  3. 可能ならAGP 9.2.0以降へ更新します。 AGP 9.2を選ぶ場合は、公式互換表に合わせてGradle Wrapperを9.4.1へ更新し、プラグインと依存関係の互換性も確認します。
  4. デーモンを停止して再ビルドします。
    ./gradlew --stop
    ./gradlew clean
    ./gradlew assembleDebug

代替策

すぐにAGPを更新できない場合は、Gradleを動かすJDKを17に固定する方法が現実的です。Java toolchainでコンパイル用JDKや言語レベルを設定していても、GradleデーモンのJVMが自動的に切り替わるとは限りません。Android StudioのGradle JDK、JAVA_HOME、CIランナーの設定を別々に確認してください。

JDK内部のjmodsを削除する、SDK内のJARを置換する、jlinkを手作業で改変するといった方法は、環境を壊し再現性を失うため推奨しません。

修正できたか確認する方法

  • ./gradlew --versionで想定したJVMが表示される
  • ローカルとCIの両方でDebugおよびReleaseビルドが完了する
  • ログからJdkImageTransform、androidJdkImage、jlinkに関する失敗が消える
  • AGP 9.2へ更新した場合、WrapperがGradle 9.4.1以上である

注意点

sourceCompatibility、KotlinのjvmTarget、Java toolchainは生成するバイトコードやコンパイラを制御します。一方、Gradle JVMはAGPとGradle自身を動かします。今回確認すべきなのは後者です。また、AGP更新時はリリースノートと互換表を確認し、既存プラグインの対応状況をテストしてください。

まとめ

JDK 26で発生するJdkImageTransform失敗は、Googleが追跡したAGPの既知問題です。まず公式サポート構成であるJDK 17をGradle JVMに指定し、可能なら修正を含むAGP 9.2.0以降へ更新します。最後に./gradlew --versionとローカル・CIの実ビルドで解消を確認してください。

参照した公式情報