1.首先先科普一下,android爲何須要給安裝包簽名:android
全部的Android應用程序在發佈以前都要求開發人員用一個證書進行數字簽名,anroid系統不會安裝沒有進行簽名的因爲程序。
平時咱們的程序能夠在模擬器上安裝並運行,是由於在應用程序開發期間,因爲是以Debug面試進行編譯的,所以ADT根據會自動用默認的密鑰和證書來進行簽名,而在以發佈模式編譯時,apk文件就不會獲得自動簽名,這樣就須要進行手工簽名。面試
給apk簽名能夠帶來如下好處:
1. 應用程序升級:若是你但願用戶無縫升級到新的版本,那麼你必須用同一個證書進行簽名。這是因爲只有以同一個證書籤名,系統纔會容許安裝升級的應用程序。若是你採用了不一樣的證書,那麼系統會要求你的應用程序採用不一樣的包名稱,在這種狀況下至關於安裝了一個全新的應用程序。若是想升級應用程序,簽名證書要相同,包名稱要相同!
2.應用程序模塊化:Android系統能夠容許同一個證書籤名的多個應用程序在一個進程裏運行,系統實際把他們做爲一個單個的應用程序,此時就能夠把咱們的應用程序以模塊的方式進行部署,而用戶能夠獨立的升級其中的一個模塊
3.代碼或者數據共享:Android提供了基於簽名的權限機制,那麼一個應用程序就能夠爲另外一個以相同證書籤名的應用程序公開本身的功能。以同一個證書對多個應用程序進行簽名,利用基於簽名的權限檢查,你就能夠在應用程序間以安全的方式共享代碼和數據了。安全
-----------------------------------------------------------------------------------模塊化
2.什麼是重簽名,什麼狀況下須要重簽名?如何重簽名?工具
所謂重簽名,就是替換掉安裝包以前的證書ID以及簽名信息,而後從新生成一個新的證書和簽名。通常在自動化測試或者想更換安裝包內的資源的時候就顯得尤其必要。
測試
重簽名的方法:
方法一:命令行
1.將apk包更名爲.zip 結尾。打開後刪除META-INF 文件夾。而後將後綴改回.apk。debug
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別名。ip
方法二:使用第三方重簽名工具。這裏再也不贅述。
-------------------------------------
3.如何查看安裝包簽名信息?
命令行或終端執行 jarsigner -verify -verbose -certs xxx.apk 點擊回車便可。