zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    STL map
    HDU1372 Knight Moves BFS
    HDU1072 Nightmare BFS
    discuz论坛发帖添加字段
    gridview自定义button事件 ,无法触发 onrowcommand
    discuz 怎么开启评分!!!
    discuz学习网站收集
    discuz扩展工具集合
    童话世界整理“说说”
    asp.net中Literal与label的区别
  • 原文地址:https://www.cnblogs.com/tocy/p/android-predefined-macro-abi.html
Copyright © 2011-2022 走看看