iOS包大小优化-二进制检测和优化

582 阅读2分钟

iOS包大小优化-二进制检测和优化

今年开始做和性能优化有关的工作,有些我个人认为有用的有价值的经验总结,分享给需要的同学。会包含一个系列,以我个人做的时间顺序形成对应的章节,内容包含:包大小、CPU、内存这些老生常谈的性能优化话题。内容上的初衷是尽量避免和已有的同质化,提供一些不同的观点。

结果

仓库链接:BBLinkMapParser

工具检测结果如下

image-20220708213321183

该工具存在限制如下:

  • Linkmap是从文件的角度分析(一个文件可能包含多个类、文件名称和类名称可能不一致)、无用类是用类的角度分析,只能筛选出文件包含单个类并且文件名和类型相同的结果
  • 无用类分析目前只支持一级无引用的分析,多级无引用的分析暂不支持(比如 A∉主工程 && A->B,可以分析出无用类为A,但是B会被忽略)

为什么做

谈到包大小优化,大体上是考虑以下的优化点

  • 资源优化
    • 无用资源查找和去除
    • 图片压缩(有损压缩)
    • Asset.car 编译优化(Asset Catalog Optimization)
    • 音频文件优化
    • 文件压缩(减少安装大小)
  • 二进制优化
    • 编译选项优化
      • Link-Time Optimization
      • Apple Clang Optimization Level
      • Swift Compiler Optimization
    • Link Map 分析处理

这些点在网上都可以找到所需的资料,但是并没有一个工具可以做到: 分析无用代码是分布在代码的哪些模块,哪些类中,方便定位并和做针对性的优化。所以考虑使用 Link Map 作为切入点,结合无用代码检测工具,二次开发一个检测工具,

调研实施

网上可以找到比较好的无用代码分析工具是 WBBlades 以及基于Linkmap的代码大小分析工具 LinkMap ,所以大体有个想法基于这两个工具开发一个无用代码分布检测工具,所以就有了 BBLinkMapParser

主要的步骤如下:

  1. 解析 LinkMap 获取所有目标文件的大小占用
  2. 通过 WBBlades 获取无用的类文件(命令行的方式调用)
  3. 第1步和结果和第2步的结构取交集生成一个结果
  4. 第3步的结果根据用户输入条件筛选,打印出最终的结果

这里就不贴代码了,有需要直接查看代码即可。

参考