Android要求對每一個應用程式進行數位簽章才能使用,簽名中包括密鑰、建立人、建立單位等等資訊,儲存在一個keystore中。而google map需要為每一個註冊應用提供地圖服務,應用程式開發人員需要將keystore的指紋傳輸為google來擷取api key,以後每次申請地圖服務的時候,將api key作為參數傳輸給google。google可以根據從用戶端傳說過來的api key來獲知是那個應用程式的需求,以及改應用是否註冊過。
Android中的google map採用控制項MapView來實現,其在xml檔案中的定義,如下所示:
[plain] view
plaincopy
-
[html] view
plaincopy
- <com.google.android.maps.MapView
- android:id="@+id/mapview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clickable="true"
- android:apiKey="0h91BCbpMd7oYa_1VUn_TL0YGqQuPNkTt_EjFOw" />
其中androdi:apiKey就是我們利用keystore檔案的指紋從google擷取的。
1. debug key
作為一個Android開發人員,一般需要兩個apiKey:debug key和release key。所謂debug key是在程式開發過程中使用,由於android程式需要數位簽章才能使用,而在開發過程中,每次運行程式都需要應用程式未免太過麻煩。所以在開發過程中,系統會自動使用debug.keystore對程式進行簽名,debug.keystrore在不同系統中的位置不同,在windows server 2003中位於C:\Documents and Settings\<Username>\.Android下面。
為了擷取debug.keystore的指紋,我們需要用到下面命令:
[html] view
plaincopy
- $ keytool -list -alias androiddebugkey -keystore <path_to_debug_keystore>.keystore -storepass android -keypass android
如果成功會輸出該keystore的正確指紋,格式如下:
[html] view
plaincopy
- 14:5E:B2:3A:3F:DE:50:61:07:2F:39:34:DB:38:57:DD
開啟網頁
http://code.google.com/android/maps-api-signup.html
勾選同意協議複選框,然後拷貝上面獲得的指紋,就可以得到apiKey,如下所示:
將密鑰拷貝到xml檔案中的MapView下面,google map就可以正常使用了。
2. release key
對於release key的申請方法和debug key一樣,不同的是release keystrore不再是debug.keystore檔案,而是需要自己產生。命令如下:
[html] view
plaincopy
- $ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
利用自己產生的keystore來申請api key,然後寫到MapView中。
另外,系統也不應該自動使用debug.keystore來簽名應用,而需要開發人員手動簽名。首先需要將項目以未簽名的方式匯出,右鍵項目-> Android Tools->Export Unsigned Application Package,如:
使用自己產生的keystore檔案來簽名應用:
[html] view
plaincopy
- $ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
apk簽名是原地簽名,它會直接覆蓋掉原來的apk,驗證是否簽名成功:
[html] view
plaincopy
- $ jarsigner -verify my_signed.apk
最後需要壓縮apk:
[html] view
plaincopy
- $ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
參考資料:
http://developer.android.com/tools/publishing/app-signing.html
https://developers.google.com/maps/documentation/android/mapkey#registering
轉載:http://blog.csdn.net/lrenjun/article/details/7717958