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

我正在尝试在android studio中为我的multidex项目添加一些lib(.jar和.so)。

当我只为项目添加几个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?

如果一些额外的JAR为armeabi-v7a带来本机库,而libScanovatePassportAndIDLSDK_CPP.so仅为armeabi构建 ,则安装程序将提取一组错误的库。 修复不是添加更多的.so副本,而是剥离其他ABI。 在gradle中,您可以使用拆分

有一个优雅的解决方案。 当您的APK文件不包含64位版本的特定ABI的所有本机库时,您只需要确保您的APK文件不包含任何64位库。 以下是有关如何配置项目以解决此问题的教程: https : //corbt.com/posts/2015/09/18/mixing-32-and-64bit-dependencies-in-android.html

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