Android應用程式簽名

2021-05-27 08:17:45 字數 3031 閱讀 7359

android系統要求所有的程式經過數字簽名才能安裝,如果沒有可用的數字簽名,系統將不許安裝執行此程式,不管是模擬器還是真實手機。因此,在裝置或者是模擬器上執行除錯程式之前,必須為應用程式設定數字簽名。android

系統僅僅會在安裝的時候測試簽名證書的有效期,如果應用程式的簽名是在安裝之後才到期,那麼應用程式仍然可以正常啟用。         

android通過數字簽名來標識應用程式的作者和在應用程式之間建立信任關係,不是用來決定使用者可不可以安裝該應用程式。android的這個簽名由應用程式的作者完成,並不需要權威的數字證書簽名機構認證,他只是用來讓應用程式包自我認證的。android系統預設自動給應用程式簽名,adt會自動使用debug金鑰為應用程式簽名,debug金鑰是乙個名為debug.keystore的檔案,位置位於電腦的:

/documents and settings/liuhua/.android/debug.keystore,其中的liuhua是電腦的使用者名稱。

下面介紹手動簽名:

1. apk的簽名工作可以通過兩種方式來完成:

1)通過adt提供的圖形化介面完成apk簽名;

2)完全通過dos命令來完成apk簽名

給apk簽名一共要用到3個工具(3個命令),分別是:keytool、jarsigner和zipalign

1)keytool:生成數字證書,即金鑰,也就是上面說到的擴充套件名為.keystore的那類檔案;

2)jarsigner:使用數字證書給apk檔案簽名;

3)zipalign:對簽名後的apk進行優化,提高與android系統互動的效率(android sdk1.6版本開始包含此工具)

通常你開發的所有應用程式,都是使用同樣的簽名,即使用同乙個數字證書。如果你是第一次做android應用程式簽名,上面的3個工具都將用到;但如果你已經有數字證書了,以後再給其它apk簽名時,只需要用到jarsigner和zipalign就可以完成。另外,keytool和jarsigner兩個工具是jdk自帶的,也就意味著生成數字證書和檔案簽名不是android的專利;另外從字面上理解jarsigner也能猜得出該工具主要是用來給jar檔案簽名的。

3個工具預設所在的路徑:

1)keytool:該工具位於jdk安裝路徑的bin目錄下;

2)jarsigner:該工具位於jdk安裝路徑的bin目錄下;

3)zipalign:該工具位於android-sdk-windows/tools/目錄下        

3. 使用keytool工具生成數字證書

keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg rsa -validity 20000

說明:1)keytool是工具名稱,-genkey意味著執行的是生成數字證書操作,-v表示將生成證書的詳細資訊列印出來,顯示在dos視窗中;

2)-keystore liufeng.keystore 表示生成的數字證書的檔名為「liufeng.keystore」;

3)-alias liufeng.keystore 表示證書的別名為「liufeng.keystore」,當然可以不和上面的檔名一樣;

4)-keyalg rsa 表示生成金鑰檔案所採用的演算法為rsa;

5)-validity 20000 表示該數字證書的有效期為20000天,意味著20000天之後該證書將失效

4.  使用jarsigner工具為android應用程式簽名

jarsigner -verbose -keystore liufeng.keystore -signedjar notepad_signed.apk notepad.apk liufeng.keystore

說明:1)jarsigner是工具名稱,-verbose表示將簽名過程中的詳細資訊列印出來,顯示在dos視窗中;

2)-keystore liufeng.keystore 表示簽名所使用的數字證書所在位置,這裡沒有寫路徑,表示在當前目錄下;

3)-signedjar notepad_signed.apk notepad.apk 表示給notepad.apk檔案簽名,簽名後的檔名稱為notepad_signed.apk;

4)最後面的liufeng.keystore 表示證書的別名,對應於生成數字證書時-alias引數後面的名稱

5.  使用zipalign工具優化已簽名的apk(非必須但建議這麼做)

zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk

說明:1)zipalign是工具名稱,-v表示在dos視窗列印出詳細的優化資訊;

2)notepad_signed.apk notepad_signed_aligned.apk 表示對已簽名檔案notepad_signed.apk進行優化,優化後的檔名為   notepad_signed_aligned.apk

如果你以前的程式是採用預設簽名的方式(debug簽名),一旦換了新的簽名應用將不能覆蓋安裝,必須將原先的程式解除安裝掉,才能安裝上。

因為程式覆蓋安裝主要檢查兩點:

1)兩個程式的入口activity是否相同。兩個程式如果包名不一樣,即使其它所有**完全一樣,也不會被視為同乙個程式的不同版本;

2)兩個程式所採用的簽名是否相同。如果兩個程式所採用的簽名不同,即使包名相同,也不會被視為同乙個程式的不同版本,不能覆蓋安裝。

另外,可能有人可能會認為反正debug簽名的應用程式也能安裝使用,那也沒有必要自己簽名了嘛。千萬不要這樣想,debug簽名的應用程式有這樣兩個限制,或者說風險:

1)debug簽名的應用程式不能在android market上架銷售,它會強制你使用自己的簽名;

2)debug.keystore在不同的機器上所生成的可能都不一樣,就意味著如果你換了機器進行apk版本公升級,那麼將會出現上面那種程式不能覆蓋安裝的問題。不要小視這個問題,如果你開發的程式只有你自己使用,當然無所謂,解除安裝再安裝就可以了。但要是你的軟體有很多使用客戶,這就是大問題了,就相當於軟體不具備公升級功能!

簽名完成以後最好再把這個檔案壓縮一下,使用android sdk安裝路徑下tools資料夾裡的zipalign進行壓縮,以剛才這個檔案為例,也可以寫成乙個bat檔案,示例如下:

Android 應用程式簽名

android應用程式簽名相關的理論知識包括 什麼是簽名 為什麼要給應用程式簽名 如何給應用程式簽名等。1 什麼是簽名?如果這個問題不是放在android開發中來問,如果是放在乙個普通的版塊,我想大家都知道簽名的含義。可往往就是將一些生活中常用的術語放在計算機這種專業領域,大家就開始迷惑了。計算機所...

Android應用程式簽名詳解

1 什麼是簽名?如果這個問題不是放在android開發中來問,如果是放在乙個普通的版塊,我想大家都知道簽名的含義。可往往就是將一些生活中常用的術語放在計算機這種 專業領域,大家就開始迷惑了。計算機所做的事情,或者說程式語言所做的事情,不正是在盡可能地模擬現實嗎?所以,計算機中所說的簽名和生活中所說的...

Android應用程式簽名詳解

本文主要講解android應用程式簽名相關的理論知識,包括 什麼是簽名 為什麼要給應用程式簽名 如何給應用程式簽名等。1 什麼是簽名?如果這個問題不是放在android開發中來問,如果是放在乙個普通的版塊,我想大家都知道簽名的含義。可往往就是將一些生活中常用的術語放在計算機這種專業領域,大家就開始迷...