仅支持armeabi和x86的android库存在问题
我正在为我的公司开发一个应用程序,我们面临一个问题。我们已经导入了一个库(不是我们的,我们买的),如果没有将仅支持armeabi和x86的android库存在问题,android,android-ndk,android-gradle-plugin,android-library,abi,Android,Android Ndk,Android Gradle Plugin,Android Library,Abi,我正在为我的公司开发一个应用程序,我们面临一个问题。我们已经导入了一个库(不是我们的,我们买的),如果没有将abiFilters设置为 ndk { abiFilters "armeabi", "x86" } 这使得库可以工作,但Salesforce SDK安装了错误/无法使用此筛选器。我们购买的库是一个.aar,我们解压缩后发现armeabiv7和x86_64的库不存在。 是否有任何方法可以强制。因此或其他任何方法只为该模块搜索armeabi和x86库,而不为整个应用程序设置过滤器 提
abiFilters
设置为
ndk {
abiFilters "armeabi", "x86"
}
这使得库可以工作,但Salesforce SDK安装了错误/无法使用此筛选器。我们购买的库是一个.aar
,我们解压缩后发现armeabiv7
和x86_64
的库不存在。
是否有任何方法可以强制。因此
或其他任何方法只为该模块搜索armeabi
和x86
库,而不为整个应用程序设置过滤器
提前谢谢。您可以假装armeabi库是armeabi-v7a。如果可以重新打包.aar文件,只需将so文件移动到
jni/armeabi-v7a
。或者,您可以将库置于app/src/main/jniLibs/armeabi-v7a
,并设置
ndk {
abiFilters "armeabi-v7a", "x86"
}
有没有办法强迫SO或其他人只为该模块搜索armeabi和x86库,而不为整个应用程序设置过滤器
答案是否定的
因为,在64位设备上,如果您同时提供了32位和64位.so
,系统将为所有.so
库选择64位版本。如果某个库没有相应的64位库,您的应用程序将抛出错误java.lang.unsatifiedlinkerror:library xxx not found
,这是因为系统需要一致且非混合的本机指令集,即纯64位指令或纯32位指令。你不能期望Android系统为某些库选择64位。因此
,但同时也期望它为其他共享库选择32位。因此
对于您的情况,
abiFilters
实际上强制您的所有.so
文件只有32位版本.so
用于您的最终apk,以便您的应用程序可以像您所说的那样工作 虽然它不能回答您的问题,但您应该知道,从2019年8月1日起,所有包含32位本机库的新应用程序和现有应用程序的更新都必须包含这些库的64位版本。这有几个例外。看见