RES_TABLE_TYPE_TYPEエラーの解決(compileSdk 35)
問題の説明
AndroidプロジェクトをcompileSdkVersion 35
に更新した際、ビルド時に次のエラーが発生する現象があります:
ERROR:: AAPT: aapt2.exe E ... LoadedArsc.cpp:96] RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data.
aapt2.exe E ... ApkAssets.cpp:149] Failed to load resources table in APK '...\android-35\android.jar'.
error: failed to load include path ...\android-35\android.jar.
このエラーは主に以下の特徴があります:
- Android 35(Android 15)のSDKを使用する場合に発生
- リソーステーブルの読み込み中にオフセット情報が競合
android.jar
の読み込みに失敗しビルド中断
注意
エラーメッセージに含まれるファイルパス ...\android-35\android.jar
は、Android SDKのバージョン35に対応するプラットフォームファイルを示しています
原因
この問題は Android Gradle Plugin(AGP)のバージョン と Gradle自体のバージョン がcompileSdk 35と互換性がない場合に発生します。Google公式のIssue Trackerで報告されているように、特定のAGPバージョンがAndroid 35のリソースフォーマットを適切に処理できないことが原因です。
https://issuetracker.google.com/issues/342522139
解決方法
compileSdkVersion 35
を使用するには、以下のバージョンの組み合わせが有効です:
1. AGPのバージョン更新
プロジェクトの build.gradle
ファイルでAndroid Gradle Pluginを更新:
// ルートレベルの build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:8.4.2' // 8.4.2 以上
}
2. Gradle Wrapperの更新
gradle-wrapper.properties
ファイルでGradleのバージョンを更新:
# gradle/wrapper/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
3. 更新後のプロジェクト構成
更新後、以下の組み合わせになっていることを確認:
コンポーネント | 必要バージョン |
---|---|
Android Gradle Plugin | 8.4.2+ |
Gradle | 8.6+(Wrapper経由) |
compileSdkVersion | 35 |
更新手順のポイント
- Android Studioで File > Project Structure...
- Project タブでGradleバージョンを
8.6
に設定 - Modules > app でAGPバージョンを
8.4.2
以上に設定
バージョンの互換性について
正しいバージョンの組み合わせが守られていない場合、類似のエラーが再発する可能性があります。公式のバージョン互換性表を定期的に確認してください:
https://developer.android.com/build/releases/gradle-plugin#compatibility
重要な注意点
- Android 35対応にはAGP 8.3.0以上の必須
- Gradle 8.6を使用する場合、Java 17+ が必要
- 依存ライブラリがAndroid 35サポート状況を確認
代替対応方法
プロジェクトの事情で即時アップデートが困難な場合、暫定的にcompileSdkVersion
を34に戻すことも可能です:
// app/build.gradle
android {
compileSdk 34 // 34にダウングレード
defaultConfig {
...
targetSdk 34
}
}
ただしこれは一時的な回避策であり、Android 15の新機能を活用するには最終的にcompileSdk 35への移行が必要です。
今後のアップデート対応
Androidエコシステムは更新が早いため、定期的に以下を確認しましょう:
これらの情報源を確認することで、新たなバージョンリリース時の互換性問題を事前に回避できます。