Android multidex, UnsatisfiedLinkError-couldn't find .so file

 2023-01-19    342  

问题描述

我正在尝试将一些lib(.jar&.so)添加到我在Android Studio的Multidex项目中.

当我在项目中仅添加几罐罐子时,一切正常.
如果我添加越来越多的罐子(其他Libs)
我遇到了这个错误:

Android multidex, UnsatisfiedLinkError-couldn't find .so file

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中?

推荐答案

如果某些额外的罐子为 armeabi-v7a 带来本地库,而您的 libscanovatepasspassportandidlsdk_cpp.so 仅用于 armeabi >,安装程序将提取错误的库集.修复程序不是要添加更多 .so 的副本,而是剥离其他ABI.在Gradle中,您可以使用 splits .

其他推荐答案

有一个优雅的解决方案.当您的APK文件不包含64位版本中的所有本机LIB时,您只需要确保您的APK文件不包含任何64位LIB即可.这是有关如何配置项目来解决此问题的教程: https://corbt.com/posts/2015/09/18/mixing-32-and-64bit-deperioncies-in-android.htroid.html

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

以上所述是小编给大家介绍的Android multidex, UnsatisfiedLinkError-couldn't find .so file,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25881.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。