移动开发iOS开发iOS知识库

iOS APP安装包瘦身实践

2017-01-06  本文已影响5457人  Vinecnt

App安装包是由资源和可执行文件两部分组成,安装包瘦身也是从这两部分进行。

资源瘦身

1. 删除无用的资源
2.删除重复的资源

重复资源(主要指图片)不是指命名重复而是内容相同。

fdupes 是Linux下的一个工具,可以在指定的目录及子目录中查找重复的文件。fdupes通过对比文件的MD5签名,以及逐字节比较文件来识别重复内容。

项目中图片分两处存放,Assets.xcassetsimages文件夹,所以在这两个目录查找就可以。

    fdupes -r xxx/images xxx/Images.xcassets
3.无损压缩图片

ImageOptim是一款优秀的无损图片压缩工具,它通过优化压缩参数,移除无用的文件元数据和不必要的颜色配置来实现图片的无损压缩。

压缩完之后效果还是很明显的,可能是美术提供之前没压缩过(哭脸状),Assets.xcassets文件夹压缩效果
如下:

Assets.xcassets压缩效果

但发现实际生产的安装包体积没有变小,因为COMPRESS_PNG_FILESSTRIP_PNG_TEXT设置成了YES,Xcode会重新压缩一次图片,但是压缩之后的图反而比ImageOptim处理之后的图更大。改成NO就能让项目中的PNG保持不变。

图片管理方式

主要有两个方式管理图片,一种是在项目中添加文件夹存放,另一种是放在Assets.xcassets管理。推荐使用Assets.xcassets管理,因为它会把里边的所有 png 格式的图片压缩成一个Assets.car文件,压缩比率比其他方式管理图片要高,大大减少图片体积。

其它
  1. 上面主要讨论的是图片资源,其它资源文件如音频、视频都可以进行压缩处理,项目中还有些没用的Plist,readme之类的文件可以删掉。

  2. 另外xxx.proto文件也放在项目中,其实这个文件在项目中也是不用的,完全可以删掉!如果包含在bundle里面不仅增加安装包体积还存在相关安全隐患。

  3. 有些非必要的文件资源可以放在服务器,结合本地缓存策略。


可执行文件瘦身

LinkMap文件是Xcode产生可执行文件的同时生成的链接信息,用来描述可执行文件的构造成分,包括代码段(__TEXT)和数据段(__DATA)的分布情况。只要设置Project->Build Settings->Write Link Map File为YES,build完后就可以在设置的路径看到LinkMap文件了。

我们可以用脚本从linkmap中统计出每个.o目标文件占用的体积和每个.a静态库占用的体积 【脚本链接

LinkMap

从统计结果来看,静态库文件和protocal buffer文件占大头。

思维导图

api thin

终极大招

如果以上招数还不能把安装包降下来,那就放大招吧

砍需求

上一篇下一篇

猜你喜欢

热点阅读