android 仅支持 armeabi 和 x86 的库的问题
Problem with android library which support just armeabi and x86
我正在为我的公司开发一个应用程序,但我们遇到了一个问题。我们已经导入了一个库(不是我们的,是我们买的),如果不将 abiFilters
设置为
它就无法工作
ndk {
abiFilters "armeabi", "x86"
}
这使得库可以正常工作,但 Salesforce SDK bugged/not 使用此过滤器。我们买的库是一个.aar
,解压后发现armeabiv7
和x86_64
的库都没有。
有什么方法可以强制 .so
或其他任何搜索 armeabi
和 x86
库的模块,而无需为整个应用程序设置过滤器?
提前致谢。
你可以假装 armeabi 库是 armeabi-v7a。如果可以重新打包.aar文件,只需将so文件移动到jni/armeabi-v7a
即可。或者,您可以将库放入app/src/main/jniLibs/armeabi-v7a
,然后设置
ndk {
abiFilters "armeabi-v7a", "x86"
}
There is any way to force the SO or whatever to search for armeabi and x86 library JUST for that module without setting filter for the entire application?
答案是否定的。
因为在64位设备上,如果你同时提供了32位和64位.so
,系统会为all[=28]选择64位版本=] .so
个库。如果某些库没有对应的 64 位库,您的应用程序将抛出错误 java.lang.UnsatisfiedLinkError: Library xxx not found
,这是因为系统需要 consistent AND non-mixed native 指令集,即纯 64 位指令或纯 32 位指令。您 不能 期望 Android 系统为某些库选择 64 位 .so
但同时期望它选择 32 位 .so
对于其他共享库。
对于你的情况,abiFilters
实际上强制你所有的 .so
文件只有 32 位版本 .so
用于你的最终 apk,这样你的应用程序可以像你一样工作说。
我正在为我的公司开发一个应用程序,但我们遇到了一个问题。我们已经导入了一个库(不是我们的,是我们买的),如果不将 abiFilters
设置为
ndk {
abiFilters "armeabi", "x86"
}
这使得库可以正常工作,但 Salesforce SDK bugged/not 使用此过滤器。我们买的库是一个.aar
,解压后发现armeabiv7
和x86_64
的库都没有。
有什么方法可以强制 .so
或其他任何搜索 armeabi
和 x86
库的模块,而无需为整个应用程序设置过滤器?
提前致谢。
你可以假装 armeabi 库是 armeabi-v7a。如果可以重新打包.aar文件,只需将so文件移动到jni/armeabi-v7a
即可。或者,您可以将库放入app/src/main/jniLibs/armeabi-v7a
,然后设置
ndk {
abiFilters "armeabi-v7a", "x86"
}
There is any way to force the SO or whatever to search for armeabi and x86 library JUST for that module without setting filter for the entire application?
答案是否定的。
因为在64位设备上,如果你同时提供了32位和64位.so
,系统会为all[=28]选择64位版本=] .so
个库。如果某些库没有对应的 64 位库,您的应用程序将抛出错误 java.lang.UnsatisfiedLinkError: Library xxx not found
,这是因为系统需要 consistent AND non-mixed native 指令集,即纯 64 位指令或纯 32 位指令。您 不能 期望 Android 系统为某些库选择 64 位 .so
但同时期望它选择 32 位 .so
对于其他共享库。
对于你的情况,abiFilters
实际上强制你所有的 .so
文件只有 32 位版本 .so
用于你的最终 apk,这样你的应用程序可以像你一样工作说。