PC パソコン

Android Studio「ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 31」の解決方法

Android Studioのデバッグビルドで、D8処理中に「ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 31」が発生し、ビルドが停止することがあります。これはアプリ側の配列アクセスではなく、R8 8.8.34から8.9.27の間に導入されたD8デバッグモードの回帰としてGoogleが追跡した既知問題です。公式修正を含むAndroid Gradle Plugin(AGP)9.4.1以降への更新が推奨されます。

代表的なエラーログ

Execution failed for task ':app:mergeProjectDexDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.DexMergingTaskDelegate
  java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 31

タスク名やスタックトレースは構成により異なります。D8によるデバッグ用DEX生成中にIndex -1 out of bounds for length 31が出ていることが識別点です。

原因

Google Issue Tracker #545349635では、D8のデバッグモードにおける回帰として記録されています。R8 8.8.34では再現せず、8.9.27で再現する境界が報告されています。この場合、自作コードの配列添字を修正しても解決しません。

同じ例外がアプリ実行時に自作コードから投げられている場合は別問題です。失敗したGradleタスクと完全なスタックトレースを確認し、D8/Dexer内部で発生しているかを切り分けてください。

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

  • D8がデバッグモードでDEXを生成するデバッグ系ビルド
  • R8 8.9.27を含む影響バージョン
  • 特定のバイトコード入力で発生するため、すべてのプロジェクトで再現するとは限らない

Googleは2026年9月18日公開のAndroid Studio Quail 4 Patch 1/AGP 9.4.1の修正一覧にIssue #545349635を掲載しています。

推奨する解決手順

  1. AGPを9.4.1以降へ更新します。
  2. 公式の互換表に従い、Gradle WrapperとJDKの組み合わせも確認します。
  3. Gradleデーモンを停止し、クリーンな状態でデバッグビルドをやり直します。
plugins {
    id("com.android.application") version "9.4.1" apply false
    id("com.android.library") version "9.4.1" apply false
}
./gradlew --stop
./gradlew clean
./gradlew :app:assembleDebug --stacktrace

Version Catalogを利用している場合は、gradle/libs.versions.toml内のAGPバージョンを更新します。

更新できない場合の代替策

互換性検証の都合で直ちにAGP 9.4.1へ更新できない場合は、問題が再現しなかったR8 8.8.34系を含む以前のAGP構成へ一時的に戻す方法があります。AGP内部のR8だけを強制的に差し替える方法は、未検証の組み合わせになる可能性があるため恒久対策にしないでください。

デバッグモード固有の回帰なので、リリース系ビルドが通るかを診断材料にできます。ただし、デバッグ可能性を失う設定変更は恒久的な解決策ではありません。

確認方法

  1. ./gradlew --versionでGradleとJVMを記録します。
  2. 設定上のAGPが9.4.1以降であることを確認します。
  3. assembleDebug --stacktraceを複数回実行し、同じ入力で例外が再発しないことを確認します。
  4. 生成したAPKを実機またはエミュレーターへインストールし、デバッグ起動とブレークポイントを確認します。

注意点

cleanやIDE再起動だけで一時的に通っても、影響を受けるD8を使い続ける限り根本解決とは確認できません。公式修正版への更新を優先し、Gradle、JDK、Kotlinプラグインとの互換性も確認してください。

まとめ

D8のデバッグ処理で「ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 31」が出る場合、R8 8.8.34から8.9.27の間に入った既知回帰が原因候補です。修正を含むAGP 9.4.1以降へ更新し、クリーンビルドと端末上のデバッグ動作で確認してください。

参照した公式情報