Android应用程序的签名

一般情况下,我们在模拟器上调试app时,虽然我们并没有主观的进行签名操作,但是ADT会自动的使用debug密钥为app签名【Android系统要求每一个Android应用程序必须经过数字签名才能够安装到系统中】,debug密钥本质是一个名为debug.keystore的文件,存在于计算机:C:\Users\i\.android\debug.keystore

签名方式:
  1. 通过ADT提供的图形化界面完成apk签名
  2. 通过DOS命令来完成apk签名

签名步骤:(以方式2为例)
  • 步骤一:配置以下三个工具的path环境
  1. 一共需要用到三个命令,分别是:keytool、jarsigner、zipalign
  2. keytool:生成数字证书,即密钥,即后缀为.keystore的文件(D:\Program Files\Java\jdk1.8.0_11\bin)
  3. jarsigner:使用数字证书给apk文件签名(D:\Program Files\Java\jdk1.8.0_11\bin)
  4. 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
zipalign -v destination.apk destination_aligned.apk
  • zipalign :工具名
  •  -v:打印
  • destination.apk destination_aligned.apk:将签名的文件优化,优化后的文件为destination_aligned.apk
:若之前的程序是以默认签名方式(即debug签名),一旦采用了新的签名,应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上

覆盖安装主要检查两点:
  1. 两个程序的入口Activity是否相同,两个程序的包名不一样,即时其他代码一样,也不会被视为同一个程序的不同版本
  2. 两个程序采用的签名是否相同(debug.keystore在不同的机器上,所生成的可能不一样)

你可能感兴趣的:(Android,android签名)