前言

最近项目中遇到了要使用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还是应该添加的。

关于abiFilters的使用相关推荐

  1. android so abi适配,Android NDK学习(六): so文件兼容之abiFilters的使用

    最近项目中遇到了要使用JavaCV的情况,涉及到了abi兼容的选择.因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我只适配了armeabi-v7a这一个.但是今天在x6 ...

  2. android配置so支持armeabi,安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)...

    背景 Android 系统本质是一个通过改造的 Linux 系统,so库是Linux系统上使用的共享库(相似windows上的dll).最先,Android 系统只支持 ARMv5 的 CPU 构架, ...

  3. 关于SO引用的过滤:abiFilters

    2019独角兽企业重金招聘Python工程师标准>>> 关于SO文件的引用,一直都没深究过,最初是把所有架构的SO包统统放进项目,每次新增引用都是如此,而现在的项目由于对apk文件大 ...

  4. 边实验边分析-NDK篇-abiFilters配置分析

    边实验边分析-NDK篇-abiFilters配置分析 首先我们需要了解一个行为,NDK会对我们的原生代码进行构建,针对不同的操作系统架构,生成不同的ABI(应用程序二进制接口)的so库,并将构建生成的 ...

  5. Android Studio gardle 配置 ndk 指定 ABI: abiFilters 详解

    一.ABI 是什么 ABI 是 Application Binary Interface 的缩写. 不同 Android 手机使用不同的 CPU,因此支持不同的指令集.CPU 与指令集的每种组合都有其 ...

  6. NDK abiFilters含义

      NDK开发时,在build.gradle中,cmake和ndk都有abiFilters的设置.如下所示: cmake {cppFlags ""abiFilters " ...

  7. ReactNative进阶(三十八):Android ndk abiFilters 详解

    一.前言 二.ABI 是什么 三.为何设置 ndk 的 abiFilters 四.如何配置 gardle 五.ABI支持详解 六.支持建议 七.拓展阅读 一.前言 Android 系统本质是一个经过改 ...

  8. android .so深入理解 abiFilters的使用等

    为什么使用so so机制让开发者最大化利用已有的C和C++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码: so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快: s ...

  9. abiFilters

    ndk {abiFilters "armeabi-v7a" }代表只是打 armeabi-v7a文件夹中的so包

最新文章

  1. SQL查询结果集对注入的影响及利用
  2. [导入]控制IFrame里的页面滚动原来如此简单:)
  3. shell脚本编程第一天
  4. 初学FF(火狐)的扩展(Extensions)
  5. opencv图像处理常用函数
  6. 在windows server 2012R2中安装域服务
  7. Javascript右键菜单类
  8. Mysql数据库常用指令
  9. Ext.Net全部Icon图标名称展示
  10. “我们完全误解了区块链!”
  11. Linux下如何使CP命令不提示覆盖
  12. Win10电脑如何合并磁盘分区
  13. Vue:错误Component template should contain exactly one root element解决
  14. java实例化类方法_Java 实例化类的的几种方法
  15. 系统分析与设计-(二)系统规划
  16. 央企:中国航天建设集团2022年毕业生招聘
  17. 个人取得工资、薪金所得应当如何缴纳个人所得税
  18. 如何搭建一个公司网站?
  19. php退款,PHP实现微信申请退款流程的方法
  20. qt linux不能读写u盘文件,Qt读取U盘文件内容

热门文章

  1. 确认过小表情,微信数据说我是00后~你呢?
  2. 我放弃了 Google 的工作,因为他们拒绝给我买圣诞礼物
  3. 卸载和重装docker的方式
  4. 图解Topo拓扑排序 例题洛谷P4017 最大食物链计数
  5. 香港证监会:ICO在港受证券法规监管
  6. 输入法全角半角怎么切换?(右下角输入法右键--> 全半角--> 选择半角还是全角)
  7. Android手绘电子签名
  8. python自动化书籍pdf_Python自动化运维技术与最佳实践PDF可复制版电子书免费下载...
  9. android中去掉json转义字符
  10. 开源网安与航天网信达成战略合作,共建大湾区城市供应链平台