【问题标题】:java.lang.UnsatisfiedLinkError - wrong directory searched for native librariesjava.lang.UnsatisfiedLinkError - 搜索本机库的目录错误
【发布时间】:2019-11-27 12:46:52
【问题描述】:

在我的应用中,我使用 Android NDK 为 armeabi-v7a、arm64-v8a、x86 和 x86_64 ABI 构建库。 我正在将库作为捆绑包上传到 Google Play。

在某些设备上我收到以下错误

Fatal Exception: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/my-package-name-1/base.apk"],nativeLibraryDirectories=[/data/app/my.package.name-1/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libc++_shared.so"

我检查了上传包的内容,它肯定包含上述 ABI 的 libc++_shared.so。

搜索到的目录好像不对"../lib/arm"。我没有添加对过时 ABI(mips,armeabi)的支持,但我不记得有什么叫 "arm"

我该如何解决这个问题?

更新: 在 gradle 文件中明确指定支持的 ABI 没有帮助。在将它上传到播放商店之前,我再次检查了 libc++_shared.so 是否存在于捆绑文件中(对于每个 ABI),并且再次没有文件丢失。

我注意到的另一个奇怪的事情是每个用户(+10/用户)有很多崩溃。我觉得这有点奇怪,因为没有库,应用程序无法工作(甚至无法启动)。如果我启动的应用程序立即崩溃或根本无法运行,我可能会在第一次尝试失败后将其卸载。

谢谢

【问题讨论】:

  • 这可能与stackoverflow.com/questions/56982270/… 有关。尝试做 adb shell 和 dumpsys 软件包 | grep your_package_name 并检查您的 legacyNativeLibraryDir/CPU_ARCH 是什么。
  • legacyNativeLibraryDir 只是以 /lib 结尾,这似乎是正确的。无论如何,它不会在我的设备上崩溃。仅在我无权访问的设备上。
  • @roman 你找到合适的解决方案了吗?

标签: android android-ndk unsatisfiedlinkerror


【解决方案1】:

检查您的 jni 构建是否被复制到库而不是 jniLibs。 如果是,将内容从 libs 复制到 jniLibs。

Check out this post

【讨论】:

  • 我注意到,当我启用 Firebase Crashlytic 并且我没有在 gradle (ndk { abiFilters ..}) 中明确指定目标本机 ABI 时,构建系统会创建 armeabi 文件夹,其中仅包含 libcrashlytics.so 而不是我的其他图书馆。 “../lib/arm”目录可以实际用于armeabi吗?将不得不对此进行一段时间的监控,以查看在我在 gradle 中指定确切 ABI 的最后一次更改后是否会崩溃。感谢您的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多