背景:
Android项目以他的包为唯一标识,如果一台设备上安装了两个包名相同的应用,后安装的应用就会覆盖前面安装的应用。
目的:
为了避免覆盖的情况,Android要求对作为成品的应用进行签名。
作用:
- 确定发布者身份。
- 确保应用的完整性。
在Eclipse的ADT插件或Ant工具会自动生成调试证书对Android应用签名。如果要正式发布一个Android应用,必须使用合适的数字证书来给应用程序签名,不能使用ADT或者Ant工具生成的调试证书来发布。
在Eclipse中对Android应用签名
1、右击项目,Android Tools→Export Singned Application Package…
2、如果系统中没有数字证书,可以在窗口中选择"Create new keystore"单击按钮,填写数字证书的存储路径和密码。
3、填写完成后Next,Eclipse将会弹出让用户填写数字证书的详细信息。
4、Next,指定生成签名后的APK安装包的存储路径。
5、Finish。这样就会在指定目录下生成一个签名后的APK安装包。
一旦数字证书制作完成,以后就可以最直接使用该证书签名了。
使用命令对APK进行签名
1、创建keysrore库,JDK的安装目录下面的BIN中有一个keytool.exe工具生成数字证书。
keytool -genkeypair -alias -keyalg -validity -keystore
- -genkeypair:指定生成数字证书
- -alias:指定生成数字证书别名
- -kayalg:指定生成数字证书的算吗,使用RSA算法
- -validity:指定生成的数字证书的有效期
- -keystore:指定所生成的数字证书的存储路径
输入命令后回车,接着安装交互式界面输入相关参数。
2、生成为签名的apk,Android Tools→Export Unsigned Application Package…
3、使用jarsigner命令对未签名的APK进行签名,JDK的Bin子目录下面
jarsigner -verbose -keystore -signedjar
说明:
- -verbose:指定生成详细输出
- -keystore:指定数字证书存储路径
- -singedjar:有三个参数分别是签名后apk包、未签名的APK包、数字证书的别名。
- 回车,以交互的方式输入数字证书keystore的密码。
4、使用zipalign.exe工具优化APK安装包。
zipalign -f -v 4 a.apk a_zip.apk
- -f:指定强制覆盖已有文件
- -v:指定生成详细输出
- 4:指定档案整理所基于的字节数,通常指定为4,也就是基于32为进行整理。
- a.apk、a_zip.apk:分别指定整理前的APK和整理后生成的APK。