Windows下Flutter编译失败:SDK35的android.jar损坏(27MB而非100MB)
问题描述
在Windows 10/11环境下构建依赖google_mobile_ads:3.1.0(强制依赖Android SDK 35)的Flutter应用时,持续触发以下构建报错:
aapt2.exe E LoadedArsc.cpp:94] RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data. Failed to load resources table in APK android-35/android.jar. error: failed to load include path android-35/android.jar.
多次通过SDK管理器、手动下载重装SDK 35后,android.jar大小始终为27MB,尝试替换其他版本jar、修改compileSdk版本等操作均无法解决问题。
可行解决方案
1. 手动替换完整的android.jar
官方platform-35_r02的android.jar正常大小确实约为27MB,大小本身无法直接判定损坏。你可以从其他能正常使用SDK 35的设备(Windows或macOS均可)复制完整的android-35/android.jar文件,替换本地%ANDROID_SDK_ROOT%\platforms\android-35\路径下的对应文件,替换后重试构建。
2. 临时绕过SDK 35强制依赖
若暂时无法修复SDK 35的安装问题,可通过Gradle依赖覆盖强制使用SDK 34:
- 在项目根目录的
android/build.gradle中添加:configurations.all { resolutionStrategy { // 覆盖依赖,避免SDK 35的强制引入 force 'com.android.support:support-v4:28.0.0' force 'com.android.support:appcompat-v7:28.0.0' } } - 在
android/app/build.gradle中修改版本配置:android { compileSdkVersion 34 defaultConfig { targetSdkVersion 34 } }
注意:此方案存在兼容性风险,仅作为临时过渡使用,后续优先修复SDK 35安装问题。
3. 使用离线SDK包手动安装
下载官方完整的Android SDK Platform 35离线包,完全删除本地旧的android-35文件夹后,将离线包解压到%ANDROID_SDK_ROOT%\platforms\目录下,确保文件完整覆盖。
4. 排查网络环境干扰
Windows的代理、防火墙可能在下载过程中截断SDK文件,导致android.jar不完整。尝试关闭代理、防火墙后重新下载SDK 35,或更换网络环境(如手机热点)进行下载。
补充验证方式
若不确定android.jar是否损坏,可尝试解压该文件:如果解压过程中出现报错,说明文件确实存在损坏;若能正常解压,可进一步检查内部资源文件的完整性。
内容的提问来源于stack exchange,提问作者Paulo

