您好,登錄后才能下訂單哦!
Android的數字簽名是保證在同一個Android系統中,相同包名不同簽名的apk無法覆蓋安裝。
這么做的目的,是為了證明開發者的身份和防止抵賴。
假設有用戶先裝了一個正版App,而后下載了一個相同包名的盜版App,如果可以覆蓋安裝,則不能使用戶得知這是個盜版(或者說與原來App不同)的App。
還有就是這個App若有什么后門病毒之類的,持有數字簽名的人就無法抵賴。
創建Android數字簽名的方式如下:
(1)在項目上右鍵,選擇Android Tools——>Export Signed Application Package
(2)自動填入工程名,不允許修改和含有中文,需要修改的地方在上一步操作前先修改
(3)輸入第一重密碼,若之前有了,最好拿之前的,這里我新建了一個,新建時要指定簽名文件的導出位置
(4)輸入信息(別名,第二重密碼等)第二重密碼最好與第一重不相同
有效期選項,谷歌官方建議是到2033年以后,但少于亦可
(5)設置導出APK的位置
(6)至此,大功告成。下面測試下,拿導出的簽名后的APK和bin目錄里的APK做個實驗
這個是拿bin目錄中的APK文件安裝到模擬器
直接安裝,告訴我們系統中已經存在這個apk了
重新安裝,顯示成功。
(7)使用導出的已簽名的APK
直接安裝,還是顯示已經存在
從新安裝,顯示解析失敗,證書矛盾
這樣就驗證了之前提到的數字簽名的作用了。
以下內容摘自 http://www.cnblogs.com/feisky/archive/2010/01/17/1650076.html
在Android系統中,所有安裝到系統的應用程序都必有一個數字證書,此數字證書用于標識應用程序的作者和在應用程序之間建立信任關系,如果一個permission的protectionLevel為signature,那么就只有那些跟該permission所在的程序擁有同一個數字證書的應用程序才能取得該權限。Android使用Java的數字證書相關的機制來給apk加蓋數字證書,要理解android的數字證書,需要先了解以下數字證書的概念和java的數字證書機制。Android系統要求每一個安裝進系統的應用程序都是經過數字證書簽名的,數字證書的私鑰則保存在程序開發者的手中。Android將數字證書用來標識應用程序的作者和在應用程序之間建立信任關系,不是用來決定最終用戶可以安裝哪些應用程序。這個數字證書并不需要權威的數字證書簽名機構認證,它只是用來讓應用程序包自我認證的。
同一個開發者的多個程序盡可能使用同一個數字證書,這可以帶來以下好處。
(1)有利于程序升級,當新版程序和舊版程序的數字證書相同時,Android系統才會認為這兩個程序是同一個程序的不同版本。如果新版程序和舊版程序的數字證書不相同,則Android系統認為他們是不同的程序,并產生沖突,會要求新程序更改包名。
(Roadley:這點至關重要)
(2)有利于程序的模塊化設計和開發。Android系統允許擁有同一個數字簽名的程序運行在一個進程中,Android程序會將他們視為同一個程序。所以開發者可以將自己的程序分模塊開發,而用戶只需要在需要的時候下載適當的模塊。
(3)可以通過權限(permission)的方式在多個程序間共享數據和代碼。Android提供了基于數字證書的權限賦予機制,應用程序可以和其他的程序共享概功能或者數據給那那些與自己擁有相同數字證書的程序。如果某個權限(permission)的protectionLevel是signature,則這個權限就只能授予那些跟該權限所在的包擁有同一個數字證書的程序。
在簽名時,需要考慮數字證書的有效期:
(1)數字證書的有效期要包含程序的預計生命周期,一旦數字證書失效,持有改數字證書的程序將不能正常升級。
(2)如果多個程序使用同一個數字證書,則該數字證書的有效期要包含所有程序的預計生命周期。
(3)Android Market強制要求所有應用程序數字證書的有效期要持續到2033年10月22日以后。
(Roadley:應該是google play上面的應用程序需要又掀起到2033年以后,導出簽名包時并無限制,只有警告)
Android數字證書包含以下幾個要點:
(1)所有的應用程序都必須有數字證書,Android系統不會安裝一個沒有數字證書的應用程序
(Roadley:我們平時編程時可以直接運行在模擬器上是因為eclipse會自動幫我們簽名)
(2)Android程序包使用的數字證書可以是自簽名的,不需要一個權威的數字證書機構簽名認證
(3)如果要正式發布一個Android ,必須使用一個合適的私鑰生成的數字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調試證書來發布。
(Roadley:eclipse生成的私鑰并不是固定的,所以使用它來簽名并不保險)
(4)數字證書都是有有效期的,Android只是在應用程序安裝的時候才會檢查證書的有效期。如果程序已經安裝在系統中,即使證書過期也不會影響程序的正常功能。
(5)Android使用標準的java工具 Keytool and Jarsigner 來生成數字證書,并給應用程序包簽名。
(6)使用zipalign優化程序。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。