Android - 百度地圖打包混淆代碼後地圖崩潰的解決方案

來源:互聯網
上載者:User

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.**{*;}

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.