前言

最近项目中遇到了要使用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. 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)
  2. jquery.cookies使用
  3. python list去重时间复杂度_List集合去重的一种方法 z
  4. 哈老师一到的飞鸽传书
  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十二)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。...
  6. iOS底层探索之类的结构(上):ISA
  7. dx11学习笔记-3.三维空间变换(自己整理,基础详尽)
  8. 深圳移动 神州行(大众卡/轻松卡/幸福卡)套餐资费(含香港日套餐)信息及使用方法
  9. 在ASP.NET中获取参数POST和GET方式提交的参数
  10. 微信小程序之店铺评分组件及vue中用svg实现的评分显示组件
  11. android天气api接口,[Android] 免费天气预报接口
  12. HTML5 游戏开发快速提升
  13. 【基础逻辑】对位乘法与升多项式子项根号——柯西不等式
  14. RSA整理--频谱路由分配算法
  15. 诺基亚选择投奔微软的得与失
  16. c语言编程解释,c语言编程,请高手一字一句解释
  17. 微信小程序布局干货——来自微信官方
  18. 字母异位词分组 两种解法 (Python)
  19. html5制作线路图,HTML5使用canvas画简单电路图
  20. 安装SQL2000系统提示文件挂起的解决办法

热门文章

  1. GBase 8a 加载longblob类型数据的方法
  2. SpringIOC的配置及使用
  3. Word控件Spire.Doc 【超链接】教程(8):在 C#/VB.NET 中链接到 Word 文档中的书签
  4. 留存率到底有几种计算方式?
  5. C# 9 对IEnumerator类似物应用foreach
  6. 小程序商家如何开通云闪付支付功能
  7. 2008年 新的一年!
  8. 2022中国·宁波新基建与数字经济高峰论坛成功举办
  9. unity实践————第一人称射击游戏
  10. 基于RT-Thread全向赛车控制算法开发