情况
在项目同时集成百度地图SDK和超图iMobile的时候出现了这个问题
分析
由于百度地图的so库涵盖的处理器版本比超图要广,而系统在选定了某一特定so文件库后便会一直使用这个文件夹(例如:arm64-v8a),但是简单看了一下超图报错类的代码后发现,及时没有找到iMobile对应的so文件也是报不匹配。
由此分析应该是系统选用的so文件夹并不包含超图so文件。
解决
方法1:让系统只运行超图so文件所在的so目录:
在Android studio配置文件build.gradle(Module APP)中配置如下:
android {
....
defaultConfig {
....
ndk {
abiFilters "armeabi-v7a"
}
}
}
方法2:将超图对应的so文件复制到其他32位处理器的版本(因为超图的是32位)
方法3:让超图的初始化比其他包早(使得系统优先选择那个文件夹)
注意
方法1的后果:你的其他包的so文件不在arm64-v7a导致出错、不兼容64位版本处理器、不兼容非ARM架构的手机(如谷歌)
方法2的后果:不知道,待尝试
方法3的后果:该方法可行性高而且安全,但可能与程序逻辑不符合
参考
is 32-bit instead of 64-bit动态库错误分析
陈器 2020.4.19