Android 簽名

參考
什么是 Android 簽名機制,Bluebox Security 發(fā)現(xiàn)的漏洞有何威脅?
Android應(yīng)用程序簽名詳解
Android Studio如何打包簽名

一些惡意開發(fā)者會采用反編譯重新編譯的方法來給各種應(yīng)用夾帶私貨然后偷偷上傳到各個渠道等著小白鼠自己上鉤,比如我反編譯個QQ,加了個廣告,忽悠到人裝了……從此你的手機就各種彈廣告你還不知道是哪個軟件干的……起碼普通用戶是不會知道了,除非挨個兒卸載嘗試。
但是這種做法有一個弊端(對于惡意開發(fā)者而言),惡意開發(fā)者一定拿不到QQ官方的簽名文件,于是只能用自己的簽名文件簽名……然后用戶如果之前安裝過官方版本的QQ就會發(fā)現(xiàn)“簽名不一致”的提示,各大應(yīng)用市場也可以通過這種辦法來鑒別(比如某莢提供的洗白白功能其實就是在對比簽名),雖然還是會有人中招,但是也算是有應(yīng)對之法。

一、概述

在Android 系統(tǒng)中,所有安裝到系統(tǒng)的應(yīng)用程序都必有一個數(shù)字證書,此數(shù)字證書用于標(biāo)識應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,Android系統(tǒng)要求每一個安裝進系統(tǒng)的應(yīng)用程序都是經(jīng)過數(shù)字證書簽名的,數(shù)字證書的私鑰則保存在程序開發(fā)者的手中。
Android數(shù)字證書包含以下幾個要點:
(1)所有的應(yīng)用程序都必須有數(shù)字證書 ,Android系統(tǒng)不會安裝一個沒有數(shù)字證書的應(yīng)用程序 (2)Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個權(quán)威的數(shù)字證書機構(gòu)簽名認證
(3)如果要正式發(fā)布 一個Android ,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名 ,而不能使用adt插件或者ant工具生成的調(diào)試證書來發(fā)布。
(4)數(shù)字證書都是有有效期 的,Android只是在應(yīng)用程序安裝的時候才會檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會影響程序的正常功能。
(5)Android使用標(biāo)準(zhǔn)的java工具 Keytool and Jarsigner 來生成數(shù)字證書,并給應(yīng)用程序包簽名。

二、為什么我開發(fā)的Android應(yīng)用程序沒有做什么簽名也能在模擬器和手機上運行?

你沒有給Android應(yīng)用程序簽名并不代表Android應(yīng)用程序沒有被簽名。為了方便我們開發(fā)調(diào)試程序,ADT會自動的使用debug密鑰為應(yīng)用程序簽名。debug密鑰?它在哪?debug密鑰是一個名為debug.keystore的文件,它的位置: 系統(tǒng)盤符:/Documents and Settings/liufeng/.android/debug.keystore
“l(fā)iufeng”對應(yīng)于你自己的windows操作系統(tǒng)用戶名,怎么樣,是不是已經(jīng)找到它了。這也就意味著,如果我們想擁有自己的簽名,而不是讓ADT幫我們簽名的話,我們也要有一個屬于自己的密鑰文件(*.keystore)。

三、命令行方式

打包Android APK的方法有很多,命令行,或者Gradle,ANT,MAVEN等等,方法有很多。

1)準(zhǔn)備工作
給apk簽名一共要用到3個工具,或者說3個命令,分別是:keytool、jarsigner和zipalign,下面是對這3個工具的簡單介紹:
1)keytool:生成數(shù)字證書,即密鑰,也就是上面說到的擴展名為.keystore的那類文件;
2)jarsigner:使用數(shù)字證書給apk文件簽名;
3)zipalign:對簽名后的apk進行優(yōu)化,提高與Android系統(tǒng)交互的效率(Android SDK1.6版本開始包含此工具)
從這3個工具的作用也可以看出,這3個工具的使用順序。通常我們自己所開發(fā)的所有應(yīng)用程序,都是使用同樣的簽名,即使用同一個數(shù)字證書,這就意味著:如果你是第一次做Android應(yīng)用程序簽名,上面的3個工具都將用到;但如果你已經(jīng)有數(shù)字證書了,以后再給其它apk簽名時,只需要用到j(luò)arsigner和zipalign就可以完成。
為了方便使用上面3個命令,首先需要將上面3個工具所在路徑添加到環(huán)境變量path中(我說的是為了方便使用,沒有說必須要這么做)。怎么配置環(huán)境變量就不在此講解了,這里需要說一下這3個工具默認所在的路徑:
1)keytool:該工具位于jdk安裝路徑的bin目錄下;
2)jarsigner:該工具位于jdk安裝路徑的bin目錄下;
3)zipalign:該工具位于android-sdk-windows/tools/目錄下
不知道大家是否注意到keytool和jarsigner兩個工具是jdk自帶的,也就意味著生成數(shù)字證書和文件簽名不是Android的專利;另外從字面上理解jarsigner也能猜得出該工具主要是用來給jar文件簽名的。
2)生成未經(jīng)簽名的apk文件
既然我們要自己對apk進行簽名,就不再需要ADT默認幫我們簽名了。如何得到一個未經(jīng)簽名的apk文件呢?打開Eclipse,在Android工程名稱上點擊右鍵,依次選擇“Android Tools” - “Export Unsigned Application Package ...”,然后選擇一個存儲位置保存即可。這樣就得到了一個未經(jīng)簽名的apk文件。
3)使用keytool工具生成數(shù)字證書
keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000
說明:
1)keytool是工具名稱,-genkey意味著執(zhí)行的是生成數(shù)字證書操作,-v表示將生成證書的詳細信息打印出來,顯示在dos窗口中;
2)-keystore liufeng.keystore 表示生成的數(shù)字證書的文件名為“l(fā)iufeng.keystore”;
3)-alias liufeng.keystore 表示證書的別名為“l(fā)iufeng.keystore”,當(dāng)然可以不和上面的文件名一樣;
4)-keyalg RSA 表示生成密鑰文件所采用的算法為RSA;
5)-validity 20000 表示該數(shù)字證書的有效期為20000天,意味著20000天之后該證書將失效
在執(zhí)行上面的命令生成數(shù)字證書文件時,會提示你輸入一些信息,包括證書的密碼,示例如下:

Paste_Image.png

4)使用jarsigner工具為Android應(yīng)用程序簽名
jarsigner -verbose -keystore liufeng.keystore -signedjar notepad_signed.apk notepad.apk liufeng.keystore
說明:
1)jarsigner是工具名稱,-verbose表示將簽名過程中的詳細信息打印出來,顯示在dos窗口中;
2)-keystore liufeng.keystore 表示簽名所使用的數(shù)字證書所在位置,這里沒有寫路徑,表示在當(dāng)前目錄下;
3)-signedjar notepad_signed.apk notepad.apk 表示給notepad.apk文件簽名,簽名后的文件名稱為notepad_signed.apk;
4)最后面的liufeng.keystore 表示證書的別名,對應(yīng)于生成數(shù)字證書時-alias參數(shù)后面的名稱
5)使用zipalign工具優(yōu)化已簽名的apk(非必須但建議這么做)
zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk
說明:
1)zipalign是工具名稱,-v表示在DOS窗口打印出詳細的優(yōu)化信息;
2)notepad_signed.apk notepad_signed_aligned.apk 表示對已簽名文件notepad_signed.apk進行優(yōu)化,優(yōu)化后的文件名為notepad_signed_aligned.apk
說明:如果你以前的程序是采用默認簽名的方式(即debug簽名),一旦換了新的簽名應(yīng)用將不能覆蓋安裝,必須將原先的程序卸載掉,才能安裝上。因為程序覆蓋安裝主要檢查兩點:
1)兩個程序的入口Activity是否相同。兩個程序如果包名不一樣,即使其它所有代碼完全一樣,也不會被視為同一個程序的不同版本;
2)兩個程序所采用的簽名是否相同。如果兩個程序所采用的簽名不同,即使包名相同,也不會被視為同一個程序的不同版本,不能覆蓋安裝。
另外,可能有人可能會認為反正debug簽名的應(yīng)用程序也能安裝使用,那也沒有必要自己簽名了嘛。千萬不要這樣想,debug簽名的應(yīng)用程序有這樣兩個限制,或者說風(fēng)險:
1)debug簽名的應(yīng)用程序不能在Android Market上架銷售,它會強制你使用自己的簽名;
2)debug.keystore在不同的機器上所生成的可能都不一樣,就意味著如果你換了機器進行apk版本升級,那么將會出現(xiàn)上面那種程序不能覆蓋安裝的問題。不要小視這個問題,如果你開發(fā)的程序只有你自己使用,當(dāng)然無所謂,卸載再安裝就可以了。但要是你的軟件有很多使用客戶,這就是大問題了,就相當(dāng)于軟件不具備升級功能!

四、Android Studio打包簽名
調(diào)試時默認生成的apk
打開我們的AS上的Hello World項目,點擊菜單
彈出窗口,如果沒有key,就創(chuàng)建一個,有的話就選擇存在的Key
我們新建一個,可根據(jù)自己需要填寫相關(guān)項
點擊OK后,可以看到我們密碼的信息,可能需要我們填入密碼
點擊Next
點擊Finish稍等一會兒會出現(xiàn)下述提示,說明應(yīng)用已經(jīng)打包簽名成功
可以看到打包后的APK已經(jīng)安詳?shù)靥稍谖覀兊腶pp目錄下了
如果你要驗證是否簽名,只需要輸入下述cmd指令
Paste_Image.png
五、多渠道打包

參考
Gradle for Android(三)多渠道打包、配置簽名信息
[Android Studio 權(quán)威教程]多渠道打包和一鍵完成(全部產(chǎn)品)打包并簽名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,659評論 25 708
  • app簽名,相當(dāng)于是app在Anndroid系統(tǒng)上的一個認證,Android系統(tǒng)要求每一個Android應(yīng)用程序必...
    spilledyear閱讀 4,874評論 7 6
  • 生成簽名文件 命令行 keytool工具是Java JDK自帶的證書工具-genkey參數(shù)表示:要生成一個證書(版...
    738bc070cd74閱讀 761評論 0 4
  • 檢查app的證書和簽名對Android簽名驗證app的簽名 命令行代碼: [進入文件目錄]cd [文件目錄][復(fù)制...
    MarcoHorse閱讀 608評論 0 0
  • 所有的成熟是建立在彼此優(yōu)勢上的互相依賴.不是這個公司剛起步成熟期,就要自己獨立出去干,成熟的本質(zhì)就是互相依賴對...
    wh王輝閱讀 86評論 0 0