之前,我也不是太清楚,為什麼開發好的android程式,要對其apk檔案進行數位簽章,只是略為知道一點:為了維護自己的著作權,更加合法吧,防止別人侵權。不過現在,我覺得,不光是這樣,下面我來談談自己的看法。
其實,Android平台需要每個。apk包(每個應用程式封存檔案)上都有數位簽章。如果沒有數位簽章,則不允許相應的.apk運行。說到這裡,大家也許會有疑問,我在使用SDK進行開發應用程式的時候,就沒有進行簽名啊,其實不是這樣的。
開發過或學習過google map應用程式的人都知道debug.keystore這個檔案(該檔案預設位於使用者主目錄的.android子目錄中)。當我們在eclipse中編寫好自己的程式,啟動並執行時候,處在偵錯模式中。在偵錯模式中,SDK會使用儲存在debug.keystore檔案中的自簽名調試密鑰自動對你的應用的程式進行數位簽章(由於這個簽名,系統已經幫我們自動設定好了,所以我們才感覺到,我們的程式沒有進行簽名,也可以運行)。
由於調試密鑰和密鑰庫都自動設定好,因此我們在使用SDK進行開發Android應用程式的時候,無需擔心數位簽章。但如果要離開偵錯模式並在adb外部運行呢,這就不行了,這是,就需要我們通過手動設定,來進行簽名。
具體操作如下,需要用到Keytool命令 和 Jarsinger工具。(當然這一切的前提是,你必須安裝好了JDK,然後在DOS下進行操作)
1.使用 Keytool命令建立自簽名私人密鑰的樣本如下:(這隻是一個例子,可以根據你的情況進行修改)
C:/Program Files/Java/jdk1.6.0_10/bin>keytool -genkey -v -keystore key.keystore -alias my_key -keyalg RSA
-validity 10000
" C:/Program Files/Java/jdk1.6.0_10/bin"這是我JDK所儲存的路徑。該命令以詳細模式(-v)產生一個密鑰(-genkey),它使用key.keystore.keystore庫檔案和別名my_key,同時採用RSA密碼編譯演算法並將有效期間設為10000天。輸入這行命令,一步步的進行操作就可以了。
2.建立一個私人密鑰後,就可以使用Jarsigner簽名應用程式檔案。在使用該工具之前,需要將項目未簽名的.apk封存檔案匯出。使用Eclipse/ADT環境匯出項目的步驟:在項目上,單擊滑鼠右鍵,選擇Android Tools——>Export Unsigned Application Package選項,匯出來就可以了。
具體操作如下:
jarsigner -verbose -keystore key.keystore -signedjar android123_signed.apk android123.apk my_key(這一步是和第一步緊密相連的,第一步操作完成後才可以執行這個操作)
3.最後驗證是否簽名成功,如下所示:
C:/Program Files/Java/jdk1.6.0_10/bin>jarsigner -verify android123.apk
如果成功,則會顯示:
jar 已驗證