关于abiFilters的使用
前言
最近项目中遇到了要使用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的使用相关推荐
- android so abi适配,Android NDK学习(六): so文件兼容之abiFilters的使用
最近项目中遇到了要使用JavaCV的情况,涉及到了abi兼容的选择.因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我只适配了armeabi-v7a这一个.但是今天在x6 ...
- android配置so支持armeabi,安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)...
背景 Android 系统本质是一个通过改造的 Linux 系统,so库是Linux系统上使用的共享库(相似windows上的dll).最先,Android 系统只支持 ARMv5 的 CPU 构架, ...
- 关于SO引用的过滤:abiFilters
2019独角兽企业重金招聘Python工程师标准>>> 关于SO文件的引用,一直都没深究过,最初是把所有架构的SO包统统放进项目,每次新增引用都是如此,而现在的项目由于对apk文件大 ...
- 边实验边分析-NDK篇-abiFilters配置分析
边实验边分析-NDK篇-abiFilters配置分析 首先我们需要了解一个行为,NDK会对我们的原生代码进行构建,针对不同的操作系统架构,生成不同的ABI(应用程序二进制接口)的so库,并将构建生成的 ...
- Android Studio gardle 配置 ndk 指定 ABI: abiFilters 详解
一.ABI 是什么 ABI 是 Application Binary Interface 的缩写. 不同 Android 手机使用不同的 CPU,因此支持不同的指令集.CPU 与指令集的每种组合都有其 ...
- NDK abiFilters含义
NDK开发时,在build.gradle中,cmake和ndk都有abiFilters的设置.如下所示: cmake {cppFlags ""abiFilters " ...
- ReactNative进阶(三十八):Android ndk abiFilters 详解
一.前言 二.ABI 是什么 三.为何设置 ndk 的 abiFilters 四.如何配置 gardle 五.ABI支持详解 六.支持建议 七.拓展阅读 一.前言 Android 系统本质是一个经过改 ...
- android .so深入理解 abiFilters的使用等
为什么使用so so机制让开发者最大化利用已有的C和C++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码: so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快: s ...
- abiFilters
ndk {abiFilters "armeabi-v7a" }代表只是打 armeabi-v7a文件夹中的so包
最新文章
- SQL查询结果集对注入的影响及利用
- [导入]控制IFrame里的页面滚动原来如此简单:)
- shell脚本编程第一天
- 初学FF(火狐)的扩展(Extensions)
- opencv图像处理常用函数
- 在windows server 2012R2中安装域服务
- Javascript右键菜单类
- Mysql数据库常用指令
- Ext.Net全部Icon图标名称展示
- “我们完全误解了区块链!”
- Linux下如何使CP命令不提示覆盖
- Win10电脑如何合并磁盘分区
- Vue:错误Component template should contain exactly one root element解决
- java实例化类方法_Java 实例化类的的几种方法
- 系统分析与设计-(二)系统规划
- 央企:中国航天建设集团2022年毕业生招聘
- 个人取得工资、薪金所得应当如何缴纳个人所得税
- 如何搭建一个公司网站?
- php退款,PHP实现微信申请退款流程的方法
- qt linux不能读写u盘文件,Qt读取U盘文件内容