只支持 armeabi 和 x86 架构的 Android 库存在问题

3

我正在为公司开发一个应用程序,我们遇到了一个问题。我们导入了一个库(不是我们的,我们购买了它),如果不设置abiFilters,它无法正常工作。

ndk {
    abiFilters "armeabi", "x86"
}

这个库本来是可以工作的,但是Salesforce SDK 与这个过滤器存在漏洞/无法正常工作。我们购买的库是一个 .aar 文件,我们解压它后发现缺少 armeabiv7x86_64 的库文件。

有没有办法强制让 .so 或者其他内容只为该模块搜索 armeabix86 库文件,而不是为整个应用程序设置过滤器?

提前感谢您的回答。


3
虽然这并不回答你的问题,但你需要知道自2019年8月1日起,所有包含32位原生库的新应用程序和现有应用程序更新也需要同时包含这些库的64位版本。 这里有几个例外情况,请参见https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html。 - Michael
2个回答

1
有没有办法强制系统只为该模块搜索armeabi和x86库,而不是为整个应用程序设置过滤器?
答案是否定的。
因为在64位设备上,如果您提供了32位和64位.so文件,系统将选择64位版本来处理所有.so库。如果某个库没有相应的64位库,您的应用程序将抛出错误java.lang.UnsatisfiedLinkError: Library xxx not found,这是因为系统需要一致且非混合的本机指令集,即纯64位指令或纯32位指令。您不能期望Android系统为某些库选择64位.so文件,同时期望它为其他共享库选择32位.so文件。
对于您的情况,abiFilters实际上强制所有.so文件只有32位版本的.so文件用于最终的apk,以便您的应用程序可以像您所说的那样工作。

0

您可以将 armeabi 库视为 armeabi-v7a。如果您可以重新打包 .aar 文件,只需将 so 文件移动到 jni/armeabi-v7a。或者,您可以将库放置在 app/src/main/jniLibs/armeabi-v7a 中,并设置

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接