APP 加固/加密前百度地圖定位正常,加固後**重新簽名**發布,定位功能失效(無法獲取經緯度、定位圖標閃爍不定位)。
百度地圖 SDK 鑑權綁定「包名 + 簽名 SHA1 指紋」。
加固工具重新簽名會**改變 APK 的簽名證書**,導致 SHA1 指紋變更,與百度雲控制台配置的 SHA1 不一致,SDK 鑑權失敗,定位服務拒絕響應。
加固工具通常會輸出一個 .jks 或 .keystore 文件(如 signed.jks)。使用 JDK keytool 導出:
keytool -v -list -keystore signed.jks
# 輸入 keystore 密碼
# 輸出中找到 "SHA1:" 開頭的指紋,如:
# SHA1: 1A:2B:3C:4D:5E:6F:7A:8B:9C:0D:1E:2F:3A:4B:5C:6D:7E:8F:9A
若加固工具未直接給出 keystore,可從加固後 APK 提取:
# 1. 解壓 APK 獲取 META-INF/CERT.RSA
# 2. keytool -printcert -file CERT.RSA
為了同時支持**開發調試包(未加固簽名)**與**發布包(加固簽名)**,建議在百度控制台:
com.example.app + **開發機簽名 SHA1** (debug.keystore)com.example.app + **加固後簽名 SHA1** (signed.jks)String apiKey = BuildConfig.IS_RELEASE ? "RELEASE_AK" : "DEBUG_AK";
SDKInitializer.initialize(this, apiKey); // 或在 Manifest 中配置 meta-data
| 誤區 | 真相 |
|---|---|
| 以為加固不改變簽名 | 主流加固(360、騰訊樂固、愛加密等)均會重簽名,SHA1 必變 |
| 只更新一個 SHA1 | 會導致開發包或發布包其中一方定位失效,需雙 SHA1 並存 |
| 以為包名變了 | 包名通常不變,鑑權核心是「包名+SHA1」組合 |
| 忽略 keytool 密碼 | 加固平台通常提供 keystore 密碼,需妥善保存 |
BaiduMap 或 loc,確認無 auth failed、error code: 161 等鑑權錯誤。**APK 加固重簽名 → SHA1 變更 → 百度鑑權失敗 → 定位失效。** 解決核心:**提取新簽名 SHA1 → 百度控制台添加/更新 → 雙環境雙 SHA1 並存配置。** 此原理同樣適用于高德地圖、騰訊地圖、微信分享、支付 SDK 等所有綁定簽名指紋的第三方服務。