【发布时间】:2014-07-25 08:18:18
【问题描述】:
我有一个可以在大多数 Android 设备(ARMv5、ARMv7 和 x86)上良好运行的 JNI 库。
我在 ARMv7 上使用 NEON 指令,但我不想用条件/重复的源代码弄乱代码,而是想在库加载时检测 Java 中的非 NEON ARMv7,并改为加载 v5 库:慢速 CPU 是慢。
我发现一个帖子建议我在 /proc/cpuinfo 中寻找“neon”功能,所以我正在解析它,通常加载 libthing.so,如果设备声称是没有 NEON 的 ARMv7。这在 ARM 上运行良好。
不幸的是,x86 不仅模拟 ARM /proc/cpuinfo(!),如果它认为它不理解 NEON,那么它还会从 armeabiv7a 目录中挖出 libthing-v5.so,并使用它,因为没有在 x86 目录中没有一个。
我目前的解决方法是将 x86 库复制到 libthing.so 和 libthing-v5.so 中,所以如果 x86 假装是无 NEON 的 ARMv7 芯片,它无论如何都会得到 x86 库。
除了基于 Yeppp 或 Android 自己的 cpufeatures 制作我自己的小型独立架构检测库之外,有没有办法从 Java 中确定真正的本地架构?
@ph0b:这里是 Razr i 的输出,显示模拟器已确定应用程序已安装为“ABI2 58”,并且需要伪造 /proc/cpuinfo。
鉴于 x86 和 armeabi* 目录都提供这两个共享库,我不明白为什么该设备决定成为 ARM。我可能会就此询问我在英特尔的联系人。
06-05 10:58:41.360 17807 18053 D dalvikvm: Trying to load lib /data/data/com.company.android/lib/libmp.so 0x42409cb0
06-05 10:58:41.360 17807 18053 D dalvikvm: Added shared lib /data/data/com.company.android/lib/libmp.so 0x42409cb0
06-05 10:58:41.370 17807 18053 D dalvikvm: No JNI_OnLoad found in /data/data/com.company.android/lib/libmp.so 0x42409cb0, skipping init
06-05 10:58:41.420 17807 18053 D : Searching package installed with ABI2 with Uid: 10109
06-05 10:58:41.420 17807 18053 D : Apps with ABI2 58 accessing /proc/cpuinfo
06-05 10:58:41.430 17807 18053 I System.out: #Here's most of /proc/cpuinfo
06-05 10:58:41.430 17807 18053 I System.out: #Thu Jun 05 10:58:41 GMT+01:00 2014
06-05 10:58:41.430 17807 18053 I System.out: Serial=0000000000000001
06-05 10:58:41.430 17807 18053 I System.out: Revision=0001
06-05 10:58:41.430 17807 18053 I System.out: CPU=revision\t\: 1
06-05 10:58:41.430 17807 18053 I System.out: BogoMIPS=1500
06-05 10:58:41.430 17807 18053 I System.out: Hardware=placeholder
06-05 10:58:41.430 17807 18053 I System.out: Features=vfp swp half thumb fastmult edsp vfpv3
06-05 10:58:41.430 17807 18053 I System.out: Processor=ARMv7 processor rev 1 (v7l)
06-05 10:58:41.430 17807 18053 I NativeWahooLibrary: Detected ARMv7 processor rev 1 (v7l) (=ARMv7, true) with (neon@-1) vfp swp half thumb fastmult edsp vfpv3
06-05 10:58:41.430 17807 18053 D dalvikvm: Trying to load non-neon lib /data/data/com.company.android/lib/libwahoo-v5.so 0x42409cb0
【问题讨论】:
标签: android-ndk x86 arm