2016-11-11 132 views
1

我有一個ARM編譯庫。我無法訪問源代碼。我想在我自己的應用程序中使用這個庫。該應用程序應該在基於x86的AVD上運行(出於性能原因)。使用houdini(Android模擬器)在基於x86的AVD上運行ARM庫

問題是,我找不出如何在使用houdini的x86環境中運行此ARM庫。我下載了houdini-libs並將它們複製到/system/lib/ resp。到/system/lib/arm/並試圖運行我的apk。

我嘗試三種不同的方法,但都失敗了:

  1. 如果我的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]失敗。

  2. 如果我將ARM庫複製到/lib/armeabi/並使用universalApk false進行編譯,則lib在結果x86-apk中不存在。庫調用失敗,... couldn't find "libXYZ.so"(這很明顯,因爲它不存在)。

  3. 如果我將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 

有誰知道如何解決這個問題?

回答

相關問題