android库的问题只支持armeabi和x86

问题描述 投票:2回答:2

我正在为我的公司开发一个应用程序,我们正面临一个问题。我们已经导入了一个库(没有我们的,我们买了它),如果没有设置abiFilters,它就无法工作

ndk {
    abiFilters "armeabi", "x86"
}

这使得图书馆工作,但Salesforce SDK被窃听/不使用此过滤器。我们买的图书馆是.aar,我们解压缩它,发现armeabiv7x86_64的库不存在。有没有办法强制.so或其他什么来搜索armeabix86库JUST为该模块没有为整个应用程序设置过滤器?

先感谢您。

android android-ndk android-gradle android-library abi
2个回答
0
投票

有没有办法强制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,以便你的应用程序可以像你说的那样工作。


0
投票

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

ndk {
  abiFilters "armeabi-v7a", "x86"
}
© www.soinside.com 2019 - 2024. All rights reserved.