什么ABI

ABI就是Application binary interface的意思,即应用程序二进制接口,定义了一套规则。允许编译好的二进制目标代码能在所有兼容该ABI的操作系统中无需改动就能运行。不同的Android手机使用不同的CPU,因此需要提供对应的二进制接口交互规则(即对应的ABI文件)才能进行交互。目前,有部分CPU是能支持多种交互规则,但这是在牺牲性能的前提下所做的兼容。

ABI架构

API架构 说明
armeabiv-v7a 第7代及以上的 ARM 处理器。目前,大部分手机的CPU都支持此ABI交互规则
arm64-v8a 第8代64位ARM处理器,支持此ABI的手机还比较少
armeabi 第5代、第6代的ARM处理器,早期手机用得较多
x86 平板、模拟器用得比较多
x86_64 64位的平板

ABI与CPU的联系

在Android手机上安装一个应用时,只有手机CPU架构支持的ABI架构对应的.so文件会被安装。如果支持多个ABI架构,会按照优先级进行安装。

CPU架构 支持的ABI架构对应的.so文件安装优先级
ARMv5 armeabi
ARMv7 armeabi,armeabi-v7a
ARMv8 armeabi,armeabi-v7a,arm64-v8a
MIPS mips
MIPS64 mips,mips64
x86 x86,armeabi,armeabi-v7a
x86_64 :armeabi,x86,x86_64

CPU大都是向前兼容的,但是会按优先级来选择ABI。如x86架构的CPU会优先选择x86目录下的.so包,当不存在时,才会选择armeabi-v7a目录下的.so包,如果仍然不存在,最后才会选择armeabi目录下的.so文件。
注:x86设备运行armeabi下的so库时会损失性能。

谢谢阅读。

什么是Android ABI相关推荐

  1. Android ABI

    2019独角兽企业重金招聘Python工程师标准>>> 获取当前ABI var supportsABIs:Array<String>? = null if(Build.V ...

  2. Android Studio 导入 so 简明教程:通过一个示例让你理解整个过程

    Introduction 如果你是一名 C/C++ 开发人员,正在尝试将 C/C++ 的代码往安卓上迁移,那么这篇文章对你有很大的帮助 如果你是一名 Android 开发人员,正在尝试将外部 so 嵌 ...

  3. Android 4.0 源代码结构

    Android源码的第一级目录结构 Android/abi (abi相关代码.ABI:application binary interface,应用程序二进制接口) Android/bionic(bi ...

  4. WebRTC android 端支持H264编解码

    一.WebRTC源码中默认使用的H264编解码的库 1.WebRTC源码的video_coding模块中,包含了H264编解码相关的类 打开画红线的两个头文件,分别可以看到解码类中导入了ffmpeg的 ...

  5. 深入分析Android 9.0源代码——Activity启动流程

    引言 点击此处查看<深入分析Android 9.0源代码>系列的组织结构和相关说明. 1 应用进程发起启动请求 本章的调用流程如下图所示: (Context) Activity Instr ...

  6. Android源代码分析之类方法与组件名词解释(持续更新)

    Android源代码分析方法组件详解 1. 类方法 1.1 Handler方法 1.2 Looper方法 1.3 Binder 1.4 Instrumentation 2. 组件 2.1 AMS.WM ...

  7. Android Applicaion组件创建的源代码(Android 9,含代码注释)

    Android Applicaion组件创建的源代码 1. 序列图 1.1 简化版序列图 1.2 完整版序列图 2. Application创建过程源代码 2.1 ActivityThread初始化 ...

  8. Android Applicaion组件创建的源代码分析(Android 9,含序列图)

    Application组件源代码分析 1. Applicaion启动流程源代码分析 2. 启动过程中应用进程.系统服务进程通信的分界点 3. 组件生命周期与系统服务的关系 4. Application ...

  9. c++ vector 赋值_C++中vector用法

    vector是什么 vector是C++标准模板库(STL-Standard Template Library)中的概念内容,它是一个能够操作多种数据结构和算法的模板类和函数库,是一个封装了动态大小数 ...

最新文章

  1. 系统架构性能问题诊断及优化思路,纯干货!
  2. easyUI清除序号
  3. sql server 2008手工修改表结构,表不能保存的问题与解决
  4. 【题解】CF#611 H-New Year and Forgotten Tree
  5. 演练 看不见的硬币 1002
  6. NeurIPS2021 港大腾讯AI Lab牛津提出:CARE,让CNN和Transformer能在对比学习中“互帮互助”!...
  7. orchard文档之-搜索和索引
  8. MFC避免窗口闪烁的方法(OnEraseBkgnd) .
  9. 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
  10. php中控车牌识别push协议,2、实时车牌识别上传及返回
  11. 机器人动力学方程——拉格朗日法
  12. eclipse 工具翻译插件安装
  13. 一幅长文细学华为MRS大数据开发(一)——大数据时代的挑战和机遇
  14. 光学系统像差的计算机模拟,XCCHJJ-B 光学系统像差传函焦距测量综合实验装置
  15. 最大数字 题解 (删除k个数字----贪心)
  16. Linux 自签名ssl证书生成
  17. 视频剖析-Video Timing
  18. 要报销的发票如何批量下载打印
  19. 新的 ES2022 规范终于发布了,我总结了8个实用的新功能
  20. 视频教程-大型ERP实战项目教程-Java

热门文章

  1. Jsp学习笔记——第二天
  2. java(优化15) 报错java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher解决方案
  3. 建立任务,OSTaskCreate()
  4. 消息认证码(MAC)
  5. 存在恢复视力的办法吗?别再傻了!
  6. Java内存模型与GC
  7. ℬ悟透C++┇Puzzle记录
  8. Redis详解(八)bitmap
  9. mysql 修改字段默认值
  10. idea集成svn 从svn下载项目流程