Android的數(shù)字簽名是保證在同一個(gè)Android系統(tǒng)中,相同包名不同簽名的apk無(wú)法覆蓋安裝。
我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、青岡ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的青岡網(wǎng)站制作公司
這么做的目的,是為了證明開(kāi)發(fā)者的身份和防止抵賴。
假設(shè)有用戶先裝了一個(gè)正版App,而后下載了一個(gè)相同包名的盜版App,如果可以覆蓋安裝,則不能使用戶得知這是個(gè)盜版(或者說(shuō)與原來(lái)App不同)的App。
還有就是這個(gè)App若有什么后門病毒之類的,持有數(shù)字簽名的人就無(wú)法抵賴。
創(chuàng)建Android數(shù)字簽名的方式如下:
(1)在項(xiàng)目上右鍵,選擇Android Tools——>Export Signed Application Package
(2)自動(dòng)填入工程名,不允許修改和含有中文,需要修改的地方在上一步操作前先修改
(3)輸入第一重密碼,若之前有了,最好拿之前的,這里我新建了一個(gè),新建時(shí)要指定簽名文件的導(dǎo)出位置
(4)輸入信息(別名,第二重密碼等)第二重密碼最好與第一重不相同
有效期選項(xiàng),谷歌官方建議是到2033年以后,但少于亦可
(5)設(shè)置導(dǎo)出APK的位置
(6)至此,大功告成。下面測(cè)試下,拿導(dǎo)出的簽名后的APK和bin目錄里的APK做個(gè)實(shí)驗(yàn)
這個(gè)是拿bin目錄中的APK文件安裝到模擬器
直接安裝,告訴我們系統(tǒng)中已經(jīng)存在這個(gè)apk了
重新安裝,顯示成功。
(7)使用導(dǎo)出的已簽名的APK
直接安裝,還是顯示已經(jīng)存在
從新安裝,顯示解析失敗,證書(shū)矛盾
這樣就驗(yàn)證了之前提到的數(shù)字簽名的作用了。
以下內(nèi)容摘自http://www.cnblogs.com/feisky/archive/2010/01/17/1650076.html
在Android系統(tǒng)中,所有安裝到系統(tǒng)的應(yīng)用程序都必有一個(gè)數(shù)字證書(shū),此數(shù)字證書(shū)用于標(biāo)識(shí)應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,如果一個(gè)permission的protectionLevel為signature,那么就只有那些跟該permission所在的程序擁有同一個(gè)數(shù)字證書(shū)的應(yīng)用程序才能取得該權(quán)限。Android使用Java的數(shù)字證書(shū)相關(guān)的機(jī)制來(lái)給apk加蓋數(shù)字證書(shū),要理解android的數(shù)字證書(shū),需要先了解以下數(shù)字證書(shū)的概念和java的數(shù)字證書(shū)機(jī)制。Android系統(tǒng)要求每一個(gè)安裝進(jìn)系統(tǒng)的應(yīng)用程序都是經(jīng)過(guò)數(shù)字證書(shū)簽名的,數(shù)字證書(shū)的私鑰則保存在程序開(kāi)發(fā)者的手中。Android將數(shù)字證書(shū)用來(lái)標(biāo)識(shí)應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,不是用來(lái)決定最終用戶可以安裝哪些應(yīng)用程序。這個(gè)數(shù)字證書(shū)并不需要權(quán)威的數(shù)字證書(shū)簽名機(jī)構(gòu)認(rèn)證,它只是用來(lái)讓應(yīng)用程序包自我認(rèn)證的。
同一個(gè)開(kāi)發(fā)者的多個(gè)程序盡可能使用同一個(gè)數(shù)字證書(shū),這可以帶來(lái)以下好處。
(1)有利于程序升級(jí),當(dāng)新版程序和舊版程序的數(shù)字證書(shū)相同時(shí),Android系統(tǒng)才會(huì)認(rèn)為這兩個(gè)程序是同一個(gè)程序的不同版本。如果新版程序和舊版程序的數(shù)字證書(shū)不相同,則Android系統(tǒng)認(rèn)為他們是不同的程序,并產(chǎn)生沖突,會(huì)要求新程序更改包名。
(Roadley:這點(diǎn)至關(guān)重要)
(2)有利于程序的模塊化設(shè)計(jì)和開(kāi)發(fā)。Android系統(tǒng)允許擁有同一個(gè)數(shù)字簽名的程序運(yùn)行在一個(gè)進(jìn)程中,Android程序會(huì)將他們視為同一個(gè)程序。所以開(kāi)發(fā)者可以將自己的程序分模塊開(kāi)發(fā),而用戶只需要在需要的時(shí)候下載適當(dāng)?shù)哪K。
(3)可以通過(guò)權(quán)限(permission)的方式在多個(gè)程序間共享數(shù)據(jù)和代碼。Android提供了基于數(shù)字證書(shū)的權(quán)限賦予機(jī)制,應(yīng)用程序可以和其他的程序共享概功能或者數(shù)據(jù)給那那些與自己擁有相同數(shù)字證書(shū)的程序。如果某個(gè)權(quán)限(permission)的protectionLevel是signature,則這個(gè)權(quán)限就只能授予那些跟該權(quán)限所在的包擁有同一個(gè)數(shù)字證書(shū)的程序。
在簽名時(shí),需要考慮數(shù)字證書(shū)的有效期:
(1)數(shù)字證書(shū)的有效期要包含程序的預(yù)計(jì)生命周期,一旦數(shù)字證書(shū)失效,持有改數(shù)字證書(shū)的程序?qū)⒉荒苷I?jí)。
(2)如果多個(gè)程序使用同一個(gè)數(shù)字證書(shū),則該數(shù)字證書(shū)的有效期要包含所有程序的預(yù)計(jì)生命周期。
(3)Android Market強(qiáng)制要求所有應(yīng)用程序數(shù)字證書(shū)的有效期要持續(xù)到2033年10月22日以后。
(Roadley:應(yīng)該是google play上面的應(yīng)用程序需要又掀起到2033年以后,導(dǎo)出簽名包時(shí)并無(wú)限制,只有警告)
Android數(shù)字證書(shū)包含以下幾個(gè)要點(diǎn):
(1)所有的應(yīng)用程序都必須有數(shù)字證書(shū),Android系統(tǒng)不會(huì)安裝一個(gè)沒(méi)有數(shù)字證書(shū)的應(yīng)用程序
(Roadley:我們平時(shí)編程時(shí)可以直接運(yùn)行在模擬器上是因?yàn)閑clipse會(huì)自動(dòng)幫我們簽名)
(2)Android程序包使用的數(shù)字證書(shū)可以是自簽名的,不需要一個(gè)權(quán)威的數(shù)字證書(shū)機(jī)構(gòu)簽名認(rèn)證
(3)如果要正式發(fā)布一個(gè)Android ,必須使用一個(gè)合適的私鑰生成的數(shù)字證書(shū)來(lái)給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書(shū)來(lái)發(fā)布。
(Roadley:eclipse生成的私鑰并不是固定的,所以使用它來(lái)簽名并不保險(xiǎn))
(4)數(shù)字證書(shū)都是有有效期的,Android只是在應(yīng)用程序安裝的時(shí)候才會(huì)檢查證書(shū)的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書(shū)過(guò)期也不會(huì)影響程序的正常功能。
(5)Android使用標(biāo)準(zhǔn)的java工具 Keytool and Jarsigner來(lái)生成數(shù)字證書(shū),并給應(yīng)用程序包簽名。
(6)使用zipalign優(yōu)化程序。