Android百度地图SDK无法支持64位平台完美解决方案

来源:互联网 发布:360软件认证中心 编辑:程序博客网 时间:2024/06/08 10:31

首先强调下,百度地图早已经处理了对64位平台的支持,而且现在很多手机都用64位处理器了,而且很多应用使用百度地图sdk都没有问题,那么问题就是我们没有使用好百度地图了。


最近开发项目时候遇到一个问题,问题报错信息有这么一句话

/lib/arm64/libBaiduMapSDK_base_v4_1_0.so" is 32-bit instead of 64-bit。

意思应该是我的机器用的是64位的芯片,可是so文件是32位的,所以报错了。

先说一下什么大约什么情况下会遇到这个bug。后面会给出完整解决方案。

 


在百度地图sdk下载链接处有两个下载按钮,一个是自定义下载,一个是一键下载。

没想太多直接点击自定义下载,选择好功能,之后把libs包下面的东西复制到项目中,这里新建了一个项目。然后写了一个单独的定位功能,运行一切正常。

然后把这个项目copy到另外的工程中就遇到了上面的问题。

经过调试大概知道了问题的根源就是原来的项目里有极光推送。分析了原因之后大概理解情况是这样的。

百度sdk的libs里只有armeabi一个文件夹,极光推送的libs里除了armeabi还有好多文件夹。当把这些文件夹复制进去后百度地图sdk就不能用了。就是说当libs里面有64位的armeabi文件夹存在的时候系统会根据芯片位宽寻找so文件,如果找到的不是64的就报这个错误了。

当系统没有64位的文件夹时候会直接调用armeabi下的so文件,百度地图这里的so文件是32位的,但是兼容64位的芯片。


大概问题就分析清楚了。那么应该如何解决呢,下面给出网上大部分的解决方案。 

1,解决办法是把除了armeabi文件夹之外的其余文件夹都删掉。这样百度地图和极光推送都能使用了。

PS:虽然能解决问题,可是使用其他sdk时候就限制了不能添加64位文件夹,如果有的sdk不兼容,就无法和地图一起使用了。

2,把armeabi文件夹的so文件复制到64位的文件夹下面

PS:这个应该是很多人尝试的方式了,结果却是没有什么用,还是会有问题,运行不起来项目,

这个问题应该遇到的人非常多了,百度地图的论坛上也很多人提问,可惜没有好用的完整答案。



其实这个问题特别好解决。首先你需要在之前的页面点击一键下载,然后解压就会发现这个项目的libs里面是这样的


也就是说百度地图提供了64位的so文件,只是封装在了一键下载包里面,而之前那个是没有的,而百度地图却推荐了上面的下载。

既然找到了64位的包,那么直接复制到项目里面把之前的so文件和jar问题替换掉就ok了。

大家看到我这里面有个locSDK—6.13.jar文件。而lib包下面是没有的,这个jar文件是定位的sdk,因为做的demo就是个简单定位,用于测试的。

所以在没有这个文件的时候,项目竟然编译都通过不了,而这个文件竟然隐藏在demo的libs里面。我直接复制过来放入项目,问题解决。

这样就可以使用64位的so文件了。


欢迎加入QQ群372647271 一起学习Android


0 1
原创粉丝点击