这篇记录,是因为集成百度地图导航时遇到一个问题:
libgnustl_shared.so” not found.
更多的问题描述会呈现为:
百度地图+百度定位+导航SDK冲突问题
介绍一下背景:
目前市面好用,覆盖面又大的地图,应该就是:百度和高德了。
目前的项目,我选用的是百度地图,
需要的功能:
1 定位
2 地图
3 导航
这也是目前使用地图的最常见的三个功能,1和2 最常见。
不过现在cpu架构太多了,64位cpu的android手机也非常多了。
但是一旦需要c/c++支持的话,就得编译多个so包来支持。
而目前BaiduMapSDK里,定位和地图的libs包含如下目录:
"armeabi",
"armeabi-v7a",
"mips64",
"x86",
"x86_64"
而导航的开发包(libs)则只支持arm。
问题来了,
情况1:
如果单独使用导航功能,则众多手机都能正常使用和编译通过。
原因:对于”导航”来说,按照论坛里其他同学所讲的,默认情况下,x64cpu的手机会自动使用arm的包,能编译通过,并正常运行。
情况2:
但若将地图,定位,导航集成到一起使用的话,定位和地图功能有
"armeabi",
"armeabi-v7a",
"mips64",
"x86",
"x86_64"
的so包,而导航没有。编译通过,但运行时会报:
dlopen failed: library libgnustl_shared.so"
查阅了一些帖子:
0 http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=129470
1 http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=114809
2 http://blog.csdn.net/lhmin5200/article/details/51392983
3 http://blog.csdn.net/qq_28934205/article/details/61914202
大概有2个方法:
1 删除arm64-v8a, arm-v7a, x86, x86_64目录;
2 在app.gradle里作如下配置,过滤掉其他的包:
defaultConfig {
ndk {
abiFilters "armeabi"
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
而我目前使用方法2, 目前x64手机和arm手机都正常使用这导航功能了。
但目前还没有集成其他第三方平台(个推,友盟……),先Mark一下,待以后集成了,如果同样配置,还能使用,再来备注。
希望百度地图团队,能早日单独支持导航包的多cpu版本。