需求:拆分iOS中体积较大的第三方静态库以实现软件瘦身.
阅读前提:
- 了解各种架构的静态库含义
- 了解如何使用Terminal
简书地址 : 拆分iOS静态库
博客地址 : 拆分iOS静态库
掘金地址 : 拆分iOS静态库
基本介绍
一般静态库中支持真机和模拟器多种CPU架构,比如(armv6, armv7,armv7s, arm64, i386, x86_64)。
但比如APP打包上架时可能希望更小的安装包,所以我们可以对项目中的静态库进行拆分,因为对用户而言只是使用真机环境,所以包含模拟器的静态库其实是多余的。
注意:APP上架时不能包含i386、x86_64的架构, 否则将编译将报错.
静态库基本操作
1. 查看静态库信息
首先在Terminal中进入当前静态库所在的位置,然后使用下面指令查看当前静态库包含的架构的信息
1 | lipo -info ./xxx.a |
此时终端会显示类似如下语句, 即该静态库包含的所有架构信息
1 | Architectures in the fat file: ./xxx.a are: i386 x86_64 armv7 arm64 |
2. 拆分静态库
使用以下命令可以实现将xxx.a中的armv7架构分离为新的 xxx_armv7.a 静态库(该静态库只包含armv7架构).1
lipo ./xxx.a -thin armv7 -output xxx_armv7.a
3. 合并静态库
使用下面命令可实现将xxx_armv7.a与xxx_arm64.a合并为一个新的静态库new.a.1
lipo -create xxx_armv7.a xxx_arm64.a -output new.a
附: 利用脚本实现剥离整个文件夹下的所有静态库
例如,如下实现了将libs文件夹下所有文件剥离为只包含arm64的静态库(覆盖之前文件)
如有其它需求可稍作改动
以下是apart.sh脚本文件中的所有内容,该脚本将当前目录下的Libs文件夹中所有静态库剥离为只包含arm64的静态库并替换原先静态库.
1 | set -x |
而我们只需要在该脚本所在路径使用以下命令1
./apart.sh
如果libs中有的静态库已经只是arm64会跑错,可忽略(错误信息:must be a fat file when the -thin option is specified)