Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android - 百度地圖打包混淆代碼後地圖崩潰的解決方法

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

編輯:關於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.**{*;}

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved