Android程序簽名詳解锅必、打包,分別使用keytool工具和Android Studio生成數(shù)字證書

1惕艳、什么是簽名搞隐?
如果這個(gè)問題不是放在Android開 發(fā)中來問,如果是放在一個(gè)普通的版塊远搪,我想大家都知道簽名的含義劣纲。可往往就是將一些生活中常用的術(shù)語放在計(jì)算機(jī)這種專業(yè)領(lǐng)域谁鳍,大家就開始迷惑了癞季。計(jì)算機(jī)所 做的事情劫瞳,或者說編程語言所做的事情,不正是在盡可能地模擬現(xiàn)實(shí)嗎绷柒?所以志于,計(jì)算機(jī)中所說的簽名和生活中所說的簽名在本質(zhì)上是一樣的,它所起到的作用也是一 致的废睦!
2伺绽、為什么要給Android應(yīng)用程序簽名?
如果只能用一句簡(jiǎn)單的話語來回答這個(gè)問題的話嗜湃,我會(huì)說:“這是Android系統(tǒng)所要求的”奈应。
Android系 統(tǒng)要求每一個(gè)Android應(yīng)用程序必須要經(jīng)過數(shù)字簽名才能夠安裝到系統(tǒng)中,也就是說如果一個(gè)Android應(yīng)用程序沒有經(jīng)過數(shù)字簽名购披,是沒有辦法安裝到 系統(tǒng)中的杖挣!Android通過數(shù)字簽名來標(biāo)識(shí)應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,不是用來決定最終用戶可以安裝哪些應(yīng)用程序今瀑。這個(gè)數(shù)字簽名由應(yīng) 用程序的作者完成程梦,并不需要權(quán)威的數(shù)字證書簽名機(jī)構(gòu)認(rèn)證,它只是用來讓應(yīng)用程序包自我認(rèn)證的橘荠。

3屿附、為什么我開發(fā)的Android應(yīng)用程序沒有做什么簽名也能在模擬器和手機(jī)上運(yùn)行?
你沒有給Android應(yīng)用程序簽名并不代表Android應(yīng)用程序沒有被簽名哥童。為了方便我們開發(fā)調(diào)試程序挺份,ADT會(huì)自動(dòng)的使用debug密鑰為應(yīng)用程序簽名。debug密鑰贮懈?它在哪匀泊?debug密鑰是一個(gè)名為debug.keystore的文件,它的位置:
系統(tǒng)盤符:/Documents and Settings/liufeng/.Android/debug.keystore
“l(fā)iufeng”對(duì)應(yīng)于你自己的windows操作系統(tǒng)用戶名朵你,怎么樣各聘,是不是已經(jīng)找到它了。這也就意味著抡医,如果我們想擁有自己的簽名躲因,而不是讓ADT幫我們簽名的話,我們也要有一個(gè)屬于自己的密鑰文件(*.keystore)忌傻。

4大脉、Android應(yīng)用程序簽名步驟
1)準(zhǔn)備工作
apk的簽名工作可以通過兩種方式來完成:
1)通過ADT提供的圖形化界面完成apk簽名;
2)完全通過DOS命令來完成apk簽名
我比較喜歡第2)種方式水孩,所以下面將講解如何通過命令的方式完成apk簽名镰矿。
給apk簽名一共要用到3個(gè)工具,或者說3個(gè)命令俘种,分別是:keytool秤标、jarsigner和zipalign绝淡,下面是對(duì)這3個(gè)工具的簡(jiǎn)單介紹:
1)keytool:生成數(shù)字證書,即密鑰抛杨,也就是上面說到的擴(kuò)展名為.keystore的那類文件够委;
2)jarsigner:使用數(shù)字證書給apk文件簽名;
3)zipalign:對(duì)簽名后的apk進(jìn)行優(yōu)化怖现,提高與Android系統(tǒng)交互的效率(Android SDK1.6版本開始包含此工具)
從這3個(gè)工具的作用也可以看出,這3個(gè)工具的使用順序玉罐。通常我們自己所開發(fā)的所有應(yīng)用程序屈嗤,都是使用同樣的簽名,即使用同一個(gè)數(shù)字證書吊输,這就意味著:如果你是第一次做Android應(yīng)用程序簽名饶号,上面的3個(gè)工具都將用到;但如果你已經(jīng)有數(shù)字證書了季蚂,以后再給其它apk簽名時(shí)茫船,只需要用到j(luò)arsigner和zipalign就可以完成。
為了方便使用上面3個(gè)命令扭屁,首先需要將上面3個(gè)工具所在路徑添加到環(huán)境變量path中(我說的是為了方便使用算谈,沒有說必須要這么做)。怎么配置環(huán)境變量就不在此講解了料滥,這里需要說一下這3個(gè)工具默認(rèn)所在的路徑:
1)keytool:該工具位于jdk安裝路徑的bin目錄下然眼;
2)jarsigner:該工具位于jdk安裝路徑的bin目錄下;
3)zipalign:該工具位于Android-sdk-windows/tools/目錄下
不知道大家是否注意到keytool和jarsigner兩個(gè)工具是jdk自帶的葵腹,也就意味著生成數(shù)字證書和文件簽名不是Android的專利高每;另外從字面上理解jarsigner也能猜得出該工具主要是用來給jar文件簽名的。
2)生成未經(jīng)簽名的apk文件
既然我們要自己對(duì)apk進(jìn)行簽名践宴,就不再需要ADT默認(rèn)幫我們簽名了鲸匿。如何得到一個(gè)未經(jīng)簽名的apk文件呢?打開Eclipse阻肩,在Android工程名稱上點(diǎn)擊右鍵带欢,依次選擇“Android Tools” - “Export Unsigned Application Package ...”,然后選擇一個(gè)存儲(chǔ)位置保存即可磺浙。這樣就得到了一個(gè)未經(jīng)簽名的apk文件洪囤。
3)使用keytool工具生成數(shù)字證書

   keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore 

說明:
1)keytool是工具名稱,-genkey意味著執(zhí)行的是生成數(shù)字證書操作撕氧,-v表示將生成證書的詳細(xì)信息打印出來瘤缩,顯示在dos窗口中;

  2) -alias demo.keystore表示證書的別名為“ demo.keystore”伦泥,當(dāng)然可以不和上面的文件名一樣剥啤;

  3)-keyalg RSA 表示生成密鑰文件所采用的算法為RSA锦溪;
  4)-validity 40000 表示該數(shù)字證書的有效期為40000天,意味著20000天之后該證書將失效

  5)-keystore demo.keystore  表示生成的數(shù)字證書的文件名為“demo.keystore ”府怯;

在執(zhí)行上面的命令生成數(shù)字證書文件時(shí)刻诊,會(huì)提示你輸入一些信息,包括證書的密碼牺丙,示例如下:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

附Android Studio生成數(shù)字證書/簽名文件:

1)生成jks簽名文件

① 選擇Build > Generate Signed APK…

② 選擇Create new…

③ 選擇簽名文件的路徑则涯,這些信息和eclipse一樣了,填完點(diǎn)擊OK

④ 然后在之前選擇路徑下就有剛剛生成的.jks文件了

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

4)使用jarsigner工具為Android應(yīng)用程序簽名
jarsigner -verbose -keystore demo.keystore -signedjar notepad_signed.apk notepad.apk demo.keystore

說明:
1)jarsigner是工具名稱,-verbose表示將簽名過程中的詳細(xì)信息打印出來冲簿,顯示在dos窗口中粟判;
2)-keystore demo.keystore 表示簽名所使用的數(shù)字證書所在位置,這里沒有寫路徑峦剔,表示在當(dāng)前目錄下档礁;

  3)-signedjar notepad_signed.apk notepad.apk 表示給notepad.apk文件簽名,簽名后的文件名稱為notepad_signed.apk吝沫;
  4)最后面的demo.keystore 表示證書的別名呻澜,對(duì)應(yīng)于生成數(shù)字證書時(shí)-alias參數(shù)后面的名稱

5)使用zipalign工具優(yōu)化已簽名的apk(非必須但建議這么做)
zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk
說明:
1)zipalign是工具名稱,-v表示在DOS窗口打印出詳細(xì)的優(yōu)化信息惨险;
2)notepad_signed.apk notepad_signed_aligned.apk 表示對(duì)已簽名文件notepad_signed.apk進(jìn)行優(yōu)化羹幸,優(yōu)化后的文件名為notepad_signed_aligned.apk

說明:如果你以前的程序是采用默認(rèn)簽名的方式(即debug簽名),一旦換了新的簽名應(yīng)用將不能覆蓋安裝平道,必須將原先的程序卸載掉睹欲,才能安裝上。因?yàn)槌绦蚋采w安裝主要檢查兩點(diǎn):
1)兩個(gè)程序的入口Activity是否相同一屋。兩個(gè)程序如果包名不一樣窘疮,即使其它所有代碼完全一樣,也不會(huì)被視為同一個(gè)程序的不同版本冀墨;
2)兩個(gè)程序所采用的簽名是否相同闸衫。如果兩個(gè)程序所采用的簽名不同,即使包名相同诽嘉,也不會(huì)被視為同一個(gè)程序的不同版本蔚出,不能覆蓋安裝。
另外虫腋,可能有人可能會(huì)認(rèn)為反正debug簽名的應(yīng)用程序也能安裝使用骄酗,那也沒有必要自己簽名了嘛。千萬不要這樣想悦冀,debug簽名的應(yīng)用程序有這樣兩個(gè)限制趋翻,或者說風(fēng)險(xiǎn):
1)debug簽名的應(yīng)用程序不能在Android Market上架銷售,它會(huì)強(qiáng)制你使用自己的簽名盒蟆;
2)debug.keystore在不同的機(jī)器上所生成的可能都不一樣踏烙,就意味著如果你換了機(jī)器進(jìn)行apk版本升級(jí)师骗,那么將會(huì)出現(xiàn)上面那種程序不能覆蓋安 裝的問題。不要小視這個(gè)問題讨惩,如果你開發(fā)的程序只有你自己使用辟癌,當(dāng)然無所謂,卸載再安裝就可以了荐捻。但要是你的軟件有很多使用客戶黍少,這就是大問題了,就相當(dāng) 于軟件不具備升級(jí)功能靴患!
————————————————

原文鏈接:https://blog.csdn.net/lyankj/article/details/51840138

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仍侥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸳君,更是在濱河造成了極大的恐慌,老刑警劉巖患蹂,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件或颊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡传于,警方通過查閱死者的電腦和手機(jī)囱挑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沼溜,“玉大人平挑,你說我怎么就攤上這事∠挡荩” “怎么了通熄?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)找都。 經(jīng)常有香客問我唇辨,道長(zhǎng),這世上最難降的妖魔是什么能耻? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任赏枚,我火速辦了婚禮,結(jié)果婚禮上晓猛,老公的妹妹穿的比我還像新娘饿幅。我一直安慰自己,他們只是感情好戒职,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布栗恩。 她就那樣靜靜地躺著,像睡著了一般帕涌。 火紅的嫁衣襯著肌膚如雪摄凡。 梳的紋絲不亂的頭發(fā)上续徽,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音亲澡,去河邊找鬼钦扭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛床绪,可吹牛的內(nèi)容都是我干的客情。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼癞己,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼膀斋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痹雅,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤仰担,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绩社,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摔蓝,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年愉耙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贮尉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朴沿,死狀恐怖猜谚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赌渣,我是刑警寧澤魏铅,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站锡垄,受9級(jí)特大地震影響沦零,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜货岭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一路操、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧千贯,春花似錦屯仗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春峰弹,著一層夾襖步出監(jiān)牢的瞬間店量,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鞠呈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留融师,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓蚁吝,卻偏偏與公主長(zhǎng)得像旱爆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窘茁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354