个人总结,因为项目开发的原因,需要ndk开发一部分功能,并打包成so使用,在打包so过程中发现生成的so过大,如下图有15M的样子,很大。所以决定看一些so优化相关的知识。
这是我通过cmake方式直接在as上运行出来生成的so,研究以后才知道,so还有debug和release包的区分,上面这个就是debug的so。
在as上task->other->
点击这个方式build会生成release的so库,如下图。
会减少几百k的大小,但还是很大,仍有14M多。
参考https://blog.csdn.net/u010019468/article/details/78271965这个博客发现
release包这么大还是因为编译过程中生成二进制码没有被剥除。故根据其提供方式在cmakelist.txt中添加如下关键配置项:
编译so之后大大优化so大小,见下图
优化之后大小减了一半多,只有6M多了。
鉴于项目开发时一些so库只有so没有源代码,太大无法自己重新打包,研究到有一种工具UPX可以对于so这种文件直接压缩, 工具库地址 https://github.com/upx/upx。
其中有写到
UPX是一种高级可执行文件处理器,可以压缩50%多的大小。
使用方法如下
接着把release刚才打包的压缩文件用UPX工具再次进行压缩,过程与结果如下。
明显可见压缩效率之高,6M多的so又压缩到了2M多。亲测原功能正常运行。
甚是欢喜,这下子不会因为so太大导致apk增大过多了。这次研究下来收获还是蛮大的压缩率高达86%~(#^.^#)