2015-11-30 58 views
8

我想添加一些lib(.jar & .so)到我在android studio中的multidex項目。Android multidex,UnsatisfiedLinkError - 找不到.so文件

當我只向項目添加幾個罐子時,一切正常。 的情況下,我添加越來越多的罐子(其他庫) 我得到這個錯誤:

java.lang.UnsatisfiedLinkError: 
    dalvik.system.PathClassLoader[DexPathList[[zip file 
    "/data/app/com.test.digital.ocrtest-2/base.apk"],nativeLibraryDirectories=[/data/app/com.test.digital.ocrtest-2/lib/arm, 
    /data/app/com.test.digital.ocrtest-2/base.apk!/lib/armeabi-v7a, 
    /vendor/lib, /system/lib]]] couldn't find 
    "libScanovatePassportAndIDLSDK_CPP.so" 

任何想法我怎麼能告訴編譯器生成JAR,因此在相同的DEX?

+0

否,.so不會進入dex。但是請確認.so是否包含在您的APK中。您可以使用'unzip -l'來列出APK文件的內容。 –

+0

是的,它被包裝在我的APK中。 –

+0

APK在停止工作時的總大小是多少?這是哪種設備? –

回答

4

如果一些額外的JAR帶來armeabi-V7A本地libries,而你的libScanovatePassportAndIDLSDK_CPP.so只是專爲armeabi,安裝程序會提取錯誤的庫中。修正方法是不添加.so的更多副本,而是刪除其他ABI。在gradle中,您可以使用splits

+2

感謝!我已經用盡了所有基本的UnsatisfiedLinkError問題;終於找到了這個。 –

1

有一個優雅的解決方案。當您的APK文件不包含某個ABI的64位版本中的所有本機庫時,只需確保您的APK文件不包含任何64位庫。下面是關於如何配置你的項目來解決這個教程:https://corbt.com/posts/2015/09/18/mixing-32-and-64bit-dependencies-in-android.html

背景 當安裝在64位ABI設備您的應用程序,包管理器掃描上安裝APK文件,並查找64位機庫。如果它找到合適的64位本地庫文件夾(如果用任何zip客戶端打開它,可以在APK文件中檢查/ libs文件夾),它假定所有本地庫都可用於64位版本。如果一個或多個本地庫在64位版本中不可用,則包管理器將無法加載其32位版本。因此,當應用程序嘗試運行依賴這些本機庫的代碼時,您將收到此UnsatisfiedLinkError消息。這意味着您的庫的32位版本