一、什麼是Android簽名
開發Android的人這麼多,完全有可能大家都把類名,包名起成了一個同樣的名字,這時候如何區分?簽名這時候就是起區分作用的。
由於開發商可能通過使用相同的Package Name來混淆替換已經安裝的程序,簽名可以保證相同名字,但是簽名不同的包不被替換。APK如果使用一個key簽名,發佈時另一個key簽名的文件將無法安裝或覆蓋老的版本,這樣可以防止你已安裝的應用被惡意的第三方覆蓋或替換掉。這樣簽名其實也是開發者的身份標識。交易中抵賴等事情發生時,簽名可以防止抵賴的發生。
簡單的說:在Android 系統中,所有安裝到系統的應用程序都必有一個數字證書,Android簽名就是一個數字證書,此數字證書用於標識應用程序的作者和在應用程序之間建立信任關係,如果一個 permission的protectionLevel爲signature,那麼就只有那些跟該permission所在的程序擁有同一個數字證書的應用程序才能取得該權限。
二、如何區分android包是否簽名
在cmd中輸入以下命令:
jarsigner -verify -verbose-certs 路徑+包名
例如:
查看一個未簽名的apk:jarsigner -verify -verbose-certs F:\ ShellEnterSofte.apk
查看一個已簽名的apk:jarsigner -verify -verbose-certs E:\ test.apk
三、兩種簽名方式
1. 通過命令行簽名
命令:jarsigner –keystore ${keystore-file} –storepass ${storepass}
–keypass ${keypass} –signedjar
${out-signed-package-ospath} ${out-unsigned-package-ospath} ${alias}
其中:${keystore-file}:debug.keystore文件存放的位置,
如:F:\PcMonitorCenter1.0\assist\debug.keystore
${storepass}:keystore文件的密鑰
${keypass}:要使用的那個簽名的密鑰
${out-signed-package-ospath}:簽名後文件存放的位置
如:E:\test.apk
${out-unsigned-package-ospath}:未簽名文件存放的位置
如:F:\PcMonitorCenter1.0\ShellEnterSofte_unsigned.apk
${alias}:某個簽名的別名,如debug.keystore默認有一個alias爲androiddebugkey的簽名。
例如使用debug.keystore完整命令爲:
jarsigner –keystore F:\PcMonitorCenter1.0\assist\debug.keystore–storepass android –keypass android –signedjar
F:\signed.apk F:\unsigned.apk androiddebugkey
在相應路徑下(E:\ test.apk)即可找到簽名成功的APK文件。
2.通過Eclipse簽名
(1)打開Eclipse->選擇你要簽名的項目->右擊->android tools->Export signed Applicationpackage...
(2)跳出窗口
(3)project checks 如果核對項目名沒有問題的話 點擊 Next
然後跳出keystoreselection 如果是已經存在keystore的文件就選擇然後next 輸入keystore的密碼進行簽名。
如果沒有的話選擇create new keystore 然後選擇keystore 保存的位置,設置keystore的密碼,點擊Next。
(4)填寫keystore的基本信息,如,別名,密碼,有效期,姓名,組織,組織名稱,所在城市,所在省份,國家等,點擊Next
(5)選擇被簽名後的APK保存位置。點擊finish。
(6)6.就可以在你保存的位置中找到相應的被簽名後的APK文件。