App包体积优化思路
2021-08-12 本文已影响0人
转岗做JAVA
iOS端思路:
代码优化
- 分析link map文件删除无效代码,可以借助LinkMap工具。
通过比对__objc_classrefs和_objc_classname之间的差异,可以筛选出很可能未被使用的类;
通过比对__objc_selrefs和_objc_methname之间的差异,可以筛选出很可能未被使用的方法;
考虑到动态性,尤其是永安plugin方法全是动态调用,比对结果需要人工一一审查确认。
Link Map介绍详见:https://www.jianshu.com/p/52e0dee35830
实践时发现并没有这么简单,并没有正确比对出哪些文件不再需要。
- 可以的话开启bitcode,反之将不支持的cpu架构从第三方库中移除。
资源优化:
-
审查工程或安装包中的各个文件,删除冗余和不再使用的资源文件,可以借助工具LSUnusedResources或FengNiao。
-
能不使用1x图就不使用,尽可能使用2x和3x图,虽然会导致开发包变大,但对于App Store的用户来说,体积会变小(iOS 9+ App Slicing的机制)。
-
形状相同颜色不同的单色图片,使用tint color+灰度图来处理,对于支持多主题的App效果会明显一些。
-
使用On-Demand Resource,将一些可按需加载的资源托管在服务器上。
On-Demand Resource详见:https://www.jianshu.com/p/bacedd8a3ad8
编译优化
- 尝试开启Link Time Optimization(LTO)为incremental。Dead Stripped Symbols会受到影响变少,所以有可能会使包体积不减反增。
持续优化&监控
- 超级App按业务模块进行大小监控,督促并推进“性价比”低的业务进行代码优化。同时,也要对版本差异大小进行监控,让包体积大小变得可控。
模块大小可以按照工程模块目录将link map中每个文件的大小聚合计算获取。