一般情况下,我们在模拟器上调试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在不同的机器上,所生成的可能不一样)

更多相关文章

  1. Application Fundamentals --1.2
  2. Android(安卓)SO文件的兼容和适配
  3. Android之NDK开发
  4. Android之Adapter用法总结
  5. Android的init过程(二):初始化语言(init.rc)解析
  6. Android术语
  7. 解决在3.6.2安装android的ADT文件bug
  8. Android之Adapter用法总结
  9. Android高手进阶教程(四)之----Android(安卓)中自定义属性(attr.

随机推荐

  1. Android(安卓)Afinal使用与总结
  2. Android读写XML(上)——package说明
  3. Android学习攻略:手把手教你循序渐进地学
  4. Android核心分析(14)------ Android(安卓)G
  5. android
  6. Android中的数据传递之Parcelable接口
  7. Android(安卓)开发中使用 SQLite 数据库
  8. Android(安卓)开发一定要看的15个实战项
  9. Android(安卓)安全攻防(一):SEAndroid的编译
  10. Android文件操作中的openFileOutPut和ope