ipa瘦身

441 阅读4分钟

安装包(IPA)主要由可执行文件、资源组成

1、资源(图片、音频、视频等) 采取无损压缩 去除没有用到的资源

2、可执行文件瘦身 编译器优化
trip Linked Product、 Make Strings Read-Only、 Symbols Hidden by Default 设置为YES 去掉异常支持,Enable C++ Exceptions、Enable Objective-C Exceptions设置为NO, Other C Flags添加-fno-exceptions 3、利用AppCode检测未使用的代码 4、编写LLVM插件检测出重复代码、未被调用的代码

iOS端 一期:未使用资源清理、无用类清理,无用第三方库清理 、编译选项优化、资源文件等尽可能压缩处理 二期:相似功能等工具类代码合、第三方库库使用少量功能的考虑重写替换、排查cocoapod重复合并资源文件、统一应用风格减少多字体 三期:无用业务排查下线、非直接依赖大资源文件提供下载服务支持、实现包大小增量监控方案及时发现新业务需求中的增量点,早发现早优化 Android 端 一期:Assets清理、无用类清理、无用第三方libs清理 、Dex优化、资源文件尽可能压缩处理 二期:重复资源优化,相似lib或代码功能合并、统一应用风格相关如字体等文件 三期:无用业务排查下线、资源在线化方案、实现包大小增量监控方案及时发现新业务需求中的增量点,早发现早优化 各优化步骤产出结果 iOS 一期: 无用资源清理,预计减少15~30M目标

  • 未使用资源清理、资源压缩、清理无用图片,视频等,目前图片资源音视频资源共38.7M,预计减少8~15M
  • 无用类清理,编译选项优化:影响Mach-O大小,目前20M,,此部分压缩空间较少,预计5M内
  • 无用第三方库清理 :第三方Framework目前共150兆,其中ECCP 100M,其余多数为常用类库,预计515M 二期:framwrok清理或替换,共150M,此部分都为整体依赖的代码资源等,如ECCP 100M,预计在1期基础上减少510M,替换或重写部分framwork
  • 相似功能等工具类代码合
  • 第三方库库使用少量功能的考虑重写替换
  • 排查cocoapod重复合并资源文件 三期:结合业务下线情况,结合目前使用到的可下载资源包,预计减少30~40M
  • 无用业务排查下线
  • 非直接依赖大资源文件提供下载服务支持,目前可提供下载服务的如字体包28M,
  • 实现包大小增量监控方案及时发现新业务需求中的增量点 Android 一期:资源文件约53M,libs 约33M,dex约9M,一期预计减少10~20M
  • Assets优化
  • res
  • libs优化
  • Dex优化
    • 移除无用代码重复代码
    • 编译混淆配置优化
    • 去除 debug 信息与行号信息 二期:预计减少5-10M
  • 重复资源优化
  • 相似lib或代码功能合并
  • 统一应用风格相关如字体等文件 三期: 预计减少5M
  • 无用业务排查下线
  • 资源在线化方案
  • 实现包大小增量监控方案及时发现新业务需求中的增量点 所需资源
  1. 部分图片资源考虑到会有压缩,过程中可能需设计团队提供支持
  2. 对于涉及到和业务结合的代码部分,需相应业务代码开发者提供支持以保证不影响原业务逻辑
  3. 三期目标中如提供资源下载方案,需服务端能提供相应能力支持 风险点及解决方案
  4. 考虑到清晰度及展示效果,压缩率需要权衡,需结合大小和体验效果考虑
  5. 三方库为整体依赖的资源包,无源码情况下只有替换才能减少,结合第三方库的大小及对其依赖情况,可考虑替换或重写
  6. 对如ECCP的依赖,由于ECCP采用framework整体提供,不可控制内容,且ECCP所占资源较大,需要ECCP提供支持)
  7. 目前正在接入百家云,目前了解百家云SDK体积也较大iOS预估有100多兆,集成进来后App安装包体量可能会增加较多