我正在为我的公司开发一个应用程序,我们正面临一个问题。我们已经导入了一个库(没有我们的,我们买了它),如果没有设置abiFilters
,它就无法工作
ndk {
abiFilters "armeabi", "x86"
}
这使得图书馆工作,但Salesforce SDK被窃听/不使用此过滤器。我们买的图书馆是.aar
,我们解压缩它,发现armeabiv7
和x86_64
的库不存在。有没有办法强制.so
或其他什么来搜索armeabi
和x86
库JUST为该模块没有为整个应用程序设置过滤器?
先感谢您。
有没有办法强制SO或其他什么来搜索该模块的armeabi和x86库JUST而不为整个应用程序设置过滤器?
答案是否定的。
因为,在64位设备上,如果您同时提供了32位和64位.so
,系统将为所有.so
库选择64位版本。如果某个库没有相应的64位库,您的应用程序将抛出错误java.lang.UnsatisfiedLinkError: Library xxx not found
,这是因为系统需要一致且非混合的本机指令集,即纯64位指令或纯32位指令。您不能指望Android系统为某些库获取64位.so
,但同时期望它为其他共享库获取32位.so
。
对于你的情况,abiFilters
实际上强制你所有的.so
文件只有你的最终apk的32位版本.so
,以便你的应用程序可以像你说的那样工作。
你可以假装armeabi库是armeabi-v7a。如果您可以重新打包.aar文件,只需将so文件移动到jni/armeabi-v7a
即可。或者,您可以将库放到app/src/main/jniLibs/armeabi-v7a
,然后设置
ndk {
abiFilters "armeabi-v7a", "x86"
}