安装包(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,其余多数为常用类库,预计5
15M 二期: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
- 无用业务排查下线
- 资源在线化方案
- 实现包大小增量监控方案及时发现新业务需求中的增量点 所需资源
- 部分图片资源考虑到会有压缩,过程中可能需设计团队提供支持
- 对于涉及到和业务结合的代码部分,需相应业务代码开发者提供支持以保证不影响原业务逻辑
- 三期目标中如提供资源下载方案,需服务端能提供相应能力支持 风险点及解决方案
- 考虑到清晰度及展示效果,压缩率需要权衡,需结合大小和体验效果考虑
- 三方库为整体依赖的资源包,无源码情况下只有替换才能减少,结合第三方库的大小及对其依赖情况,可考虑替换或重写
- 对如ECCP的依赖,由于ECCP采用framework整体提供,不可控制内容,且ECCP所占资源较大,需要ECCP提供支持)
- 目前正在接入百家云,目前了解百家云SDK体积也较大iOS预估有100多兆,集成进来后App安装包体量可能会增加较多