Android百度地图打包混淆代码后地图崩溃的解决方法
2015-04-23 09:08:29  By: dwtedx

问题现象

今天做百度地图时出现一些小问题、一搜发现大家似乎都遇到过这样的问题、大家知道百度地图API需要申请Key,填写安全码

安全码的组成规则为:Android签名证书的sha1值 “;” packagename(即:数字签名 分号 包名)

debug的话、代码没有经过混淆、百度地图正常使用、只有在打包之后才有这个问题


但是呢、基本上发布到应用市场的apk一般都是经过加密的、有点知识产权保护意识的都会有代码混淆、就会用一套自己的keystore,重新设定“安全码后”、导出apk时没有报任何错误

但是当我装载手机上使用百度地图定位时、地图绘制了一大半、就死掉了、留下log控制台有这么句话

com.baidu.platform.comapi.map.MapRenderer.nativeRender(Native Method)


分析原因

这里只贴了一句、还有很多异常信息哈、经过google查找、然后把百度地图官网又仔细读了便、果然功夫不负有心人、还是让我找到了、其实官方已经明确指出了

3.6.5 为何我的程序在不混淆之前可以运行,混淆之后不能运行了?

栅格版SDK(即1.3.5及之前的版本):

如果您使用proguard进行混淆,请在您的混淆配置文件中添加如下语句:

-keep class com.baidu.mapapi.** {*;}

矢量版SDK(即2.0.0及之后的版本):

如果是用proguard ,以下配置供参考:

#-libraryjars libs/baidumapapi_v2_1_2.jar 替换成自己所用版本的jar包

-keep class com.baidu.** { *; }

-keep class vi.com.gdi.bgl.android.**{*;}

其他混淆工具也请进行与此类似的配置,指定对mapapi中的类和方法不进行混淆。


解决方案

在proguard-project.txt中添加如下(引用的是百度baidumapapi_v3_3_0.jar这版的jar包、换成自己的包就好了)

-libraryjars libs/baidumapapi_v3_3_0.jar
-keep class com.baidu.** { *; }
-keep class vi.com.gdi.bgl.android.**{*;}


其实最后找到原因就是代码混淆时少了这行、加上之后再次导出、地图功能就可以正常使用了

-keep class vi.com.gdi.bgl.android.**{*;}

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

    • boke123网址大全 2015-04-23 11:46:06  3 评  | 回复

      @dwtedx:在本站首页的最新加入第二个,这个最新加入是会变动的,其他栏目不变;贵站被收录到建站技术类,可进入建站技术类博客,倒数第一个。网址:http://boke123.net/jzjs,也可以通过右上角的站内搜索进行收录查询。


    • dwtedx 2015-04-23 10:32:16  2 评  | 回复

      @boke123网址大全:其实圈子就是留言板的,非常感谢你的收录、怎么我在你的导航站上面没有找到我的站呢?


    • boke123网址大全 2015-04-23 09:36:37  1 评  | 回复

      博主,你好,boke123网址大全(博客导航站)特来拜会,发现贵站不错,已将贵站收录到技术类,如有异议请留言哦!谢谢!PS:由于在贵站找不到留言板,所以在此留言告知,如造成困扰,请删除本评论,谢谢!


DD记账
top
+