android專案以它的包名作為唯一標識,如果在同一裝置上安裝兩個相同的應用,後面安裝的應用就會覆蓋前面安裝的應用。為了避免這種情況的發生,我們需要對作為產品發布的應用進行簽名。
簽名其實有兩個作用:
(1) 確定發布者的身份。防止別人用相同包名來替換你已安裝的程式。
(2) 確保應用的完整性。簽名會對應用包中的每個檔案進行處理,以確保程式包中的檔案不會被替換。
在應用的開發和除錯階段,eclipse的adt外掛程式或ant工具會自動生成除錯證書,對android應用簽名。但是,如果要正式發布乙個android應用的話,就必須使用合適的數字證書來給應用程式簽名,不能使用adt外掛程式或ant工具生成的除錯證書來發布。
這有又兩種方式對android應用簽名:
1.在eclipse中對android應用簽名
(2) 如果系統還沒有數字證書,可以選擇"create new keystore",按如圖格式填寫數字證書的儲存路徑和密碼。
(3) 填寫數字證書的詳細資訊。
(4)指定生成簽名後的apk安裝包的儲存路徑。
簽名證書製作完後,以後就可以直接使用該數字證書簽名了。
(1)選擇前面建立的keystore,輸入建立keystore時的指定密碼。
(2)選擇前面建立時的別名yq的key,並輸入建立該key時指定的密碼,生成簽名後的apk包。
2.使用命令對apk包簽名
在某些場合下, 我們可能需要對乙個「未簽名」的apk包進行簽名,則可通過「命令」來對android應用進行手動簽名。
(1) 建立keystore庫。jdk的安裝目錄下的bin子目錄下提供了keytool.exe來生成數字證書。
在命令視窗輸入:
keytool -genkeypair -alias yqkey.keystore -keyalg rsa -validity 100 -keystore yqkey.keystore
說明:-genkeypair:指定生成數字證書。
-alias:指定生成數字證書的別名。
-keyalg:指定生成數字證書的演算法。使用rsa演算法。
-validity:指定生成的數字證書的有效期。
-keystore:指定所生成的數字證書的儲存路徑。
回車後,接下來將會以互動的方式讓我們輸入數字證書keystore的密碼、作者、公司等詳細資訊。
該步驟只要做一次即可,一旦數字證書建立成功後,只要在該證書的有效期內,可以移植重複使用該證書。
(3) 使用jarsigner命令對未簽名的apk安裝包進行簽名。jdk的安裝目錄下的bin子目錄下提供了jarsigner.exe工具進行簽名。在命令視窗輸入:
jarsigner -verbose -keystore crazyit.keystore -signedjar demo_yqkey.apk demo.apk yqkey.keystore
說明:-verbose:指定生成詳細輸出。
-keystore:指定數字證書的儲存路徑。
-signedjar:該選項的三個引數分別分簽名的apk包、未簽名的apk包、數字證書別名。
回車後,接下來將會以互動的方式讓我們輸入數字證書keystore的密碼。
(4) 使用zipalign.exe工具優化apk安裝包。zipalign.exe是android自帶的乙個檔案整理工具,它可用於優化apk安裝包,從而提公升android應用與系統之間的互動效率,提公升應用程式的執行速度。在命令列視窗輸入:
zipalign -f -v 4 demo_yqkey.apk
demo_yqkey_zip.apk
說明:-f:指定強制覆蓋已有檔案。
-v:指定生成詳細輸出。
demo_yqkey.apk和demo_yqkey_zip.apk,分別制定整理前的apk和整理後生成的apk。
生成的demo_yqkey_zip.apk檔案,就是簽名完成且經過優化的apk安裝包,該安裝包可以對外發布了。
android apk簽名原理
public signature getpackagesignature return null public void getsinginfo catch exception e private void parsesignature byte signature catch certificat...
android apk打包簽名機制
最近在進行做應用公升級時簽名衝突方面的問題,突然覺的有必要將apk簽名的機制,簡單整理一下,對於所有的android應用開發者應該都明白,在生產apk檔案時,都必須對該檔案進行簽名,而所謂的簽名其實也就是通過一種加密演算法,來實現資料保護。如何針對乙個apk檔案進行簽名 1 首先你要生成一對公私鑰 ...
Android apk重新簽名打包
執行以下步驟前很重要的一步驟 刪除要重新簽名的apk檔案裡的meta inf資料夾 jarsigner verbose keystore c users future desktop test your key name.keystore storepass key的密碼 keypass key的密...