Android CPU类型及预定义的宏

[时间:2019-02] [状态:Open]
[关键词:android,cpu, armeabi, armeabi-v7a, arm64-v8a, 32位,64位,c/c++]

本文主要总结下前段时间针对android系统上做了32位和64位的区分,顺便梳理下android支持的各种CPU类型。

ABI是什么?

ABI是Application Binary Interface(应用程序二进制接口)的首字母缩写。
不同的安卓设备使用不同的CPU,每个CPU支持的指令集也不一样。这样每种CPU和指令集的组合就需要自身的ABI。
ABI精确定义了应用程序的机器码与系统在运行时交互的方式。你编译的APP需要支持哪些CPU指令集都需要在编译是给出。
通常ABI包含以下信息:

  • 可用的CPU指令集
  • 内存存储和加载的大小端
  • 可执行二进制文件的格式,例如可执行程序、共享库等
  • 在代码和系统之间传递数据的约定惯例,包括数据对齐限制、函数调用时堆栈寄存器使用情况等
  • 机器码可访问的函数符号列表

Android支持的ABI类型

  • armeabi
  • armeabi-v7a
  • arm64-v8a
  • x86
  • x86_64

目前主流的手机一般都支持armeabi-v7a(32位)和arm64-v8a(64位)。
Android设备在安装app时会根据ABI类型和系统实际版本进行匹配,选择最优的类型安装。
如果你的APP同时提供了armeabi-v7a和arm64-v8a的so库,在64位Android系统上,安装时会自动安装arm64-v8a的库,而在32位系统上,只能选择armeabi-v7a的库。

Android区分CPU是64位还是32位的预定义宏

  • __arm__ 32位ARM
  • __aarch64__ 64位ARM
  • __i386__ 32位X86
  • __x86_64__ 64位X86

x86上的32位和64位预定义宏不太一样,注意区分下。

小结

本文主要整理了Android支持的ABI类型以及如何参考预定义宏区分CPU是32位还是64位。仅供后续使用。

更多信息建议参考Android关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题一文。

参考链接:

  1. Android-doc Dealing with CPU features
posted @ 2019-03-31 20:12  Tocy  阅读(2676)  评论(0编辑  收藏  举报