APP签名的三种方式使用说明

2016-01-08 16:45 阅读 4,435 次 评论 0 条
版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持!
转载请注明出处:http://teachcourse.cn/1211.html

概要

apk签名的意义保证开发者的合法利益,签名是唯一的,一个APP有自己独立的签名,但允许有相同的包名,相同签名的APP高版本可以覆盖低版本,否则无法覆盖

签名的步骤

第一步:创建key

第二步:使用第一步中产生的key对apk签名

签名的三种方式

方式一、导出项目,创建密钥库,完成apk签名(推荐)在Eclipse工作间中选中需要导出的项目,鼠标右键“Export”,如下图:

》选中需要导出项目

003-选中需要导出项目

》Export Android Application

004-Export Android Application

》Keystore selection(1)

006-Keystore selection(1)

》Keystore selection(2)

007-Keystore selection(2)

》Project Checks

005-Project Checks

》Key Creation(1)

008-Key Creation(1)

》Key Creation(2)

009-Key Creation(2)

》Destination and key certificate checks(1)

010-Destination and key certificate checks(1)

》Destination and key certificate checks(2)

011-Destination and key certificate checks(2)

方式二、命令行下对apk签名创建key,需要用到keytool.exe (位于jdk1.6.0_24\jre\bin目录下),使用产生的key对apk签名,用到的是jarsigner.exe (位于jdk1.6.0_24\bin目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入

  1. D:\>keytool -genkey -alias debug.keystore -keyalg RSA -validity 40000 -keystore debug.keystore  
  2. /*说明: 
  3.        -genkey 产生密钥 
  4.        -alias debug.keystore 别名 debug.keystore 
  5.        -keyalg RSA 使用RSA算法对签名加密 
  6.        -validity 40000 有效期限4000天 
  7.        -keystore debug.keystore */  
  1. D:\>jarsigner -verbose -keystore debug.keystore -signedjar debug_signed.apk debug.apk debug.keystore  
  2. /*说明: 
  3.        -verbose 输出签名的详细信息 
  4.        -keystore  debug.keystore 密钥库位置 
  5.        -signedjar debugr_signed.apk debug.apk debug.keystore 正式签名,三个参数中依次为签名后产生的文件debug_signed,要签名的文件debug.apk和密钥库debug.keystore.*/  

PS:注意事项:android工程的bin目录下的debug.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-ExportUnsigned Application Package导出的apk采用上述步骤签名。

方式三、选中项目,导出签名后apk(不推荐),方法步骤基本不推荐使用,大概操作步骤是:选中项目右键->Android Tools->Export Signed Application Package,这个时候会报错,原因是values文件夹资源需要转换多种版本

》第三种签名方式(1)
012-第三种签名方式(1)

》第三种签名方式(2)
013-第三种签名方式(2)

优化APK文件

签名之后,用zipalign(压缩对齐)优化你的APK文件。未签名的apk不能使用,也不能优化。签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows\tools目录下)工具对其优化:

  1. D:\>zipalign -v 4 debug_signed.apk final.apk  

签名后的App

1) 方便App升级。 相同签名的高版本APP可以正常覆盖低版本,即使签名相同也必须是高版本才可以覆盖,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本安装成功的。
  2) 允许App模块化。android系统允许具有相同的App运行在同一个进程中,如果运行在同一个进程中,则他们相当于同一个App,但是你可以单独对他们升级更新,这是一种App级别的模块化思路。
  3) 允许代码和数据共享。android中提供了一个基于签名的Permission标签。通过允许的设置,我们可以实现对不同App之间的访问和共享,如下:

  1. AndroidManifest.xml:<permission android:protectionLevel="normal" />  

PS:其中protectionLevel标签有4种值:normal(缺省值),dangerous, signature,signatureOrSystem。简单来说,normal是低风险的,所有的App不能访问和共享此App。dangerous是高风险的,所有的App都能访问和共享此App。signature是指具有相同签名的App可以访问和共享此App。signatureOrSystem是指系统image中App和具有相同签名的App可以访问和共享此App,谷歌建议不要使用这个选项,因为签名就足够了,一般这个许可会被用在在一个image中需要共享一些特定的功能的情况下。

关注公众号 扫一扫二维码,加我QQ

如果文章对你有帮助,欢迎点击上方按钮关注作者

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ1589359239或公众号TeachCourse)
转载请注明出处:http://teachcourse.cn/1211.html
分类:Android 标签:
静态注册广播检查网络状态 静态注册广播检查网络状态
Genymotion启动虚拟设备上不了网,怎么办? Genymotion启动虚拟设备上不了网
深入理解接口的定义和意义 深入理解接口的定义和意义
浅谈线程和进程 浅谈线程和进程

发表评论

呲牙 憨笑 坏笑 偷笑 色 微笑 抓狂 睡觉 酷 流汗 鼓掌 大哭 可怜 疑问 晕 惊讶 得意 尴尬 发怒 奋斗 衰 骷髅 啤酒 吃饭 礼物 强 弱 握手 OK NO 勾引 拳头 差劲 爱你

表情