【发布时间】:2016-11-11 14:02:46
【问题描述】:
我有一个为 ARM 编译的库。我无权访问源代码。我想在我自己的应用程序中使用这个库。该应用应在基于 x86 的 AVD 上运行(出于性能原因)。
问题是,我不知道如何使用 houdini 在 x86 环境中运行这个 ARM 库。我下载了 houdini-libs 并将它们复制到 /system/lib/ resp。到/system/lib/arm/ 并尝试运行我的apk。
我尝试了三种不同的方法,但都失败了:
-
如果我将 ARM 库复制到
/lib/armeabi/并使用 gradle-flag 编译它splits { abi { enable true reset() include 'x86', 'armeabi' universalApk true } }universal-apk 安装失败并显示
Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]。 如果我将 ARM 库复制到
/lib/armeabi/并使用universalApk false编译它,则生成的 x86-apk 中不存在该库。库调用因... couldn't find "libXYZ.so"而失败(这很明显,因为它不存在)。如果我将 ARM 库复制到
/lib/x86/,库调用将失败并显示java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.jni.example/lib/x86/libXYZ.so" has unexpected e_machine: 40。机器码 40 是 ARM(没错,库确实是 ARM),但我不明白为什么 houdini 不翻译。
有没有办法在 x86 模拟器上运行 ARM 库?如何设置houdini?
提前致谢!
编辑:
我尝试使用个人版 Genymotion 并从该线程中闪现了 houdini-library:http://forum.xda-developers.com/showthread.php?t=2528952
一切正常,问题是库调用现在失败并出现新错误:
D/dalvikvm: Trying to load lib /data/app-lib/com.jni.example-1/libXYZ.so 0xa4df6228
D/dalvikvm: VFY: replacing opcode 0x62 at 0x0002
I/dalvikvm: DexOpt: unable to optimize static field ref 0x3d6d at 0x10 in Lio/netty/util/internal/logging/Log4JLogger;.debug
D/houdini: [1481] Loading library(version: 3.2.1.43093 RELEASE)... successfully.
D/houdini: [1481] Open Native Library /data/app-lib/com.jni.example-1/libXYZ.so failed.
E/dalvikvm: dlopen("/data/app-lib/com.jni.example-1/libXYZ.so") failed: dlopen failed: "/data/app-lib/com.jni.example-1/libXYZ.so" has unexpected e_machine: 40
W/System.err: java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app-lib/com.jni.example-1/libXYZ.so" has unexpected e_machine: 40
有谁知道如何解决这个问题?
【问题讨论】:
标签: android android-emulator x86 arm genymotion