Android英特尔设备只会运行armeabi或x86 .so库,但不能同时运行两者?

时间:2015-07-08 01:41:59

标签: android android-ndk x86 java-native-interface

我的APK中有两个.so库:

1)LibraryA:仅针对ARM体系结构构建,因为我不想将所有代码移植到x86。这是一项艰巨的任务。

2)LibraryB:为ARM和x86构建。 ARM libhoudini仿真器对于Intel设备而言速度太慢,无法以合适的速度运行此库,因此它必须具有可正常运行的x86端口。

APK中的lib文件夹如下所示:

../ LIB / armeabi / LibraryA的
../ LIB / armeabi / LibraryB

../ lib / x86 / LibraryB(注意:x86没有LibraryA)

当我在Intel设备上安装/运行APK时,它默认使用.so库的ARM体系结构,并忽略了LibraryB的x86版本。结果是,它被模拟并且对于生产而言太慢。但是在ARM设备上一切都很好用,没问题。

如何强制Android在英特尔设备上正常运行,以便模拟ARMA的ARM版本并运行x86版本的LibaryB?

为了完整起见,我使用android-ndk-r10d进行构建。

2 个答案:

答案 0 :(得分:0)

我可以通过将ARMA的ARM编译版本放在" ../ lib / x86"中来欺骗Android加载x86版本的LibraryB。夹。即使LibraryA是为ARM编译的,它仍然会加载,然后Android也会加载x86版本的LibraryB。

../ LIB / armeabi / LibraryA的
../ LIB / armeabi / LibraryB

../ lib / x86 / LibraryA(为ARM编译,但仍然有效)
../lib/x86/LibraryB(为x86编译)

答案 1 :(得分:0)

不支持混合arm / x86应用程序。您的解决方法中的行为无法保证,您看到的这两种行为实际上可能因设备和操作系统版本而异。

这里唯一的解决方案是将库A移植到x86。