百度地图so包找不到SDK initialize初始化报错及so包分析

1.       问题出现

开发百度地图应用时,突然报如下错误:

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/packagename/files/libs/libBaiduMapSDK_base_v4_3_1.so"is 32-bit instead of 64-bit
                    atjava.lang.Runtime.load(Runtime.java:344)
                    atjava.lang.System.load(System.java:1079)
                    atcom.baidu.platform.comapi.NativeLoader.f(Unknown Source)
                    atcom.baidu.platform.comapi.NativeLoader.b(Unknown Source)
                    atcom.baidu.platform.comapi.NativeLoader.a(Unknown Source)
                    atcom.baidu.platform.comapi.NativeLoader.c(Unknown Source)
                    atcom.baidu.platform.comapi.NativeLoader.loadCustomizeNativeLibrary(UnknownSource)
                    atcom.baidu.platform.comapi.NativeLoader.loadLibrary(Unknown Source)
                    atcom.baidu.platform.comapi.a.(Unknown Source)
                    atcom.baidu.platform.comapi.a.a(Unknown Source)
                    atcom.baidu.platform.comapi.b.a(Unknown Source)
                    atcom.baidu.mapapi.SDKInitializer.initialize(Unknown Source)
                    atcom.baidu.mapapi.SDKInitializer.initialize(Unknown Source)


无奈排查了各种问题均没有结果,后来没办法,分析了整个apk结构,终于找到了问题所在!

2.       问题分析

(1)      首先是报错的意思是,需要64位的libBaiduMapSDK_base_v4_3_1.so包,而apk里却只找到了32位的so包,那么问题可能就是apkso包的架构里少了某个百度api的so包。

(2)      分析apk结构,重点分析so包架构,我的工程里只有armeabi架构的so包,分析apk截图如下:


瞬间懵逼…我只在armeabi文件夹下放了so包  ,为啥其他架构下也出现了so包文件夹?依次打开文件夹:

armeabi 下,so包如下:

百度地图so包找不到SDK initialize初始化报错及so包分析_第1张图片

X86,arm64-v8a,x86_64文件夹下,so包如下:


那么问题就好解决了,在百度map初始化时,因为有相应的so架构,所以运行时优先去找这些架构下的libBaiduMapSDK_base_v4_3_1.so包,结果只在armeabi文件夹下找到了so包,而他支持的arm64-v8a包下没有发现这个so包,就报了如上错误!

3.       问题解决:

(1)      找出罪魁祸首

那么libsqlcipher.so包是哪里引进的呢,看了下这个包,就是我引入greendao依赖时,aar包自带的,所以我在外部目录根本看不到有其他so架构

(2)      设置so包过滤器

只需要在生成apk时,设置so包的过滤器即可,在build.gradle下加入如下代码:

defaultConfig {

        minSdkVersion 16

        targetSdkVersion 22

        ndk {

            abiFilters"armeabi"

        }

    }

Ok,再次运行,分析apk,so架构下只有armeabi文件夹了,正常运行,问题解决。

百度地图so包找不到SDK initialize初始化报错及so包分析_第2张图片

PS:分析apk结构方法:

点击菜单栏Build->选择Analyze Apk->选择你要分析的apk->确认,等待一会弹出分析结果


你可能感兴趣的:(开发错误收集,百度地图so包找不到.,百度地图,initialize初始化报错,so包分析,so包报错)