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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM