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