您好!apk签名工具可以通过两种方式来完成:1)通过ADT提供的图形化界面完成apk签名;2)完全通过shell/dos命令来完成apk签名。我比较喜欢第2)种方式,所以下面将讲解如何通过命令的方式完成apk签名。
给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool、jarsigner、zipalign,下面是对这3个工具的简单介绍:
1)keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件;
2)jarsigner:使用数字证书给apk文件签名;
3)zipalign:对签名后的apk进行优化,提高与Android系统交互的效率(Android SDK1.6版本开始包含此工具)。
为了方便使用上面3个命令,首先需要将上面3个工具所在路径添加到环境变量path中。怎么配置环境变量请参见我先前的博客(Windows 或 Ubuntu),这里需要说一下这3个工具默认所在的路径:
1)keytool:该工具位于jdk安装路径的bin目录下;
2)jarsigner:该工具位于jdk安装路径的bin目录下;
3)zipalign:该工具位于Android-sdk-windows/tools/目录下。
要自己对apk进行签名,首先需要得到一个未经签名的apk文件。在Eclipse中,打开Android工程名称,右键点击,依次选择“Android Tools” - “Export Unsigned Application Package ...”,然后选择一个存储位置保存即可。这样就得到了一个未经签名的apk文件。
接下来,使用keytool工具生成数字证书。执行以下命令:
```
keytool -genkey -v -keystore it-homer.keystore -alias it-homer.keystore -keyalg RSA -validity 20000
```
在执行上述命令生成数字证书文件时,会提示你输入一些信息,包括证书的密码。
然后,使用jarsigner工具为Android应用程序签名。执行以下命令:
```
jarsigner -verbose -keystore it-homer.keystore -signedjar notepad_signed.apk notepad.apk it-homer.keystore
```
最后,如果觉得已签名的apk文件不够优化,可以使用zipalign工具进行优化。执行以下命令:
```
zipalign -v -f notepad_signed.apk notepad_signed_optimized.apk notepad.apk
```
请将以下内容重构为一个段落,并保持段落结构:
2)notepad_signed.apk和notepad_signed_aligned.apk。前者表示对已签名文件notepad_signed.apk进行优化,优化后的文件名为notepad_signed_aligned.apk。需要注意的是,如果你以前的程序是采用默认签名的方式(即debug签名),一旦换了新的签名应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上。这是因为程序覆盖安装主要检查两点:1)两个程序的入口Activity是否相同;2)两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。
另外,debug签名的应用程序有这样两个限制或风险:1)debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;2)debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。不要小视这个问题,如果你开发的程序只有你自己使用,当然无所谓,卸载再安装就可以了。但要是你的软件有很多使用客户,这就是大问题了,就相当于软件不具备升级功能!