博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NDK学习(六): so文件兼容之abiFilters的使用
阅读量:5908 次
发布时间:2019-06-19

本文共 840 字,大约阅读时间需要 2 分钟。

最近项目中遇到了要使用opencv的情况,涉及到了abi兼容的选择。因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我只适配了armeabi-v7a这一个。但是今天在x64-v8a的模拟器上看的时候,提示我的library.so文件找不到,我记得这个应该是向下兼容的,但是出现这种情况很奇怪,于是我就在网上找了找答案。

解决方法:abiFilters

在app的gradle的defaultConfig里面加上这么一句

ndk {    abiFilters  "armeabi-v7a"  // 指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,armeabi,arm-v8之类的so会被过滤掉)}

这句话的意思就是指定ndk需要兼容的架构,把除了v7a以外的兼容包都过滤掉,只剩下一个v7a的文件夹。用了这个方法之后,确实解决了问题。这就是解决方法。

具体分析

其实这个方法我开始是很奇怪的,我明明没有指定其他的兼容框架,为什么会需要一个过滤。我打来了apk的包,找到了里面的lib目录,发现里面有很多的兼容目录,然后看到里面目录里面的是一个fresco的.so文件。也就是说,fresco做了各个平台的兼容,所以它创建了各个兼容平台的目录。因为只要出现了这个目录,系统就只会在这个目录里找.so文件而不会遍历其他的目录,所以就出现了之前找不到.so文件的情况(因为其他目录没有我的.so文件)。

总结

为了决定最后适配的abi版本,我下载了排行前几名的app,然后打开之后发现,他们基本上只适配了一个armeabi,少数会再加上v7a。我了解到的情况是armeabi性能较差,但是兼容性最好,v7a对于浮点计算的cpu来说性能更好,不兼容不支持浮点运算的cpu。我想到的是目前的手机cpu绝大多数应该是支持浮点运算的,而且安卓从2.2开始就支持v7a,所以v7a的兼容性应该也不是问题。无论如何,abiFilters还是应该添加的。

转载地址:http://luvpx.baihongyu.com/

你可能感兴趣的文章
Codeforces 260D - Black and White Tree
查看>>
算法笔记--辛普森积分公式
查看>>
5月4日团队博客
查看>>
[xsy2363]树
查看>>
CKEditor与CKFinder学习--自定义界面及按钮事件捕获
查看>>
MAC OS环境下搭建基于Python语言的appium自动化测试环境
查看>>
uva Fire!
查看>>
重新初始化RAC的OCR盘和Votedisk盘,修复RAC系统
查看>>
JavaScript模块化编程之require.js与sea.js
查看>>
让你的页面实现自定义的 Ajax Loading加载的体验!
查看>>
myeclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法
查看>>
python、javascript中的不可变对象
查看>>
进程间的数据共享
查看>>
ConcurrentLinkedQueue的isEmpty个size方法耗时比较测试
查看>>
Linux下允许mysql远程访问
查看>>
python开发部署时新增数据库中表的方法
查看>>
JS实现动画方向切换效果(包括:撞墙反弹,暂停继续左右运动等)
查看>>
VScode运行
查看>>
Java新知识系列 四
查看>>
从零开始学架构二 架构设计流程
查看>>