1、什麼是簽名?
讓我們來看看,在現實生活中的簽名。比如下面這張圖檔:

這是女星孫俪的簽名。簽名就意味着在紙上或别處寫下自己的名字,或者說在某處打上一個标記作為你自己的一種特有的辨別,當别人看到這個簽名的時候,他會知道這是和你有關的,而不是其它人。
“liufeng”對應于你自己的windows作業系統使用者名,怎麼樣,是不是已經找到它了。這也就意味着,如果我們想擁有自己的簽名,而不是讓ADT幫我們簽名的話,我們也要有一個屬于自己的密鑰檔案(*.keystore)。
1)準備工作
apk的簽名工作可以通過兩種方式來完成:
1)通過ADT提供的圖形化界面完成apk簽名;
2)完全通過DOS指令來完成apk簽名
我比較喜歡第2)種方式,是以下面将講解如何通過指令的方式完成apk簽名。
給apk簽名一共要用到3個工具,或者說3個指令,分别是:keytool、jarsigner和zipalign,下面是對這3個工具的簡單介紹:
1)keytool:生成數字證書,即密鑰,也就是上面說到的擴充名為.keystore的那類檔案;
2)jarsigner:使用數字證書給apk檔案簽名;
SDK1.6版本開始包含此工具)
為了友善使用上面3個指令,首先需要将上面3個工具所在路徑添加到環境變量path中(我說的是為了友善使用,沒有說必須要這麼做)。怎麼配置環境變量就不在此講解了,這裡需要說一下這3個工具預設所在的路徑:
1)keytool:該工具位于jdk安裝路徑的bin目錄下;
2)jarsigner:該工具位于jdk安裝路徑的bin目錄下;
Platform-Tools相比對的SDK Build-Tools版本)\zipalign)目錄下
2)生成未經簽名的apk檔案
Tools” - “Export Unsigned Application Package ...”,然後選擇一個存儲位置儲存即可。這樣就得到了一個未經簽名的apk檔案。
生成未經簽名的apk檔案遇到了問題,參考文章:
<a href="http://blog.csdn.net/buaaroid/article/details/49470113">APK打包時,引用的appcompat_v7工程包報錯的解決辦法</a>
<a href="http://blog.csdn.net/buaaroid/article/details/49469213">Android APP打包時,出錯:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic).....</a>
<a href="http://blog.csdn.net/buaaroid/article/details/51024141">Illegal resource reference: @*android resources are private and not always present 解決方案</a>
3)使用keytool工具生成數字證書
先介紹cmd下的兩個指令:
跳轉到目錄C:\Program Files\Java\jdk1.8.0_45\bin:
> cd C:\Program Files\Java\jdk1.8.0_45\bin
檢視目錄下内容
> dir
使用keytool工具生成數字證書
> keytool
-genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000
說明:
1)keytool是工具名稱,-genkey意味着執行的是生成數字證書操作,-v表示将生成證書的詳細資訊列印出來,顯示在dos視窗中;
2)-keystore liufeng.keystore 表示生成的數字證書的檔案名為“liufeng.keystore”;
3)-alias liufeng.keystore 表示證書的别名為“liufeng.keystore”,當然可以不和上面的檔案名一樣;
4)-keyalg RSA 表示生成密鑰檔案所采用的算法為RSA;
5)-validity 20000 表示該數字證書的有效期為20000天,意味着20000天之後該證書将失效
在執行上面的指令生成數字證書檔案時,會提示你輸入一些資訊,包括證書的密碼,示例如下:
完成上述操作後,在 keytool 所在的目錄下會生成xxx.keystore 的數字證書。