我有一個ARM編譯庫。我無法訪問源代碼。我想在我自己的應用程序中使用這個庫。該應用程序應該在基於x86的AVD上運行(出於性能原因)。使用houdini(Android模擬器)在基於x86的AVD上運行ARM庫
問題是,我找不出如何在使用houdini的x86環境中運行此ARM庫。我下載了houdini-libs並將它們複製到/system/lib/
resp。到/system/lib/arm/
並試圖運行我的apk。
我嘗試三種不同的方法,但都失敗了:
如果我的ARM-庫複製到
/lib/armeabi/
並與gradle這個標誌splits { abi { enable true reset() include 'x86', 'armeabi' universalApk true } }
安裝通用的編譯-apk以
Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
失敗。如果我將ARM庫複製到
/lib/armeabi/
並使用universalApk false
進行編譯,則lib在結果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的個人版,並亮出從該線程中的胡迪尼庫: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
有誰知道如何解決這個問題?
我設法讓我的手對圖書館的原生x86版本。但也許別人可以從你的鏈接houdini中獲利。謝謝! – phlo