情况如下:
我有一个 64 位 apk,它应该是来自
/system/lib
的 32 位共享对象(.so 文件)。但是apk运行时崩溃并报告:
UnsatisfiedLinkError nativeLibraryDirectories=[/vendor/lib64, /system/lib64
我认为它尝试从 /system/lib64 搜索位于
/system/lib
中的 .so 文件,然后发生错误。
我怎样才能让它从
/system/lib
而不是/system/lib64
搜索?
发生这种情况是因为您至少捆绑了一个 64 位本机库。 Android 检测到这一点并决定在仅限 64 位的位置查找其余的 .so 文件。 它找不到它们,因为您只针对 32 位架构进行构建。
要验证这是否是您的问题,请打开构建的 apk 并查看“lib”目录。 其中的每个子目录代表一个本机二进制架构。 如果您没有为该架构构建所有本机 .so 文件,则该目录不应该存在。 找出原因并阻止它。
Crashlytics 就是一个例子,它可以悄悄地自我捆绑。 由此产生的崩溃仅出现在 64 位设备上,因为 32 位设备从不搜索 64 位体系结构目录。
您必须从所有第三方中间件中删除不完全支持的架构。
如果您只有 x86 和armeabi-v7a 库,您的应用程序应自动以“32 位模式”安装。
尝试在你的 gradle 文件中使用它:
安卓{ .... 默认配置{ .... NDK { abiFilters“armeabi-v7a”,“x86” } } }
Nâng cấp cấu hình hệ tương thì phải làm thế nào...