Android NDK:ARMv6的硬件浮点数

时间:2012-12-09 21:06:15

标签: android android-ndk arm

我知道android提供了对ARMv5TEARMv7a CPU的支持。 (armeabiareabi-v7a个文件夹) 大多数Android手机的CPU现在ARMv6没有VFPARMv6VFPARMv7VFP

我的应用程序有物理模拟,我希望只针对具有硬件浮点的设备。 (VFP)。我不希望支持没有VFP的设备。

如何使用ARMEABI而不是ARMv6配置NDK项目以将VFP代码编译为ARVv5TE

上传APK时,我可以通过Google Play界面阻止旧版ARMv6而不使用VFPARmv5设备。

1 个答案:

答案 0 :(得分:2)

NDK并没有提供任何方便的方法来更改默认构建选项。您只能添加其他标志,但不能覆盖标准选项。

默认LOCAL_CFLAGS并且大多数其他选项对您不起作用,因为NDK会将其选项放在您的选项之后并覆盖您的标记。我所知道的唯一解决方案是在APP_CFLAGS中定义全局Application.mk。因此,以下内容应该导致针对具有VFPv2的armv6优化的二进制文件:

APP_CFALGS += -march=armv6 -mno-soft-float -mfloat-abi=softfp -mfpu=vfp

另外,如果我没记错的话,armv6硬件上的vfp指令需要以arm模式编译你的代码(不是拇指)。为LOCAL_ARM_MODE := arm中的每个目标指定Android.mk即可实现此目标。

顺便说一下,我认为你不会满足于armv6设备的性能。即使是最新的高端armv7处理器也比现代英特尔酷睿CPU慢10倍。