一般情况下,我们在模拟器上调试app时,虽然我们并没有主观的进行签名操作,但是ADT会自动的使用debug密钥为app签名【Android系统要求每一个Android应用程序必须经过数字签名才能够安装到系统中】,debug密钥本质是一个名为debug.keystore的文件,存在于计算机:C:\Users\i\.android\debug.keystore
签名方式:
- 通过ADT提供的图形化界面完成apk签名
- 通过DOS命令来完成apk签名
签名步骤:(以方式2为例)
- 步骤一:配置以下三个工具的path环境
-
- 一共需要用到三个命令,分别是:keytool、jarsigner、zipalign
- keytool:生成数字证书,即密钥,即后缀为.keystore的文件(D:\Program Files\Java\jdk1.8.0_11\bin)
- jarsigner:使用数字证书给apk文件签名(D:\Program Files\Java\jdk1.8.0_11\bin)
- zipalign:对签名后的apk进行优化,提高与Android系统交互的效率
注:若已经有数字签名了,那么在之后的签名中,只需要用到后两个命令,否则三个都需要
- 步骤二:生成未经签名的apk包
- 步骤三:使用keytool工具生成数字证书:
keytool -genkey -v -keystore caoting.keystore -alias marry.keystore -keyalg RSA -validity 20000
- keytool:工具名
- -genkey:生成数字证书操作
- -v:将生成证书的详细信息打印出来,显示在dos窗口中
- -keystore caoting.keystore:生成的数字证书的文件名为“caoting.keystore”
- -alias marry.keystore:证书的别名为“-alias marry.keystore”
- -keyalg RSA:生成密钥文件所采用的算法是RSA
- -validity 20000:该数字证书的有效期,即为20000天
- 步骤四:使用jarsigner为apk签名
jarsigner -verbose -keystore caoting.keystore -signedjar destination.apk source.apk marry.keystore
- jarsigner :工具名
- -verbose:将签名过程中的详细信息打印出来
- -keystore caoting.keystore:表示签名所使用的数字证书所在的位置(这里没写路径,表示在当前目录下)
- -signedjar destination.apk source.apk:表示给source.apk文件签名,且签名后的文件为destination.apk
- marry.keystore:证书的别名
- 步骤五:使用zipalign工具优化已签名的apk
注:若之前的程序是以默认签名方式(即debug签名),一旦采用了新的签名,应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上zipalign -v destination.apk destination_aligned.apk
- zipalign :工具名
- -v:打印
- destination.apk destination_aligned.apk:将签名的文件优化,优化后的文件为destination_aligned.apk
覆盖安装主要检查两点:
- 两个程序的入口Activity是否相同,两个程序的包名不一样,即时其他代码一样,也不会被视为同一个程序的不同版本
- 两个程序采用的签名是否相同(debug.keystore在不同的机器上,所生成的可能不一样)