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 的数字证书。