我在应用中使用FFMPEG,并且我使用以下配置:
--extra-cflags=' -march=armv7-a -mfloat-abi=softfp -mfpu=neon'
我的目标是4.0+所以我相信armv7-a应该得到大多数非英特尔设备的支持,而且我确信大多数设备都支持霓虹灯扩展,但我还是不知道我怎么能找到所有2000多台设备。
有没有办法在Android中检查处理器类型和扩展程序和/或在Google Play商店中将apk限制为使用某些处理器的设备?
答案 0 :(得分:2)
我先回答你的最后一个问题:你可以将apk限制在Play商店中具有某些处理器的设备上,但不能限制你正在寻找的粒度。
简而言之:如果您仅为armv7-a上传包含本机库的apk,则无法从x86,mips或armv6设备下载。但选择就此停止:NEON和非NEON设备都被认为是armv7-a设备,因此无法解决您的问题。检查必须在运行时完成。
在Android上检查Java中的处理器体系结构和功能并不容易:没有API。
另一方面,这可以使用NDK轻松完成,NDK包含cpufeatures
模块(您可以在NDK安装文件夹中找到有关它的文档)。这个模块让你:
android_getCpuFamily()
android_getCpuFeatures()
获取其他详细信息:这是您正在寻找的内容,因为这些详细信息包含指示NEON兼容性的ANDROID_CPU_ARM_FEATURE_NEON
标记!实际上,实现一个JNI函数(如下面的函数)并从Java调用它应该可以解决这个问题:
#include <jni.h>
#include <cpu-features.h>
jboolean
Java_com_my_namespace_MyClass_isNeon
(JNIEnv *env, jclass class) {
uint64_t features = android_getCpuFeatures();
if ((android_getCpuFamily() != ANDROID_CPU_FAMILY_ARM) ||
((features & ANDROID_CPU_ARM_FEATURE_NEON) == 0 )) {
return JNI_FALSE;
}
else {
return JNI_TRUE;
}
}
如果设备是ARMv7 并且具有NEON功能,则会返回true
,否则为false
!