Android API和CPU架构

Android API和CPU架构,android,android-ndk,Android,Android Ndk,我是从命令行(而不是从Android.mk)构建本机组件的。我试图确定CPU架构与API级别的交叉点。我知道: armeabi是ARMv5TE armeabi-v7a是ARMv7-A吗 我正在尝试确定armeabi(ARMv5TE)和armeabi-v7a(ARMv7-A)所需的最低API级别。我需要最低API级别来选择适当的sysroot。例如,我可以选择: /opt/android-ndk-r9/platforms/android-19/arch-arm 或 /opt/androi

我是从命令行(而不是从
Android.mk
)构建本机组件的。我试图确定CPU架构与API级别的交叉点。我知道:

  • armeabi
    是ARMv5TE
  • armeabi-v7a
    是ARMv7-A吗
我正在尝试确定
armeabi
(ARMv5TE)和
armeabi-v7a
(ARMv7-A)所需的最低API级别。我需要最低API级别来选择适当的
sysroot
。例如,我可以选择:

  • /opt/android-ndk-r9/platforms/android-19/arch-arm

  • /opt/android-ndk-r9/platforms/android-9/arch-arm
API级别与
armeabi
armeabi-v7a
的交点是什么


根据NDK的
docs/CPU-MIPS.html
CPU-X86.html
,MIPS和X86的最低API级别为9。但我找不到类似的ARM文档



根据NDK的
docs/NEON.html
,ARMv7-a于2010年3月在NDK R3上首次亮相。这使得ARMv7-a从2010年5月起在API8附近运行。

ARM从第一个版本开始就得到了支持(版本3是第一个支持原生NDK开发的版本)。由于
armeabi
armeabi-v7a
都链接到相同的库(在
arch-arm
子目录中),因此从第3版起,这两个库都受支持

为了自己找到答案,只需查看
/platforms/android-X
中存在
arch-arm
(或者类似地,
arch-x86
arch-mips
)的X的最低值


一般来说,在旧设备上运行的APK中使用较新的体系结构代码没有风险或危害-旧设备不会查看未知的体系结构。唯一的风险是NDK构建失败,因为如果为太旧的平台版本构建,则会丢失
arch-X
目录,在这种情况下,您可以通过针对较新的平台版本立即修复它。

所以我很清楚。大脑皮层是A5。我认为这意味着
armeabi-v7a
将在API 10或11左右推出,它比ARMv7-a早两三年。这意味着Android的
armeabi-v7a
gear实际上就是
armeabi
?我真正想做的是分解库,查看每个指令,看看它的指令集是什么。我怀疑(但不知道)armeabi-v7a未使用SIMD指令。这可能需要手动调整汇编语言例程……ARMv7-a不一定是Cortex-A5,而且这些核心也不是按数字顺序发布的。第一个可能是Cortex-A8,这些产品在2009年已经在消费类设备中上市。第一款真正运行在ARMv7芯片上的安卓设备,我想是安卓2.0(可能是摩托罗拉Droid左右)发布的。如果你构建一个APK,它同时包含一个针对android-3的
armeabi
armeabi-v7a
库,那么它在android 1.5设备上可以正常运行,它只会忽略
armeabi-v7a
版本,
armeabi
armeabi-v7a
都在
arch-arm
中构建指向相同库的链接-它们是二进制兼容的。设备支持或使用的实际指令集与实际API级别几乎无关(除了在API级别9之前没有官方支持的x86或MIPS设备-之前确实存在非官方版本,但它们不一定与官方标准兼容)。当您构建定向
armeabi-v7a
时,它将使用比定向
armeabi
时更有效的指令-特别是,它将实际使用FPU,而
armeabi
构建将仅使用softfloat。但它们都不会使用任何SIMD指令,因为并非所有的
armeabi-v7a
设备都有霓虹灯SIMD指令(特别是Tegra 2没有)。