android 仅支持 armeabi 和 x86 的库的问题

Problem with android library which support just armeabi and x86

我正在为我的公司开发一个应用程序,但我们遇到了一个问题。我们已经导入了一个库(不是我们的,是我们买的),如果不将 abiFilters 设置为

它就无法工作
ndk {
    abiFilters "armeabi", "x86"
}

这使得库可以正常工作,但 Salesforce SDK bugged/not 使用此过滤器。我们买的库是一个.aar,解压后发现armeabiv7x86_64的库都没有。 有什么方法可以强制 .so 或其他任何搜索 armeabix86 库的模块,而无需为整个应用程序设置过滤器?

提前致谢。

你可以假装 armeabi 库是 armeabi-v7a。如果可以重新打包.aar文件,只需将so文件移动到jni/armeabi-v7a即可。或者,您可以将库放入app/src/main/jniLibs/armeabi-v7a,然后设置

ndk {
  abiFilters "armeabi-v7a", "x86"
}

There is any way to force the SO or whatever to search for armeabi and x86 library JUST for that module without setting filter for the entire application?

答案是否定的。

因为在64位设备上,如果你同时提供了32位和64位.so,系统会为all[=28]选择64位版本=] .so 个库。如果某些库没有对应的 64 位库,您的应用程序将抛出错误 java.lang.UnsatisfiedLinkError: Library xxx not found,这是因为系统需要 consistent AND non-mixed native 指令集,即纯 64 位指令或纯 32 位指令。您 不能 期望 Android 系统为某些库选择 64 位 .so 但同时期望它选择 32 位 .so对于其他共享库。

对于你的情况,abiFilters 实际上强制你所有的 .so 文件只有 32 位版本 .so 用于你的最终 apk,这样你的应用程序可以像你一样工作说。