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文件兼容问题一文。
参考链接:
- Android-doc Dealing with CPU features
Android CPU类型及预定义的宏的更多相关文章
- VS2013 预定义的宏
Visual Studio 2013 预定义的宏 https://msdn.microsoft.com/zh-cn/library/b0084kay(v=vs.120).aspx 列出预定义的 ANS ...
- visual c++中预定义的宏
一.主要目标 (由于visual studio通常包含很多开发环境,通常将其中c/c++的ide称为visual c++ 20xx) 整理下visual c++ 2010下预定义的宏.做一下备忘和了解 ...
- gcc中预定义的宏__GNUC__
转载:gcc中预定义的宏__GNUC__ - Cccarl - 博客园 (cnblogs.com) 今天在看Linux系统编程这本书的代码的时候看到了__GNUC__,不太清楚这个宏所以去查了一下,以 ...
- C标准中一些预定义的宏
C标准中指定了一些预定义的宏,对于编程经常会用到.下面这个表中就是一些常常用到的预定义宏. 宏(双下滑线) 意义 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字) __ ...
- C标准中一些预定义的宏,如__FILE__,__func__等
C标准中一些预定义的宏 C标准中指定了一些预定义的宏,对于编程经常会用到.下面这个表中就是一些常常用到的预定义宏. 宏 意义 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串 ...
- ARM编译器中预定义的宏
arm系列目前支持三大主流的工具链,realview的armcc,iar ewarm的iccarm,gnu的gcc,编译器在编译的时候会预定义一些宏,这些宏在工程中起到不可或缺的作用. 例如 /* d ...
- 2019-8-31-dotnet-新项目格式与对应框架预定义的宏
title author date CreateTime categories dotnet 新项目格式与对应框架预定义的宏 lindexi 2019-08-31 16:55:58 +0800 201 ...
- dotnet 新项目格式与对应框架预定义的宏
在 sdk style 的项目格式支持使用多框架开发,此时需要在代码里面通过宏判断,在编译的时候执行不同的代码.本文告诉大家在框架里面对应的预定义的条件编译符有哪些 在让一个 csproj 项目指定多 ...
- C/c++几个预定义的宏:__DATE__,__TIME__,__FILE__,__LINE__
一边情况下,C/C++编译器会内置几个宏,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息. ANSI C标准中有几个标准预定义宏(也是常用的): __ ...
随机推荐
- XamarinSQLite教程下载安装SQLite/SQL Server Compact Toolbox
XamarinSQLite教程下载安装SQLite/SQL Server Compact Toolbox SQLite/SQL Server Compact Toolbox是一个Visual Stud ...
- JAG Practice Contest for ACM-ICPC Asia Regional 2016.K.Non-redundant Drive(点分治)
Atcoder vjudge 这标题好长... \(Description\) 给定一棵\(n\)个点的树.在每个点\(i\)你可以补充\(g_i\)的油量,经过一条边需要花费边长的油量.你可以选择从 ...
- BZOJ.4826.[AHOI/HNOI2017]影魔(树状数组/莫队 单调栈)
BZOJ LOJ 洛谷 之前看\(mjt\)用莫队写了,以为是一种正解,码了3h结果在LOJ T了没A= = 心态爆炸(upd:发现是用C++11(NOI)交的,用C++11交就快一倍了...) 深刻 ...
- BZOJ.4402.Claris的剑(组合 计数)
BZOJ 因为是本质不同,所以考虑以最小字典序计数. 假设序列最大值为\(m\),那么序列有这两种情况: \(1\ (1\ 2\ 1\ 2...)\ 2\ (3\ 2\ 3\ 2...)\ 3\ (4 ...
- BZOJ.3944.Sum(Min_25筛)
BZOJ 洛谷 不得不再次吐槽洛谷数据好水(连\(n=0,2^{31}-1\)都没有). \(Description\) 给定\(n\),分别求\[\sum_{i=1}^n\varphi(i),\qu ...
- 洛谷P1809 过河问题_NOI导刊2011提高(01)
To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...
- CC2431 代码分析②-CC2431狂轰滥炸
CC2431 code review : CC2431 狂轰滥炸 在上一篇中的最后我们分析到CC2431 开始喊出第一声,这里我们逐步分析从第一声到后面的狂轰滥炸! 上代码 /************ ...
- docker 删除所有正在运行的容器
docker images docker rmi wordpress docker rm -f `docker ps -a -q` 删除正在运行的镜像: docker rmi -f ubuntu:1. ...
- React生命周期函数详解
React生命周期函数 生命周期函数是指在某一个周期自动执行的函数. React中的生命周期执行过程 以下是React中的常用的生命周期函数,按个部分中按照自动执行顺序列出,这几个过程可能存在同时进行 ...
- Java Socket基本使用
首先 编写Client程序: import java.io.IOException; import java.net.Socket; import java.util.Scanner; public ...