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

2016-01-08 16:45 评论 0 条

概要

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中需要共享一些特定的功能的情况下。

当前文章价值8.04元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://www.teachcourse.cn/1211.html ,谢谢支持!

资源分享

分类:Android 标签:
关于ViewPager冲突问题分析及解决思路 关于ViewPager冲突问题分析及解
harmony学习页面(@Entry)生命周期 harmony学习页面(@Entry)生命周
ArrayMap方法解析 ArrayMap方法解析
Hashtable方法解析 Hashtable方法解析