当前位置: 首页 > news >正文

实战:Android 15 (API 35) 适配 构建踩坑全记录

一、为什么要适配 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.gradletargetSdkcompileSdk)由原来的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 下载不完整


四、彻底排查 & 解决流程

  1. 删除损坏的 android-35 SDK:

    rm -rf ~/Library/Android/sdk/platforms/android-35
    
  2. 清除 SDK 缓存(可选但推荐):

    rm -rf ~/.android/cache
    
  3. 使用 CLI 工具重新下载 SDK:

    sdkmanager --sdk_root=$HOME/Library/Android/sdk "platforms;android-35"
    
  4. 验证 android.jar 和资源目录是否完整

  5. 检查所有模块(含 SDK module)是否引用正确版本

  6. 一顿操作下来,还是报一样的错误,崩溃了😡


五、最终解决方案

  • 升级 File - Project Structure里面的这两个版本

当你在项目中将 compileSdkVersion 或 targetSdkVersion 升级到 API 35(Android 15) 时:

  • 旧版本的 Android Gradle Plugin(如 7.3.x 或更低)并没有为 API 35 做适配

  • 旧版 AGP 内部调用的 AAPT2 工具 对新的资源格式或资源表结构支持不足

http://www.dtcms.com/a/270233.html

相关文章:

  • 板凳-------Mysql cookbook学习 (十一--------5)
  • 《每日AI-人工智能-编程日报》--2025年7月8日
  • Softhub软件下载站实战开发(十六):仪表盘前端设计与实现
  • 香港风水(原生)林地的逻辑分类器
  • 缺乏项目进度预警机制,如何建立预警体系
  • 从零开始手写嵌入式实时操作系统
  • 【c++八股文】Day4:右值,右值引用,移动语义
  • 使用协程简化异步资源获取操作
  • qt-C++语法笔记之Stretch与Spacer的关系分析
  • Python Web应用开发之Flask框架高级应用(三)——蓝图(Blueprints)
  • openssl 生成国密证书
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十五天
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+vue实现的供电公司安全生产考试管理系统,推荐!
  • 【OD机试题解法笔记】跳马
  • MySQL8.0.40.0MSI安装教程
  • [特殊字符] AlphaGo:“神之一手”背后的智能革命与人机博弈新纪元
  • 汽车功能安全系统阶段开发【技术安全方案TSC以及安全分析】5
  • TypeScript 接口全解析:从基础到高级应用
  • Crazyflie无人机集群控制笔记(一)通过VRPN实时对接Crazyswarm2与NOKOV度量动捕数据
  • 数据湖技术之Iceberg-03 Iceberg整合Flink 实时写入与增量读取
  • Linux文件描述符与标准I/O终极对比
  • BabelDOC,一个专为学术PDF文档设计的翻译和双语对比工具
  • C#使用Semantic Kernel实现Embedding功能
  • 解决GitHub仓库推送子文件夹后打不开的问题
  • C++高频知识点(六)
  • vue3使用inspira-ui教程【附带源码】
  • Ansible 介绍及安装
  • ubuntu24.04(vmware workstation 17.6pro)无法安装vmtools的问题解决
  • mini-program01の系统认识微信小程序开发
  • 云原生详解:构建现代化应用的未来