Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅支持armeabi和x86的android库存在问题_Android_Android Ndk_Android Gradle Plugin_Android Library_Abi - Fatal编程技术网

仅支持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位版本。这有几个例外。看见