gpt4 book ai didi

android - 检查android中的处理器功能

转载 作者:行者123 更新时间:2023-11-29 21:09:34 25 4
gpt4 key购买 nike

我在应用程序中使用 FFMPEG,并且使用以下配置:

--extra-cflags=' -march=armv7-a -mfloat-abi=softfp -mfpu=neon'

我的目标是 4.0+,所以我相信大多数非 Intel 设备应该支持 armv7-a,而且我确信大多数设备也支持 neon 扩展,但我不确定如何找到这适用于所有 2000 多台设备。

有没有办法在 Android 中检查处理器类型和扩展和/或在 Google Play 商店中将 apk 限制为具有特定处理器的设备?

最佳答案

我将首先回答您最后一个问题:您可以将 apk 限制在 Play 商店中具有特定处理器的设备上,但不能达到您要查找的粒度。

简而言之:如果您上传的 apk 包含仅适用于 armv7-a 的 native 库,则无法从 x86、mips 或 armv6 设备下载它。但是选择到此为止:NEON 和非 NEON 设备都被视为 armv7-a 设备,因此这不能解决您的问题。检查必须在运行时完成。

在 Android 上检查 Java 中的处理器架构和功能并不容易:没有用于此的 API。

另一方面,这可以使用 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!

关于android - 检查android中的处理器功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23367895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com