美文网首页权哥的技术之路
iOS拆分,合并静态库以压缩打包空间

iOS拆分,合并静态库以压缩打包空间

作者: 小东邪啊 | 来源:发表于2018-11-26 12:22 被阅读17次

    需求:拆分iOS中体积较大的第三方静态库以实现软件瘦身.


    阅读前提:

    • 了解各种架构的静态库含义
    • 了解如何使用Terminal

    简书地址 : 拆分iOS静态库

    博客地址 : 拆分iOS静态库

    掘金地址 : 拆分iOS静态库


    基本介绍

    一般静态库中支持真机和模拟器多种CPU架构,比如(armv6, armv7,armv7s, arm64, i386, x86_64)。

    但比如APP打包上架时可能希望更小的安装包,所以我们可以对项目中的静态库进行拆分,因为对用户而言只是使用真机环境,所以包含模拟器的静态库其实是多余的。

    注意:APP上架时不能包含i386、x86_64的架构, 否则将编译将报错.

    静态库基本操作

    1. 查看静态库信息

    首先在Terminal中进入当前静态库所在的位置,然后使用下面指令查看当前静态库包含的架构的信息

    lipo -info ./xxx.a
    

    此时终端会显示类似如下语句, 即该静态库包含的所有架构信息

    Architectures in the fat file: ./xxx.a are: i386 x86_64 armv7 arm64 
    

    2. 拆分静态库

    使用以下命令可以实现将xxx.a中的armv7架构分离为新的 xxx_armv7.a 静态库(该静态库只包含armv7架构).

    lipo ./xxx.a -thin armv7 -output xxx_armv7.a 
    

    3. 合并静态库

    使用下面命令可实现将xxx_armv7.a与xxx_arm64.a合并为一个新的静态库new.a.

    lipo -create xxx_armv7.a xxx_arm64.a -output new.a
    

    附: 利用脚本实现剥离整个文件夹下的所有静态库

    例如,如下实现了将libs文件夹下所有文件剥离为只包含arm64的静态库(覆盖之前文件)

    如有其它需求可稍作改动

    以下是apart.sh脚本文件中的所有内容,该脚本将当前目录下的Libs文件夹中所有静态库剥离为只包含arm64的静态库并替换原先静态库.

    set -x
    
    # Make all libs to arm64
    cd libs
    for file in `ls`
    do
      lipo $file -thin arm64 -output $file
    done
    cd ..
    

    而我们只需要在该脚本所在路径使用以下命令

    ./apart.sh
    

    如果libs中有的静态库已经只是arm64会跑错,可忽略(错误信息:must be a fat file when the -thin option is specified)

    注意:脚本所在路径下必须包含名为libs的文件夹,并将静态库放入其中.否则请根据需求自行修改脚本文件.

    相关文章

      网友评论

        本文标题:iOS拆分,合并静态库以压缩打包空间

        本文链接:https://www.haomeiwen.com/subject/euikmftx.html