本文檔介紹了應(yīng)用簽名的相關(guān)內(nèi)容,您可在了解文檔內(nèi)容后進(jìn)行操作。
一、什么是簽名?
簽名一詞來(lái)源于生活中常用的術(shù)語(yǔ),還記得刷信用卡會(huì)要求客戶(hù)簽名嗎?這個(gè)簽名的作用是確認(rèn)這筆消費(fèi)是本人經(jīng)手的。計(jì)算機(jī)中所說(shuō)的簽名和生活中所說(shuō)的簽名在本質(zhì)上是一樣的,它所起到的作用也是一致的!為App簽名的本質(zhì)是說(shuō)明這個(gè)App是我開(kāi)發(fā)的,不是別人。用官方的話(huà)說(shuō),就是在應(yīng)用和開(kāi)發(fā)者之間建立可信任的關(guān)聯(lián)。
二、為什么要給Android應(yīng)用程序簽名?
這樣做的根本原因是Android系統(tǒng)需要一個(gè)機(jī)制,保證以下幾點(diǎn):
1.拿到一個(gè)應(yīng)用的安裝包,能夠知道作者是誰(shuí)
2.當(dāng)應(yīng)用更新時(shí),能夠檢測(cè)是不是作者本人提交的
3.應(yīng)用中的部分文件遭到修改時(shí),能夠檢測(cè)到是否為作者本人做出的修改為了實(shí)現(xiàn)上述目的,Android就引入了簽名這種比較成熟的方法。
三、簽名與應(yīng)用商店有什么關(guān)系?
通過(guò)簽名的檢測(cè)和對(duì)比,應(yīng)用商店能夠從中識(shí)別到開(kāi)發(fā)者的信息,在下面的幾個(gè)場(chǎng)景中我們會(huì)依賴(lài)簽名:
1.應(yīng)用的認(rèn)領(lǐng)
2.每次應(yīng)用提交更新,確保是作者本人提交
3.當(dāng)有人試圖冒充作者提交應(yīng)用時(shí),應(yīng)用商店能夠阻止該行為
4.通過(guò)簽名黑名單,阻止惡意軟件作者提交應(yīng)用
5.關(guān)于簽名,我需要注意什么?
下面是你需要注意的要點(diǎn):
1.所有應(yīng)用程序必須簽名,未經(jīng)過(guò)簽名的程序不允許在模擬器或者設(shè)備上運(yùn)行;
2.測(cè)試和開(kāi)發(fā)階段,開(kāi)發(fā)工具會(huì)自動(dòng)生成一個(gè)debug key來(lái)為應(yīng)用簽名;
3.當(dāng)應(yīng)用準(zhǔn)備發(fā)布時(shí),你需要?jiǎng)?chuàng)建自己的release key來(lái)為應(yīng)用簽名,所需要的工具都包含在SDK tools中;
4.Android只在應(yīng)用安裝階段檢測(cè)簽名是否過(guò)期,如果簽名在應(yīng)用安裝后過(guò)期,應(yīng)用仍可以繼續(xù)正常使用;
5.你可以使用標(biāo)準(zhǔn)工具——keytool和jarsigner來(lái)生成秘鑰和為apk簽名;
6.簽名后,我們建議你使用zipalign工具來(lái)優(yōu)化apk包;
四、Android應(yīng)用程序簽名步驟
1.準(zhǔn)備工作
apk的簽名工作可以通過(guò)兩種方式來(lái)完成:
通過(guò)ADT提供的圖形化界面完成apk簽名;完全通過(guò)命令行來(lái)完成apk簽名;給apk簽名一共要用到3個(gè)工具,或者說(shuō)3個(gè)命令,分別是:keytool、jarsigner和zipalign,下面是對(duì)這3個(gè)工具的簡(jiǎn)單介紹:
keytool:生成數(shù)字證書(shū),即密鑰,也就是上面說(shuō)到的擴(kuò)展名為.keystore的那類(lèi)文件;jarsigner:使用數(shù)字證書(shū)給apk文件簽名;zipalign:對(duì)簽名后的apk進(jìn)行優(yōu)化,提高與Android系統(tǒng)交互的效率(Android SDK1.6版本開(kāi)始包含此工具);
從這3個(gè)工具的作用也可以看出,這3個(gè)工具的使用順序。通常我們自己所開(kāi)發(fā)的所有應(yīng)用程序,都是使用同樣的簽名,即使用同一個(gè)數(shù)字證書(shū),這就意味著:如果你是第一次做Android應(yīng)用程序簽名,上面的3個(gè)工具都將用到;但如果你已經(jīng)有數(shù)字證書(shū)了,以后再給其它apk簽名時(shí),只需要用到j(luò)arsigner和zipalign就可以完成。
2.使用keytool工具生成數(shù)字證書(shū)
keytool-genkey-v-keystore liufeng.keystore-alias liufeng.keystore-keyalg RSA-validity 20000說(shuō)明:
keytool是工具名稱(chēng),-genkey意味著執(zhí)行的是生成數(shù)字證書(shū)操作,-v表示將生成證書(shū)的詳細(xì)信息打印出來(lái),顯示在dos窗口中;
-keystore liufeng.keystore表示生成的數(shù)字證書(shū)的文件名為“l(fā)iufeng.keystore”;-alias liufeng.keystore表示證書(shū)的別名為“l(fā)iufeng.keystore”,當(dāng)然可以不和上面的文件名一樣;-keyalg RSA表示生成密鑰文件所采用的算法為RSA;-validity 20000表示該數(shù)字證書(shū)的有效期為20000天,意味著20000天之后該證書(shū)將失效
在執(zhí)行上面的命令生成數(shù)字證書(shū)文件時(shí),會(huì)提示你輸入一些信息,包括證書(shū)的密碼,示例如下:
3.使用jarsigner工具為Android應(yīng)用程序簽名
jarsigner-verbose-keystore liufeng.keystore-signedjar notepad_signed.apk notepad.apk liufeng.keystore說(shuō)明:
jarsigner是工具名稱(chēng),-verbose表示將簽名過(guò)程中的詳細(xì)信息打印出來(lái),顯示在dos窗口中;-keystore liufeng.keystore表示簽名所使用的數(shù)字證書(shū)所在位置,這里沒(méi)有寫(xiě)路徑,表示在當(dāng)前目錄下;-signedjar notepad_signed.apk notepad.apk表示給notepad.apk文件簽名,簽名后的文件名稱(chēng)為notepad_signed.apk;-liufeng.keystore(最后面的)表示證書(shū)的別名,對(duì)應(yīng)于生成數(shù)字證書(shū)時(shí)-alias參數(shù)后面的名稱(chēng);
4.使用zipalign工具優(yōu)化已簽名的apk(非必須但建議這么做)
zipalign-v 4 notepad_signed.apk notepad_signed_aligned.apk說(shuō)明:
zipalign是工具名稱(chēng),-v表示在DOS窗口打印出詳細(xì)的優(yōu)化信息;notepad_signed.apk notepad_signed_aligned.apk表示對(duì)已簽名文件notepad_signed.apk進(jìn)行優(yōu)化,優(yōu)化后的文件名為notepad_signed_aligned.apk
以上為應(yīng)用簽名的相關(guān)內(nèi)容。