一、为什么要适配 API 35?
- Google Play 政策要求(2025 年 8 月 31 日前必须使用目标 API ≥ 35),新应用和应用更新必须以 Android 15(API 级别 35)或更高版本为目标平台,才能提交到 Google Play;但 Wear OS、Android Automotive OS 和 Android TV 应用除外,这三类应用必须以 Android 14(API 级别 34)或更高版本为目标平台
二、初次尝试升级 API 35:targetSdkVersion
和 compileSdkVersion
升级
-
如何修改
build.gradle
(targetSdk
、compileSdk
)由原来的34改成35 -
使用 Android Studio - Tools - SDK Manager 里面勾选 `Android API 35` - Apply - OK
-
当你作完这些操作,以为一切都如你所愿的时候
-
构建失败:AAPT2 报错日志初现,具体报错如下:
Android resource linking failed ERROR: AAPT: aapt2 E 07-08 17:18:37 14244 191554 LoadedArsc.cpp:94] RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data. aapt2 E 07-08 17:18:37 14244 191554 ApkAssets.cpp:152] Failed to load resources table in APK '/Users/sady/Library/Android/sdk/platforms/android-35/android.jar'. error: failed to load include path /Users/sady/Library/Android/sdk/platforms/android-35/android.jar.
三、遇到的核心错误:AAPT2 linking failed
-
错误信息详解:
-
RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data
-
failed to load resources table in APK
-
failed to load include path android-35/android.jar
-
-
原因分析:资源表损坏 or SDK platform 下载不完整
四、彻底排查 & 解决流程
-
删除损坏的 android-35 SDK:
rm -rf ~/Library/Android/sdk/platforms/android-35
-
清除 SDK 缓存(可选但推荐):
rm -rf ~/.android/cache
-
使用 CLI 工具重新下载 SDK:
sdkmanager --sdk_root=$HOME/Library/Android/sdk "platforms;android-35"
-
验证
android.jar
和资源目录是否完整 -
检查所有模块(含 SDK module)是否引用正确版本
-
一顿操作下来,还是报一样的错误,崩溃了😡
五、最终解决方案
-
升级 File - Project Structure里面的这两个版本
-
当你在项目中将 compileSdkVersion
或 targetSdkVersion
升级到 API 35(Android 15) 时:
-
旧版本的 Android Gradle Plugin(如
7.3.x
或更低)并没有为 API 35 做适配 -
旧版 AGP 内部调用的 AAPT2 工具 对新的资源格式或资源表结构支持不足