百度地图和百度导航冲突问题

来源:互联网 发布:有哪些画图软件 编辑:程序博客网 时间:2024/05/16 10:02

这篇记录,是因为集成百度地图导航时遇到一个问题:
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版本。