在对接多个有so文件的第三方sdk时碰到一个问题,在某些手机上会崩溃报错,报错Log显示:无法找到某某**.so文件。
反编译集成的apk文件,发现libs下各架构目录下的so文件并不都相同,有些架构里有的so在其他架构里就没有。
问题就出在这里了,android中,根据cpu架构分七种 "armeabi", "armeabi-v7a","arm64-v8a", "x86", "x86_64", "mips", "mips64",
(如果针对各个架构优化过代码,运行效率会优一些)如果你的手机是arm64的,就会先去找arm64,如果找到了,就读取arm64下的so。如果没有找到,就去找v7a,v7a也没有就去armeabi。因此,我们在适配某一种架构时,要嘛全部提供,要嘛全都不提供,以免报错。
可以使用如下代码控制需要提供的架构目录:
android {
defaultConfig {
ndk {
abiFilters "armeabi"//, "armeabi-v7a","arm64-v8a", "x86", "x86_64", "mips", "mips64"
}
}
}