您的位置:首页 > 移动开发 > IOS开发

iOS程序开发引用的第三方库之间出现冲突的处理方法

2017-02-17 10:58 567 查看
之前看过一篇类似的解说文章,链接为点击跳转原文,然后我也遇上了相同的问题,第三方包中的AsynSocket与自己工程的AsynSocket发生了冲突,通过控制台指令xcrun -sdk iphoneos lipo -info libx.a 发现libx.a中包含的armv7和arm64两种类型的文件,说明一下

arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad mini with Retina Display)

armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)

armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

因此,根据文章的内容只能用xcrun指令分离libx.a,具体做法可以参考链接,我怕大家看不懂,所以贴出我的流程如下:

将libx.a放到桌面(我的libx.a叫DvrCamSDK.a)



从简介看出原来的libx.a大小为4.5M,缩小后应该会有所减少

然后打开终端如下图,用指令xcrun -sdk iphoneos lipo -info DvrCamSDK.a 查看其合成的文件类型



可以看出这个第三方包包含了armv7和arm64两种文件,所以都要分别分离出来,然后剔除和我工程冲突了的AsynSocket

3.先分离出armv7,写法为
xcrun -sdk iphoneos lipo -extract_family armv7 -output DvrCamSDK-armv7.a DvrCamSDK.a
,即是将DvrCamSDK.a中分离出armv7的.a文件,并将分离出的.a文件改名为DvrCamSDK-armv7.a,看下图


分离成功的话可以在桌面看到多一个DvrCamSDK-armv7.a如下图



可以看出大小约为原来的.a包的一半,当然另一半是种类arm64的文件,两个种类的文件都一样,故两个都要分离和剔除冲突的文件

因为我的.a包没有armv7s的文件,因此根据原文中的理解,应该是最瘦的lib包了,故可以直接分解其内容,获取其所有的.o文件,具体命令为
ar -x DvrCamSDK-armv7.a
,如下图



分离完后可以看到DvrCamSDK-armv7.a中的所有.o文件如下



其中AsyncSocket.o和AsyncUdpSocket.o是和原来的工程冲突的文件,故删掉。删掉后把剩下的.o文件合成为新的DvrCamSDK-armv7.a,改名为newDvrCamSDK-armv7.a,代码为
libtool -static -o ../newDvrCamSDK-armv7.a *.o
如下图



这里遇到一点小问题,我在桌面看不到新生成的newDvrCamSDK-armv7.a,全局搜索,发现去到了根目录里了





可以看到newDvrCamSDK-armv7.a为1.7M大小,比DvrCamSDK-armv7.a小了,说明瘦身成功!

把桌面的.o文件全删掉防止分离arm64后分不清,然后同理从最原始的DvrCamSDK.a分离出DvrCamSDK-arm64.a,代码为
lipo DvrCamSDK.a -thin arm64 -output DvrCamSDK-arm64.a
如下图



然后同理在桌面看到DvrCamSDK-arm64.a



获取其所有的.o文件,具体命令为
ar -x DvrCamSDK-arm64.a
,如下图



同理生成的.o文件在桌面,剔除冲突文件AsyncSocket.o和AsyncUdpSocket.o



用指令
libtool -static -o ../newDvrCamSDK-arm64.a *.o
合成新的newDvrCamSDK-arm64.a文件,同理可以查找到newDvrCamSDK-arm64.a在根目录





把桌面所有.o文件删除,把newDvrCamSDK-arm64.a和newDvrCamSDK-armv7.a移到桌面,然后用
lipo -create -output newDvrCamSDK.a newDvrCamSDK-armv7.a newDvrCamSDK-arm64.a
合成新文件newDvrCamSDK.a





最后新文件瘦身成功!引入工程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐