Flutterでandroid-35リソースリンクエラーを解決
問題点
Flutterプロジェクトのリリースビルド実行時に以下のエラーが発生します:
bash
Android resource linking failed
aapt2 E ... Failed to load resources table in APK .../android-35/android.jar
error: failed to load include path .../android-35/android.jar.
エラーが発生する条件:
compileSdkVersion
が35- Android Gradle Plugin (AGP) バージョンが 7.3.0
targetSdkVersion
が34に設定- Flutterのリリースビルド時のみ発生
エラーの背景
このエラーはAndroid SDK 35と古いAGP間の互換性問題が原因です。aapt2リソースコンパイラがSDK 35のリソースを正しく処理できません。
解決方法
✅ 推奨解決策: Android Gradle Pluginの更新
Gradleラッパーのバージョン更新
gradle-wrapper.properties
を変更:propertiesdistributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
プロジェクトレベルのbuild.gradle変更
AGPバージョンを最新に指定:groovybuildscript { dependencies { classpath 'com.android.tools.build:gradle:8.5.0' } }
アプリレベルのbuild.gradle変更
プラグインと基本設定を更新:groovyplugins { id "com.android.application" version "8.5.0" apply false // 他のプラグイン... } android { compileSdk 35 // Flutter推奨バージョン使用 compileSdkVersion flutter.compileSdkVersion minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion }
ビルド環境クリーンアップ
コマンドを順に実行:bashflutter clean flutter pub get flutter build apk --release
AGPとSDKバージョンの注意点
compileSdk=35
でビルドする場合:
- AGP 8.5.0は公式にSDK 35をサポートしていません(警告が出力されます)
- 警告を非表示にするには
gradle.properties
に追加:propertiesandroid.suppressUnsupportedCompileSdk=35
🔧 Flutter推奨設定を使用する(代替案)
設定ファイルを簡素化し安定化する方法:
groovy
android {
namespace "com.example.app"
compileSdk flutter.compileSdkVersion // Flutter互換バージョンを使用
ndkVersion flutter.ndkVersion // Flutter指定NDK
defaultConfig {
minSdk flutter.minSdkVersion // 互換性を保証
targetSdk flutter.targetSdkVersion
versionCode 1
versionName "1.0"
}
}
このアプローチの利点:
- Flutterがテスト済みのSDKバージョンを自動適用
- 新しいAndroid SDKリリース時の互換問題を予防
- プロジェクトのメンテナンス簡略化
💡 追加トラブルシューティング
Manifestエラーが発生する場合:
android/app/src/main/AndroidManifest.xml
から不要なpackage
属性を削除- 名前空間は
build.gradle
のnamespace
設定でのみ管理
desugaringが必要なライブラリ使用時:
groovydependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
解決策の技術的背景
なぜこのエラーが発生するのか
AGPとSDKバージョンのミスマッチ:
- AGP 7.xはSDK 35のリソース形式に対応していない
android.jar
のリソーステーブル読み込みに失敗
aapt2の互換性問題:
- 古いaapt2はSDK 35の新しいリソース構成を解析できない
- AGP 8.5.0ではaapt2が更新され問題解消
バージョン選択のベストプラクティス
コンポーネント | 推奨バージョン | 重要度 |
---|---|---|
Gradle | 8.9+ | ★★★ |
AGP | 8.5.0 | ★★★ |
compileSdk | flutter提供バージョン | ★★ |
targetSdk | flutter提供バージョン | ★★ |
最終チェック項目:
- [x] AGPバージョンが8.5.0以上であるか
- [x] Gradleが8.9以上であるか
- [x]
flutter clean
を実行済みか - [x]
compileSdkVersion
でFlutter提供値を使用しているか
これらの修正により、SDK 35環境でのリソースリンクエラーは解決し、安定したリリースビルドが可能になります。