怎么去掉工程中无用的so包(Realm的坑)
来源:互联网 发布:上海华讯网络 待遇 编辑:程序博客网 时间:2024/05/06 06:01
之前在项目中引用了百度地图的SDK,按照官方文档来操作,把所有的so包全都拷贝到libs文件夹下,结果app蹭的一下多了好几M,后来项目快上线的时候,经理就说,这个app怎么这么大呢,想办法压缩一下。没办法,只能硬着头皮搞啰。
后来,在网上找了好多减少apk大小的教程。基本上都提到了只保留一个armeabi文件夹下的so包。
然后我删掉了其他文件夹的so包,然后一运行,哈哈,真的小了3M左右,而且运行没有任何问题。
不过我没高兴多久,过了几天,在我同事的手机上,直接崩溃了,错误是百度SDK初始化异常。找不到so包,后来又只好找度娘呗,但找了好多资料,都是说不影响的。
后来找到一篇文章,说只要保证工程下只有一个armeabi目录就没有问题。
后来我在各种jar包中找so包,嘿,还真让我找到了。
然后删掉so包,在运行在同事手机上还是直接闪退。
后来尝试各种方法,不下20次。
后来干脆新建工程,只留下armeabi文件夹,果然可以。
接下来,我又开始了漫长的代码迁移工作,等到迁移完成一运行,又闪退了。
我开始怀疑人生了,这尼玛到底咋回事。
后来,我一步一步的迁移代码,终于让我找到了罪魁祸首Realm
由于我使用的是Realm1.0的,展开jar包是看不到so文件的,当初我也正是被这一点蒙蔽了。
后来我仔细找才终于找到realm的全部so包。
上图大家看
整整10M啊,我的天,压缩以后也还有好几M呢。
好了,找到原因了,那到底应该如何解决呢。
接下来应该算是重点了,在大神的指点下,我发现realm的官方文档中有这样一段话:
android{ splits { abi { enable true reset() include 'armeabi' universalApk false//是否要打包一个通用的apk } }}
在项目module的build.gradle加上这段代码就可以只打包armeabi了。
千万不要以为这段代码只对Realm有效噢,对所有的类似问题都是有效的。
如果需要添加多个架构,但只想生成一个apk的可以把上面那段代码删掉,在defaultConfig中添加abi过滤即可。
defaultConfig { ... ndk { abiFilters 'armeabi','armeabi-v7a' } }
理论上来说其他几种架构都是支持armeabi中so包的,不过有时候也可能会出现一些问题。在一些比较老的设备上,可能会出现未知的Crash,如果你的app对大小没有要求,对兼容性要求非常严格,可以不考虑这种方案。
删掉其他so包,具体会有什么影响,可以参考这篇文章
最后,对文章中提到的内容有任何疑问,欢迎加群讨论:283272067
- 怎么去掉工程中无用的so包(Realm的坑)
- 去掉ViewState中DataGrid的无用数据
- Windows中无用的服务怎么删除?
- eclipse去掉无用的validation
- 水晶报表中去掉小数点后面无用的零
- 删除iOS工程中无用的资源文件
- Android清除工程中无用的资源文件
- 消除C++工程中生成的无用文件
- 去掉DataGrid的ViewState中的无用数据
- 去掉DataGrid的ViewState中的无用数据
- 去掉DataGrid的ViewState中的无用数据
- 去掉Query无用的过滤InfoObject
- 去掉DataGrid的ViewState中的无用数据
- 去掉DataGrid的ViewState中的无用数据
- git 去掉已经暂存的无用文件
- Resource Shrinking去掉无用的资源
- eclipse优化之去掉无用的validation
- eclipse 去掉无用的 validation 优化eclipse
- 获取listView的选项信息
- bzoj 4247: 挂饰
- javascript学习资源
- 如何使用管理权限运行CMD?
- 年度计划 2016
- 怎么去掉工程中无用的so包(Realm的坑)
- EditText只能输入中文,字母,汉字
- 最小二乘法与梯度下降法比较
- mysqlbinlog: unknown variable 'default-character-set=utf8'
- ARM中.c文件和.h文件区别
- React学习笔记
- git使用记录
- IOS实战 (1) 之 仿 LOFTER 底部 水平滑动(也有 Android 版本哦)
- python之内建函数类型转换