Android - 百度地圖打包混淆代碼後地圖崩潰的解決方案
前言:
之前開發項目用到百度地圖,測試的時候沒有問題;但是,一打包加混淆之後就出現地圖崩潰的問題;項目已經完結,趁有閑暇時間趕緊分享一下自己的解決方案。
問題現象:
之前做百度地圖開發時出現一些小問題、一搜發現大家似乎都遇到過這樣的問題、大家知道百度地圖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_v3_1_0.jar 替換成自己所用版本的jar-keep class com.baidu.** { *; }-keep class vi.com.gdi.bgl.android.**{*;}
其他混淆工具也請進行與此類似的配置,指定對mapapi中的類和方法不進行混淆。
解決方案
在proguard-project.txt中添加如下(引用的是百度baidumapapi_v3_1_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.**{*;}