android - UnsatisfiedLinkError nativeLibraryDirectories=[/vendor/lib64,/system/lib64

标签 android shared-libraries loadlibrary

情况如下:

我有一个 64 位 apk,它应该是来自 /system/lib 的 32 位共享对象(.so 文件)。但是apk运行时崩溃,报:

UnsatisfiedLinkError nativeLibraryDirectories=[/vendor/lib64, /system/lib64

我认为它试图从/system/lib64 搜索我位于 /system/lib 中的 .so 文件,然后发生错误。

如何让它从 /system/lib 而不是 /system/lib64 搜索?

最佳答案

发生这种情况是因为您 bundle 了至少一个 64 位 native 库。 Android 检测到这一点并决定在仅限 64 位的位置寻找其余的 .so 文件。它找不到它们,因为您只为 32 位架构构建。

要验证这是您的问题,请打开构建的 apk 并查看“lib”目录。其中的每个子目录代表一个本地二进制架构。如果您没有为该体系结构构建所有 native .so 文件,则该目录不应该存在。找出原因并阻止它。

这方面的一个例子是 Crashlytics,它可以悄悄地 self bundle 。导致的崩溃只出现在 64 位设备上,因为 32 位设备从不搜索 64 位架构目录。

您必须从所有第三方中间件中删除您不完全支持的架构。

关于android - UnsatisfiedLinkError nativeLibraryDirectories=[/vendor/lib64,/system/lib64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30474073/

相关文章:

glassfish - Java Web 应用程序不能使用 native 库 (.so)

.net - Hook 来自托管代码的 LoadLibrary 调用

java - 实践中的 Http GET 调用失败(通过 web HTTP 测试检查并成功)

Android Wear 应用程序未显示在 watch 的 "Start..."菜单中

c++ - 加载类 - 动态链接库返回 undefined symbol 错误

linux - FreeBSD Linux 库安装

Android系统对话框弹窗无法取消

android - 您能指出这段代码中 ListView 的问题吗?

c++ - 链接器如何知道应该在运行时解析哪些符号?

c++ - LoadLibrary() 文件路径