Android multidex,UnsatisfiedLinkError – 找不到.so文件

我试图添加一些lib(.jar&.so)到我在android studio的multidex项目。

当我只添加几个jar子的项目一切工作正常。 万一我添加更多的jar子(其他库)我得到这个错误:

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?

Solutions Collecting From Web of "Android multidex,UnsatisfiedLinkError – 找不到.so文件"

如果某些额外的JAR为armeabi-v7a带来了本机libries,而libScanovatePassportAndIDLSDK_CPP.so仅为armeabi构build ,则安装程序将提取一组错误的库。 解决的办法不是增加更多的.so ,而是删除其他ABIs。 在gradle中,你可以使用分割

这是一个优雅的解决scheme。 当你的APK文件不包含某个ABI的64位版本的所有本机库时,只需确保你的APK文件不包含任何64位库。 这里是关于如何configuration您的项目来解决这个教程: https : //corbt.com/posts/2015/09/18/mixing-32-and-64bit-dependencies-in-android.html

背景当您的应用程序安装在64位ABI设备上时,软件包pipe理器会在安装时扫描APK文件并查找64位本机库。 如果它find了合适的64位本地库文件夹(如果你用任何zip客户端打开它,你可以在你的APK文件中检查/ libs文件夹),它假定所有本地库在64位版本中都可用。 如果一个或多个本地库在64位版本中不可用,则包pipe理器将无法加载其32位版本。 因此,当应用程序尝试运行依赖于这些本机库的代码时,您将收到此UnsatisfiedLinkError消息。 这意味着你的库的32位版本