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

时间:2019-04-24 13:03:48

标签: android android-ndk android-gradle android-library abi

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

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

使库正常工作,但Salesforce SDK错误/不能与此过滤器一起使用。我们购买的库是.aar,我们将其解压缩后发现armeabiv7x86_64的库不存在。 是否有任何方法可以强制.so或仅搜索该模块的armeabix86库,而无需为整个应用程序设置过滤器?

谢谢。

2 个答案:

答案 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,以便您的应用可以像您所说的那样工作。