我知道android提供了对ARMv5TE
和ARMv7a
CPU的支持。 (armeabi
和areabi-v7a
个文件夹)
大多数Android手机的CPU现在ARMv6
没有VFP
,ARMv6
有VFP
,ARMv7
有VFP
。
我的应用程序有物理模拟,我希望只针对具有硬件浮点的设备。 (VFP
)。我不希望支持没有VFP
的设备。
如何使用ARMEABI
而不是ARMv6
配置NDK项目以将VFP
代码编译为ARVv5TE
?
上传APK时,我可以通过Google Play界面阻止旧版ARMv6
而不使用VFP
和ARmv5
设备。
答案 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倍。