1.首先先科普一下,android為什么需要給安裝包簽名:
所有的Android應用程序在發布之前都要求開發人員用一個證書進行數字簽名,anroid系統不會安裝沒有進行簽名的由於程序。
平時我們的程序可以在模擬器上安裝並運行,是因為在應用程序開發期間,由於是以Debug面試進行編譯的,因此ADT根據會自動用默認的密鑰和證書來進行簽名,而在以發布模式編譯時,apk文件就不會得到自動簽名,這樣就需要進行手工簽名。
給apk簽名可以帶來以下好處:
1. 應用程序升級:如果你希望用戶無縫升級到新的版本,那么你必須用同一個證書進行簽名。這是由於只有以同一個證書簽名,系統才會允許安裝升級的應用程序。如果你采用了不同的證書,那么系統會要求你的應用程序采用不同的包名稱,在這種情況下相當於安裝了一個全新的應用程序。如果想升級應用程序,簽名證書要相同,包名稱要相同!
2.應用程序模塊化:Android系統可以允許同一個證書簽名的多個應用程序在一個進程里運行,系統實際把他們作為一個單個的應用程序,此時就可以把我們的應用程序以模塊的方式進行部署,而用戶可以獨立的升級其中的一個模塊
3.代碼或者數據共享:Android提供了基於簽名的權限機制,那么一個應用程序就可以為另一個以相同證書簽名的應用程序公開自己的功能。以同一個證書對多個應用程序進行簽名,利用基於簽名的權限檢查,你就可以在應用程序間以安全的方式共享代碼和數據了。
-----------------------------------------------------------------------------------
2.什么是重簽名,什么情況下需要重簽名?如何重簽名?
所謂重簽名,就是替換掉安裝包之前的證書ID以及簽名信息,然后重新生成一個新的證書和簽名。一般在自動化測試或者想更換安裝包內的資源的時候就顯得尤為必要。
重簽名的方法:
方法一:
1.將apk包改名為.zip 結尾。打開后刪除META-INF 文件夾。然后將后綴改回.apk。
2.將新的證書(debug.keystore)復制到與需要重新簽名的apk文件相同的目錄下(如:復制到D:\Sign);
3.打開終端,或命令行,進入D:\Sign目錄,運行下面的命令
jarsigner -verbose -keystore debug.keystore -storepass android -signedjar PhoneBook_signed.apk -digestalg SHA1 -sigalg MD5withRSA PhoneBook.apk androiddebugkey /*解釋:-jarsigner是Java的簽名工具-verbose參數表示:顯示出簽名詳細信息-keystore表示使用當前目錄中的debug.keystore簽名證書文件-storepass android表示Keystore密碼:“android”-signedjar PhoneBook_signed.apk表示簽名后生成的APK名稱PhoneBook.apk表示未簽名的APK Android軟件-digestalg SHA1 -sigalg MD5withRSA:這就是必須加上的參數,如果你是jdk 1.6也不受影響-androiddebugkey表示Key別名。
方法二:使用第三方重簽名工具。這里不再贅述。
-------------------------------------
3.如何查看安裝包簽名信息?
命令行或終端執行 jarsigner -verify -verbose -certs xxx.apk 點擊回車即可。