問題背景
申請 Google Maps API Key 時需提供簽名憑證指紋。JDK 1.7+ keytool 預設顯示 SHA1,舊版文檔要求 MD5,導致開發者困惑。
指令差異
# JDK 1.7+ 預設輸出 SHA1
keytool -list -alias androiddebugkey -keystore ~/.android/debug.keystore
# 輸出範例: SHA1: AA:BB:CC:DD:EE:FF...
# 強制輸出 MD5 (舊版 Maps API v1 需求)
keytool -v -list -alias androiddebugkey -keystore ~/.android/debug.keystore
# 輸出包含: MD5: 11:22:33:44:55:66...
關鍵參數說明
| 參數 | 作用 |
-v | 詳細模式,顯示所有指紋演算法 (MD5, SHA1, SHA256) |
-list | 列出金鑰庫條目 |
-alias | 指定別名 (預設 debug 金鑰為 androiddebugkey) |
-keystore | 指定金鑰庫路徑 |
現代 Google Maps SDK (v2/v3) 要求
- SHA1 指紋:目前 Google Maps Android SDK、Places SDK 皆使用 SHA1
- 套件名稱 + SHA1:在 Google Cloud Console 設定「Android 應用程式限制」時輸入
- 無需 MD5:Maps API v1 已於 2013 年停用,MD5 僅供歷史參考
完整獲取流程
- 開啟終端機/命令提示字元
- 執行:
keytool -v -list -keystore ~/.android/debug.keystore
- 輸入密碼:
android (debug 金鑰預設密碼)
- 複製 SHA1 行的十六進位字串 (冒號分隔)
- 至 Google Cloud Console → APIs & Services → Credentials → 建立/編輯 API Key → 應用程式限制 → Android 應用程式 → 新增套件名稱與 SHA1
Release 版本金鑰指紋
# 正式發布金鑰 (keystore 路徑、別名、密碼均為自訂)
keytool -v -list -keystore /path/to/release.keystore -alias your_alias
# 輸入 keystore 密碼與 key 密碼
# 複製 SHA1 至 Console 設定 (同一 API Key 可加多個 SHA1)
常見問題
| 現象 | 原因 | 解決 |
| 地圖顯示空白 | SHA1/套件名稱不匹配 | 核對 Console 設定與 keytool 輸出 |
| Authorization failure | API Key 未啟用 Maps SDK | Console 啟用 "Maps SDK for Android" |
| Debug 正常 Release 失效 | 未加入 Release SHA1 | 同一 Key 加入兩組 SHA1 |