注意到很多官网包,都会同时携带 arm64-v8a armeabi-v7a x86 x86_64
armeabi-v7a 可以考虑去掉了。部份调研如下:
时间线
时间线应该是15年左右开始有系统支持arm64-v8a。
三星Galaxy
- Galaxy_S5还是armv7
s5停留在android5、6
https://en.wikipedia.org/wiki/Samsung_Galaxy_S5
cpu: https://en.wikipedia.org/wiki/ARM_Cortex-A15
The ARM Cortex-A15 MPCore is a 32-bit processor core licensed by ARM Holdings implementing the ARMv7-A architecture.
- 三星Galaxy_S6开始支持armv8
可以继续升级到android 8
https://en.wikipedia.org/wiki/Samsung_Galaxy_S6
The Galaxy S6 line is powered by a 64-bit ARMv8 Exynos 7 Octa 7420 system-on-chip, consisting of four 2.1 GHz Cortex-A57 cores, and four 1.5 GHz Cortex-A53 cores, and 3 GB of LPDDR4 RAM for the S6 and S6 Edge while 4 GB of LPDDR4 for the S6 Edge+, being the first Samsung flagship phones to utilize 64-bit processing.
红米系列
- 红米note1 2014
https://zh.wikipedia.org/wiki/%E7%B4%85%E7%B1%B3Note
https://www.mediatek.jp/products/smartphones-2/mt6592
- 红米1
https://zh.wikipedia.org/wiki/%E7%BA%A2%E7%B1%B3%E6%89%8B%E6%9C%BA1
MediaTek MT6592 is a ‘true octa-core’ smartphone platform based on the energy-efficient ARM® Cortex® -A7 processor. Based on 28nm HPM (high-performance mobile) process technology, MT6592’s eight cores are fully scalable and capable of clock speeds up to 2GHz for excellent performance-per-Watt. An advanced MediaTek scheduling algorithm also monitors temperature and power consumption to ensure optimum performance at all times.
- 红米note2 2015
https://zh.wikipedia.org/wiki/%E7%B4%85%E7%B1%B3Note_2
https://en.wikipedia.org/wiki/ARM_Cortex-A53
- 红米2
https://zh.wikipedia.org/wiki/%E7%B4%85%E7%B1%B3%E6%89%8B%E6%A9%9F2
The ARM Cortex-A53 is one of the first two central processing units implementing the ARMv8-A 64-bit instruction set designed by ARM Holdings’ Cambridge design centre, along with the Cortex-A57.
开始支持armv8
abi是什么
https://developer.android.com/ndk/guides/abis
armeabi-v7a
此 ABI 适用于 32 位 ARM CPU。它包括 Thumb-2 和 Neon。
如需详细了解 ABI 中并非特定于 Android 的部分,请参阅 ARM 架构的应用二进制接口 (ABI)
默认情况下,NDK 构建系统会生成 Thumb-2 代码,除非您在 Android.mk 中针对 ndk-build 使用 LOCAL_ARM_MODE,或在配置 CMake 时使用 ANDROID_ARM_MODE。
如需详细了解 Neon 的历史,请参阅 Neon 支持。
出于历史原因,此 ABI 使用 -mfloat-abi=softfp,导致在调用函数时,所有 float 值都通过整数寄存器传递,所有 double 值都通过整数寄存器对传递。尽管名称如此,但这只会影响浮点调用惯例:编译器仍会使用硬件浮点指令进行算术运算。
此 ABI 使用 64 位 long double(与 double 相同的 IEEE binary64)。
arm64-v8a
此 ABI 适用于 64 位 ARM CPU。
如需了解 ABI 中并非特定于 Android 的部分的完整详情,请参阅 Arm 的了解架构。Arm 还针对 64 位 Android 开发提供了一些移植方面的建议。
您可以在 C 和 C++ 代码中使用 Neon 内建函数来充分利用高级 SIMD 扩展指令集。针对 Armv8-A 的 Neon 程序员指南详细介绍了 Neon 内建函数和 Neon 编程的概况。
在 Android 中,特定于平台的 x18 寄存器专用于 ShadowCallStack,不应由您的代码使用。当前的 Clang 版本默认使用 Android 中的 -ffixed-x18 选项,因此除非您使用的是手写汇编程序(或非常旧的编译器),否则无需担心这一点。
此 ABI 使用 128 位 long double (IEEE binary128)。
x86
此 ABI 适用于支持通常称为“x86”“i386”或“IA-32”的指令集的 CPU。
Android 的 ABI 包括基础指令集以及 MMX、SSE、SSE2 和 SSE3 和 SSSE3 扩展指令集。
ABI 不含任何其他可选 IA-32 扩展指令集,例如 MOVBE 或 SSE4 的任何变体。您仍可使用这些扩展指令集,只要您使用运行时功能探测来启用它们,并且为不支持它们的设备提供回退机制。
NDK 工具链假设在函数调用之前进行 16 字节堆栈对齐。默认工具和选项会强制实施此规则。如果编写的是汇编代码,必须确保堆栈对齐,而且其他编译器也遵守此规则。
请参阅以下文档了解更多详情:
不同 C++ 编译器和操作系统的调用规范
Intel IA-32 Intel 架构软件开发者手册第 2 卷:指令集参考
Intel IA-32 Intel 架构软件开发者手册第 3 卷:系统编程指南
System V 应用二进制接口:Intel386 处理器架构补充
此 ABI 使用 64 位 long double(与 double 相同的 IEEE binary64,而不是更为常见的仅限 Intel 的 80 位 long double)。
x86_64
此 ABI 适用于支持通常称为“x86-64”的指令集的 CPU。
Android 的 ABI 包括基础指令集以及 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2 和 POPCNT 指令。
ABI 不含任何其他可选 x86-64 扩展指令集,例如 MOVBE、SHA 或 AVX 的任何变体。 您仍可使用这些扩展指令集,只要您使用运行时功能探测来启用它们,并且为不支持它们的设备提供回退机制。
请参阅以下文档了解更多详情:
不同 C++ 编译器和操作系统的调用规范
Intel64 和 IA-32 架构软件开发者手册第 2 卷:指令集参考
Intel64 和 IA-32 Intel 架构软件开发者手册第 3 卷:系统编程
此 ABI 使用 128 位 long double (IEEE binary128)。
小结
从时间线来看,基本都是15年之前的设备,才只支持arm32的cpu。
手机设备比如红米1、红米note1。
系统主要是android5,和少量的android6。
再2025年的当下,可以去除armeabi-v7a的支持了。