PC パソコン

Android Studio R8「ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0」の解決方法

ReleaseビルドやminifyReleaseWithR8の実行中に「ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0」で停止する場合、アプリ自身の配列処理ではなくR8の既知問題である可能性があります。Google Issue TrackerのIssue #437005995はAGP 8.10.0以降の問題として登録され、AGP 8.13.0で修正済みです。

代表的なエラーログ

Execution failed for task ':app:minifyReleaseWithR8'.
> A failure occurred while executing
  com.android.build.gradle.internal.tasks.R8Task$R8Runnable
  > Compilation failed to complete
    java.lang.ArrayIndexOutOfBoundsException:
    Index 0 out of bounds for length 0

タスク名やスタックトレースは構成により異なります。Debugビルドは成功し、R8を使うRelease/minifyタスクだけが同じ例外で失敗することが重要な手掛かりです。

原因

このケースは、縮小・最適化・難読化を行うR8が一部の入力を処理するときに内部で空の配列へアクセスする不具合です。アプリの実行時コードが投げた例外とは別物なので、通常の配列境界チェックをソースへ追加しても解決しません。

GoogleはIssue #437005995を「8.10.0以降のArrayIndexOutOfBoundsException」として追跡し、AGP 8.13.0-rc01のFixed Issuesに掲載しています。安定版AGP 8.13.0のリリースノートにも修正済み問題として記載されています。

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

  • AGP 8.10.0から8.12.x付近を使用している
  • R8が動作するminifyEnabled trueのVariantをビルドしている
  • 特定のクラス構造や最適化対象を含む入力でR8の不具合が再現する

すべてのAGP 8.10~8.12プロジェクトで必ず発生するわけではありません。例外文だけではアプリ側の問題とも区別できないため、失敗したGradleタスクとスタックトレースにR8が含まれるか確認します。

推奨する解決手順

1. 使用中のAGPとJavaを確認する

./gradlew --version
./gradlew :app:buildEnvironment

Version Catalog、ルートのプラグイン宣言、またはbuildscriptで指定されるAGP版も確認してください。

2. AGP 8.13.0以降へ更新する

// libs.versions.toml
[versions]
agp = "8.13.0"

[plugins]
android-application = {
  id = "com.android.application",
  version.ref = "agp"
}

プロジェクトのGradle Wrapper、JDK、Android StudioがAGP 8.13.0の互換条件を満たすよう、公式リリースノートのCompatibility欄も合わせて確認します。

3. クリーン環境でReleaseビルドを再実行する

./gradlew --stop
./gradlew clean
./gradlew :app:assembleRelease --stacktrace

CIでもAGPとWrapperが実際に更新されていることをログで確認してください。

代替策

直ちに更新できない場合は、AGP 8.10.0より前の検証済みバージョンへ一時的に戻す方法があります。ただし他の修正や互換性を失うため、依存関係を固定してCIで検証してください。

minifyEnabled falseで成功するか確認する方法は原因の切り分けに有効ですが、サイズ、最適化、難読化やルール検証が変わるため、そのまま本番公開する恒久策とは限りません。問題の入力を除外するProGuardルールは、Googleが一般的な公式回避策として保証したものではないため、個別に検証が必要です。

確認方法

  • ビルドログがAGP 8.13.0以降を示す
  • minifyReleaseWithR8とassembleReleaseが成功する
  • 生成されたAPK/AABを実機またはテストトラックで起動できる
  • 必要なクラスがR8で削除されていないことをRelease版で確認する

注意点

同じ例外でも、タスクがR8ではなくアプリのテストや独自Gradle Pluginで失敗している場合は別原因です。また、AGPだけを更新してWrapperやJDKの互換条件を無視すると別のエラーが発生します。更新は必ずバージョン管理下で行い、Release成果物を再テストしてください。

まとめ

R8タスク内の「ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0」は、AGP 8.10.0以降で報告された既知問題に該当する可能性があります。まずAGP 8.13.0以降へ更新し、互換性のあるGradleとJDKでクリーンビルドしてください。縮小の無効化は診断用、一時的なダウングレードは更新できない場合の限定的な代替策です。

公式情報