Android簽名知識小結(jié)
一、為什么要簽名
開發(fā)Android的人這么多,完全有可能大家都把類名,包名起成了一個同樣的名字,這時候如何區(qū)分?簽名這時候就是起區(qū)分作用的。
由于開發(fā)商可能通過使用相同的Package Name來混淆替換已經(jīng)安裝的程序,簽名可以保證相當名字,但是簽名不同的包不被替換。
APK如果使用一個key簽名,發(fā)布時另一個key簽名的文件將無法安裝或覆蓋老的版本,這樣可以防止你已安裝的應用被惡意的第三方覆蓋或替換掉。
這樣簽名其實也是開發(fā)者的身份標識。交易中抵賴等事情發(fā)生時,簽名可以防止抵賴的發(fā)生。
二、簽名的注意事項
Android系統(tǒng)要求所有的程序經(jīng)過數(shù)字簽名才能安裝,如果沒有可用的數(shù)字簽名,系統(tǒng)將不許安裝運行此程序。不管是模擬器還是真實手機。因此,在設備或者是模擬器上運行調(diào)試程序之前,必須為應用程序設置數(shù)字簽名。
Android簽名的數(shù)字證書不需要權(quán)威機構(gòu)來認證,是開發(fā)者自己產(chǎn)生的數(shù)字證書,即所謂的自簽名。數(shù)字證書用來標識應用程序的作者和在應用程序之間建立信任關(guān)系,而不是用來決定最終用戶可以安裝哪些應用程序。
系統(tǒng)僅僅會在安裝的時候測試簽名證書的有效期,如果應用程序的簽名是在安裝之后才到期,那么應用程序仍然可以正常啟用。
可以使用標準工具-Keytool and Jarsigner-生成密鑰,來簽名應用程序的.apk文件。
簽名后需使用zipalign優(yōu)化程序。
模擬器開發(fā)環(huán)境,開發(fā)時通過ADB接口上傳的程序會先自動被簽有Debug權(quán)限,然后才傳遞到模擬器。Eclipse菜單的Window -> Preferences -> Android –> Build 下顯示的是我們默認的調(diào)試用的簽名數(shù)字證書。
正式發(fā)布一個Android應用時,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名,不能使用ADT插件或者ANT工具生成的調(diào)試證書來發(fā)布。
不止一次有用到Android簽名相關(guān)的知識,每次都幾乎從零開始在Google上搜索找,不想在繼續(xù)這樣了,找了個時間好好整理了一下自己用到的一些碎片知識,于是乎放到這里,一是備忘,二是幫助別人。
從APK文件中獲取簽名信息
使用方法
keytool -list -printcert -jarfile your_apk_file
輸出信息
簽名Owner,Issuer等信息
簽名的fingerprints,如md5及sha1等值
簽名有效期等信息
示例效果
16:29 $ keytool -list -printcert -jarfile akoi_1.2.apk
Signer #1:
Signature:
Owner: CN=Andrew Wallace, OU=droidyue.com, O=droidyue.com, L=Beijing, ST=Beijing, C=86 Issuer: CN=Andrew Wallace, OU=droidyue.com, O=droidyue.com, L=Beijing, ST=Beijing, C=86 Serial number: 11a8a4a3 Valid from: Tue Feb 10 18:07:43 CST 2015 until: Sun Jun 13 18:07:43 CST 3013 Certificate fingerprints: MD5: 46:C5:BE:EF:B5:C9:00:E1:FA:42:50:50:57:54:CA:15 SHA1: C1:14:5D:0A:C2:BF:F6:06:43:20:AE:2C:07:12:97:58:C2:1B:39:D1 SHA256: 0E:88:7D:C2:4C:D6:84:A7:58:D4:24:1E:9D:38:F9:05:98:1E:B2:A2:D7:CB:0F:81:74:60:5B:38:89:FF:21:1C Signature algorithm name: SHA256withRSA Version: 3
從簽名文件中獲取簽名信息
使用方法
keytool -list -v -keystore your_kestore_file
注意,上述命令執(zhí)行后,會提示輸入密碼,其實輸入錯誤也沒有關(guān)系,不影響結(jié)果。
輸出信息
簽名Owner,Issuer等信息
簽名的fingerprints,如md5及sha1等值
簽名有效期等信息
示例效果
Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry Alias name: droidyue.com Creation date: Feb 10, 2015 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: CN=Andrew Wallace, OU=droidyue.com, O=droidyue.com, L=Beijing, ST=Beijing, C=86 Issuer: CN=Andrew Wallace, OU=droidyue.com, O=droidyue.com, L=Beijing, ST=Beijing, C=86 Serial number: 11a8a4a3 Valid from: Tue Feb 10 18:07:43 CST 2015 until: Sun Jun 13 18:07:43 CST 3013 Certificate fingerprints: MD5: 46:C5:BE:EF:B5:C9:00:E1:FA:42:50:50:57:54:CA:15 SHA1: C1:14:5D:0A:C2:BF:F6:06:43:20:AE:2C:07:12:97:58:C2:1B:39:D1 SHA256: 0E:88:7D:C2:4C:D6:84:A7:58:D4:24:1E:9D:38:F9:05:98:1E:B2:A2:D7:CB:0F:81:74:60:5B:38:89:FF:21:1C Signature algorithm name: SHA256withRSA Version: 3
重新簽名APK
在沒有源碼情況下,我們就能對apk進行更換簽名。
腳本
signapk.sh
備用地址
使用方法
bash signapk.sh your_apk_file your_keystore_file keystore_pass keystore_alias
示例效果
16:57 $ bash signapk.sh weixin6313android740.apk ~/Documents/baidu_disk/百度云同步盤/droidapp/mykiki 123456 droidyue.com param1 weixin6313android740.apk param2 /Users/androidyue/Documents/droidapp/mykiki param3 123456 param4 droidyue.com deleting: META-INF/MANIFEST.MF deleting: META-INF/DROIDYUE.SF deleting: META-INF/DROIDYUE.RSA adding: META-INF/MANIFEST.MF adding: META-INF/DROIDYUE.SF adding: META-INF/DROIDYUE.RSA ...... Verification succesful
生成的文件會放在當前目錄,其文件名相對輸入文件,增加了signed_前綴,比如對weixin6313android740.apk進行上述操作得到的輸出文件是signed_weixin6313android740.apk
Gradle build生成簽名APK
想要在執(zhí)行g(shù)radle build時生成指定簽名的apk,需要在build.gradle中如下修改
android { signingConfigs { release { storeFile file("myrelease.keystore") storePassword "********" keyAlias "******" keyPassword "******" } } buildTypes { release { signingConfig signingConfigs.release } } }
以上所述是小編給大家介紹的Android簽名知識小結(jié),希望對大家有所幫助!
相關(guān)文章
Android實用圖文教程之代碼混淆、第三方平臺加固加密、渠道分發(fā)
這篇文章主要介紹了Android實用圖文教程之代碼混淆、第三方平臺加固加密、渠道分發(fā),需要的朋友可以參考下2014-12-12Android編程使用GestureDetector實現(xiàn)簡單手勢監(jiān)聽與處理的方法
這篇文章主要介紹了Android編程使用GestureDetector實現(xiàn)簡單手勢監(jiān)聽與處理的方法,簡單講述了Android手勢監(jiān)聽的原理并結(jié)合實例形式分析了GestureDetector實現(xiàn)手勢監(jiān)聽與處理的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09