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

时间:2015-05-27 05:44:13

标签: 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进行搜索?

2 个答案:

答案 0 :(得分:4)

这种情况正在发生,因为您捆绑了至少一个64位本机库。 Android检测到这一点,并决定在64位的位置寻找其余的.so文件。它找不到它们,因为您只构建32位体系结构。

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

这方面的一个例子是Crashlytics可以安静地捆绑自己。由此产生的崩溃仅出现在64位设备上,因为32位设备从不搜索64位体系结构目录。

您必须从所有第三方中间件中删除未完全支持的体系结构。

答案 1 :(得分:3)

如果您只有x86和armeabi-v7a库,您的应用程序应自动以“32位模式”安装。

尝试在gradle文件中使用它:

android {     ....     defaultConfig {         ....         ndk {             abiFilters“armeabi-v7a”,“x86”         }     } }