Android Studio gardle 配置 ndk 指定 ABI: abiFilters 詳解

Android Studio gardle 配置 ndk 指定 ABI: abiFilters 詳解

一、ABI 是什麼

ABI 是 Application Binary Interface 的縮寫。

不同 Android 手機使用不同的 CPU,因此支援不同的指令集。CPU 與指令集的每種組合都有其自己的應用二進位制介面(或 ABI)。 ABI 可以非常精確地定義應用的機器程式碼在執行時如何與系統互動。 您必須為應用要使用的每個 CPU 架構指定 ABI。

典型的 ABI 包含以下資訊:

  • 機器程式碼應使用的 CPU 指令集。
  • 執行時記憶體儲存和載入的位元組順序。
  • 可執行二進位制檔案(例如程式和共享庫)的格式,以及它們支援的內容型別。
  • 用於解析內容與系統之間資料的各種約定。這些約定包括對齊限制,以及系統如何使用堆疊和在呼叫函式時註冊。
  • 執行時可用於機器程式碼的函式符號列表 – 通常來自非常具體的庫集。

 

二、如何在 gardle 中配置

預設情況下,cmake 會輸出 4 種 ABI,如下所示:

我們也可以通過 abiFilters 來指定我們需要的 ABI:

 

三、支援的 ABI 詳解

ABI支援的指令集說明
armeabi
  • ARMV5TE 和更高版本
  • Thumb-1
無硬浮點。
armeabi-v7a
  • armeabi
  • Thumb-2
  • VFPv3-D16
  • 其他(可選)
與 ARMv5、v6 裝置不相容。
arm64-v8a
  • AArch-64
 
x86
  • x86 (IA-32)
  • MMX
  • SSE/2/3
  • SSSE3
不支援 MOVBE 或 SSE4。
x86_64
  • x86-64
  • MMX
  • SSE/2/3
  • SSSE3
  • SSE4.1、4.2
  • POPCNT
 
mips
  • MIPS32r1 及更高版本
使用硬浮點,並且假設 CPU:FPU 時鐘比率為 2:1 以獲取最大相容性。 不提供 micromips 或 MIPS16。
mips64
  • MIPS64r6
 

參考:https://developer.android.com/ndk/guides/abis

其它:

​NDK 學習系列:Android NDK 從入門到精通(彙總篇)