我有一个ARM的编译库。我无法访问源代码。我想在我自己的应用程序中使用这个库。该应用程序应该运行在x86基础上的AVD (出于性能原因)。
问题是,我不知道如何使用houdini在x86环境上运行这个ARM库。我下载了houdini,并将它们复制到/system/lib/ resp。并试图运行我的apk。
我尝试了三种不同的方法,但都失败了:
/lib/armeabi/并使用gradle标志编译它
splits { abi {启用真重置()包括'x86','armeabi‘universalApk true }
通用apk的安装使用Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]失败。/lib/armeabi/并使用universalApk false编译它,那么库就不会出现在由此产生的x86apk中。库调用在... couldn't find "libXYZ.so"中失败(这很明显,因为它不存在)。/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库?怎么安排胡迪尼?
提前感谢!
编辑:
我尝试使用Genymotion的个人版本,并从这个线程:http://forum.xda-developers.com/showthread.php?t=2528952中闪现了houdini库。
一切正常,问题是库调用现在失败了,出现了一个新的错误:
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有人知道怎么解决这个问题吗?
发布于 2016-11-24 10:00:03
对于Genymotion,您可以从这里下载可闪光的houdini库,https://mega.nz/#!p4lFlCZR!TFsb8dMqNdAJjKoCDPDDvNtcQdEB0-KkVlTgQVwG20s和所有带有ARM架构库的应用程序都能顺利工作。
记在网上的23位修复和张贴者:http://23pin.logdown.com/posts/691046-genymotion-use-arm-translation-on-6x-image
https://stackoverflow.com/questions/40549617
复制相似问题