关于Android arm64-v8a、armeabi-v7a、armeabi、x86等CPU下的so文件兼容问题

2023-11-07

先介绍几个专业词:

ARM :
是嵌入式中的一种架构,全称为Advanced RISC Machine,能够理解为ARM处理器。

ABI(Application Binary Interface):
应用程序二进制接口 描述了应用程序和操做系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。架构

ABI和CPU关系:
大部分cpu都支持多于一种的ABI。
当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。app

ABI目录(横向)和cpu(纵向) armeabi armeabi-v7a arm64-v8a mips mips64 x86 x86_64
ARMv5 支持
ARMv7 支持 支持
ARMv8 支持 支持 支持
MIPS 支持
MIPS64 支持 支持
x86 支持 支持 支持
x86_64 支持 支持 支持

x86设备上,选择ABI的优先级ide

  1. libs/x86目录中若是存在.so文件的话,会被安装。
  2. 若是不存在,则会选择armeabi-v7a中的.so文件。
  3. 若是也不存在,则选择armeabi目录中的.so文件。

arm设备上CPU 是armabi-v8a,ABI的优先级svg

  1. 若是手机CPU 是armabi-v8a,优先选择armabi-v8a中的.so文件。
  2. 若是不存在,则会选择armeabi-v7a中的.so文件。
  3. 若是也不存在,则选择armeabi目录中的.so文件。

arm设备上CPU 是armabi-v7a,ABI的优先级工具

  1. 若是手机CPU 是armabi-v7a,优先选择armabi-v7a中的.so文件。
  2. 若是不存在,则会选择armeabi中的.so文件。

Android 设备的CPU类型一般分如下几种

1.armeabiv-v7a: 第7代及以上的 ARM 处理器,目前主流版本,大部分Android设备都使用它。
2.arm64-v8a: 第8代、64位ARM处理器。
3.armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多,缺乏对浮点数计算的硬件支持,在须要大量计算时有性能瓶颈。
4.x86 / x86_64: x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,
实现对arm .so 的兼容。
5.mips/mips64:极少用于手机可忽略。

关于.so文件的选择

当涉及到.so文件的加载时,不一样架构的CPU会加载不一样的.so文件。若是是arm架构的cpu会去加载,好比armabi-v7a 的会优先去 armabi-v7a文件夹下寻找对应的.so文件,若是找不到就会去armabi文件夹下面找.so文件,若是没有的话,程序运行到须要该.so文件的地方会引发崩溃。性能

既然mips市场占有率低,x86 又兼容了armabi ,因此只须要支持arm 架构便可,而arm中arm64-v8a的cpu架构又向下兼容arm-v7a与armabi,arm-v7a的架构也兼容armabi。
所以只须要选择armabi一个便可。当前主流的手机cpu架构是 arm-v7a,所以也能够用arm-v7a代替armabi,他们两个区别是arm-v7a的cpu使用armabi的.so文件时计算效率可能低一点。学习

结论就是arm-v7a与armabi二选一便可,当前主流app淘宝微信都只适配了一个armabi。

关于abiFilters的使用

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

若是在build.gradle 中对abiFilters进行了配置,那么只有配置过的目录下的so 文件才会被打包到apk安装包中。

注意事项:

  • 生成的不一样cpu架构的so文件必定要放对文件夹,切忌乱放,好比arm-v7a的.so文件放到armabi文件夹下,运行时可能会出错。其中涉及到转换。

  • 而且不建议A 程序的 .so 文件只适配 armabi ,B 程序的 .so 文件适配 armabi-v7a。若是不统一也可能会有各类问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Android arm64-v8a、armeabi-v7a、armeabi、x86等CPU下的so文件兼容问题 的相关文章

随机推荐

  • python3 [爬虫入门实战]爬虫之scrapy爬取游天下南京短租房存mongodb

    总结 总的来说不是很难 只是提取的字段有些多 总共获取了一个120多个南京房租信息 1 爬取的item coding utf 8 Define here the models for your scraped items See docum
  • 《重构 - 改善既有代码的设计》总结

    1 重构 第一个示例 重构前 先检查自己是否有一套可靠的测试集 这些测试必须有自我验证能力 TDD 重构技术就是以微小的步伐修改程序 如果犯下错误 很容易便可发现它 傻瓜都能写出计算机可以理解的代码 唯有能写出人类容易理解的代码的 才是优秀
  • 元宇宙不是Web3

    个人对元宇宙的定义为 大规模 可互操作的网络 能够实时渲湘3D虚拟世界 借助大量连使性数据 如身份 历史 权利 对象 通信和支付等 可以让无限数量的用户体脸实时同步和持续有效的在场感 现在 你应该能理解我为何会给出这样的定义了 许多人可能会
  • 使用Junit进行单元测试超详细,这你还学不会?

    单元测试 从字面上来看就是对某一个功能单元进行测试 测试其功能是否正常 也就是说在给定的输入参数情况下 测试其结果的正确性 当这几天又重新温顾这一章节 我马上想起了前几天较劲脑静通过其测试用例的场景 一 介绍 1 Java中的最小功能单元是
  • react实现Modal弹窗

    一 Dialog js文件 import React useMemo useEffect useState from react import ReactDOM from react dom 需要把元素渲染到组件之外 用 createPor
  • git通过http的方式下载和提交代码

    之前一直用git的SSH方式下载代码 唯一的缺点可能就是需要建立SSH秘钥 需要额外生成一个密钥 然后在下载和提交代码的时候都需要输入秘钥 才能操作 时间长了可能就忘了密码 今天在做项目提交的时候就出现了这种情况 密码怎么试都不对 于是弃用
  • 理解不同加密币的要点(一)—— 共识机制

    一 加密货币分类 一 价值层面 与实体资产绑定的代币 为了因应市场需求而生 与实体资产做挂钩的代币 也就是我们说的稳定币 例如与美元做挂钩的USDT TUSD PAX与USDC等 仰赖网络共识的代币 代币价值仰赖网路上市场共识的代币 基本上
  • Java使用流去除集合中某个字段为空的对象

    文章目录 0 写在前面 1 情景复刻 2 解决方案 3 写在最后 0 写在前面 最近写了一些业务逻辑 调试的时候总会报空指针异常 Java中空指针异常是危险恐怖分子 最好不要碰见他 所以有些时候 处理集合中的数据时 特定情况下需要略过一些数
  • python在两行中分别输入一个字符串s和整数n,定义一个函数将字符串s循环向右移动n位

    解题思路 将字符串转为列表处理 123456 1 2 3 4 5 6 将列表重复两遍 1 2 3 4 5 6 1 2 3 4 5 6 删去前面和后面多余的数字即可 4 5 6 1 2 3 4 5 6 4 5 6 1 2 3 问题描述 在两行
  • MySQL修改和删除索引(DROP INDEX)

    在 MySQL 中修改索引可以通过删除原索引 再根据需要创建一个同名的索引 从而实现修改索引的操作 基本语法 当不再需要索引时 可以使用 DROP INDEX 语句或 ALTER TABLE 语句来对索引进行删除 1 使用 DROP IND
  • 小智AI chatgpt的功能是什么

    ChatGPT是一种基于GPT 3 5架构的大型语言模型 由OpenAI开发 它是一种聊天机器人 能够回答各种问题 提供有用的信息和娱乐 ChatGPT的工作原理非常简单 当用户输入问题或话题时 ChatGPT会自动根据语境和关键字生成响应
  • Idea SpringBoot多模块项目打包血泪史

    本文主要介绍基于Idea的SpringBoot多模块打包中遇到的各种问题以及解决方法 基本概况介绍 小弟之前是用的myeclipse进行的开发 但是在建立多模块的时候却错误的使用了web archtype 然后强转的SpringBoot 在
  • CentOS 6和Centos 7 虚拟机 关闭防火墙

    Centos 7 虚拟机 关闭防火墙 https blog csdn net preserveXing article details 127076756 CentOS 6 防火墙的关闭 关闭其服务即可 查看CentOS防火墙信息 etc
  • CDN的加速原理

    CDN的加速原理是什么 CDN Content Delivery Network 内容分发网络 是构建在现有互联网基础之上的一层智能虚拟网络 通过在网络各处部署节点服务器 实现将源站内容分发至所有CDN节点 使用户可以就近获得所需的内容 C
  • Centos8(7)安装tomcat9以及常见用法

    1 安装jdk tomcat9可以工作在jdk8以上的版本 所以可以安装jdk8或是jdk11 dnf install java 11 openjdk centos8 yum install java 11 openjdk centos7
  • 关于之前封装Sku组件异步获取数据的问题思考

    使用watchEffect来监听父组件传来的goods 为什么我会用watchEffect 起初我的想法是 我需要生成数据字典并且初始化数据这两个函数当中都会用到很多的goods中的数据 如果使用watch监听要设置岂不是很麻烦 但是其实后
  • 轻量级语义分割网络 BiseNetv2学习:手把手教你搭建BiseNetv2(tensorflow2),并在Cityscapes上完成语义分割任务

    轻量级语义分割网络 BiseNetv2学习 手把手教你搭建BiseNetv2 tensorflow2 并在Cityscapes上完成语义分割任务 文章目录 轻量级语义分割网络 BiseNetv2学习 手把手教你搭建BiseNetv2 ten
  • 【Java】【排序算法】【插入排序】(代码示例)

    文章目录 插入排序概念 实现步骤 代码示例 总结 插入排序概念 插入排序 Insertion Sort 是一种简单直观的排序算法 它将数组划分为已排序和未排序两个部分 每次从未排序部分取出一个元素 插入到已排序部分的正确位置 重复这个过程直
  • java的set和map_Java中的Set和Map

    前言 昨天我们学习了集合List 说到了Collection 它是我们就需要一个可变的容器来保存我们需要保存的内容 那么这个容器就是今天我们学习的集合 Collection 的子类Set和新的一个集合Map 1 Set是什么 set 数组
  • 关于Android arm64-v8a、armeabi-v7a、armeabi、x86等CPU下的so文件兼容问题

    先介绍几个专业词 ARM 是嵌入式中的一种架构 全称为Advanced RISC Machine 能够理解为ARM处理器 ABI Application Binary Interface 应用程序二进制接口 描述了应用程序和操做系统之间 一