在现实生活中,签名就相当与合同上的签字和盖章。只有签名之后,才具有一定的效力。如果没有签名,“合同”就没有对象,也就没有法律效力了。
Android系统要求每一个应用程序必须经过数字签名才能安装到系统中,也就是说没有经过签名的app,是没有办法安装到你的android机器上的。
Android通过数字签名来标志应用程序和开发者之间的联系,它是对应用程序自我认证的一个方式。
说白了,就是为了标志一个APP的所属,区分APP。
(最后两点好处,笔者暂时没有接触到。)
对APK进行签名,有两种方式,分别是 1. 通过ADT提供的图形化界面签名打包、2. 通过DOS命令来签名打包。
首先需要说明的一下就是:我们一般调试程序,使用的都是debug签名(debug.keystore)。
一般我们开发应用程序的时候,都是多人协作的,每个人的机器的debug的签名都是不一样的,所以经常会遇到你写的程序提交之后,同事更新了之后就不能正常的运行。比如百度地图的相关代码逻辑,是与签名有很大联系的。使用debug签名会导致,某些代码只能在你自己的机器上运行,这样就太LOW了。
所以一般都是共用一个release签名。
最终发布apk版本的时候,用的就是release版的签名,也就是正式版的签名。
下面,笔者对这两种方式都自己讲解一下:
项目右键,你会看到:Android Tools
Export Signed Application Package
表示导出带有签名的apk文件。
Export Unsigned Application Package
表示导出不带有签名的apk文件
我们选择第一项,然后next,
此时你可以选择使用已经存在的keystore,也可以自己创建一个keystore。
我们选择创建一个:
next之后,
在此界面需要填写一些签名的信息,比如:别名,签名密码,使用期限,组织信息等。
再次下一步,就是生成带有签名的apk文件了。
经过上面的一系列的步骤,就打包出来一个带有签名的apk文件。
下次再发布版本的时候,就可以使用已经生成的签名打包了。
next之后,如果你的签名文件密码是正确,会自动把你设置的别名列出来:
然后输入你的签名的密码,下一步,下一步就行了。
在使用命令的方式生成签名打包之前,我们先看一下debug.kestore都包括哪些信息。
使用如下命令,可以查看签名的信息:
keystool -list -v -keystore debug.keystore
debug签名的口令是: android
可以看到debug.keystore中包含的信息,与我们用图形化界面创建签名填写的信息基本对应。
我们对工程进行签名打包需要用到两个工具:keytool、jarsigner。
生成签名的命令如下:
keytool -genkey -v -keystore xxx.keystore -alias xxx -keyalg RSA -validity xxx
执行这条命令之后,会提示你输入一些信息:
使用如下命令对此apk进行签名
jarsigner -verbose -keystore xxx.keystore -signedjar xxx.apk xxx.apk xxx
执行此命令之后,稍微等待一会,就会提示你打包成功。
笔者在研究签名打包的过程中,在网上看到还有一个步骤,就是使用zipalign命令对apk进行优化。
zipalign -v 4 xxx.apk xxx_aligned.apk
命令的意思就是把xxx.apk优化成为xxx_aligned.apk。针对项目比较庞大的时候,使用此命令有较大的明显,比较小的项目优化效果不是很明显。
此命令解释如下(网络):
zipalign能够是apk文件未压缩的数据在4个字节边界上对齐,这样android系统就可以使用mmap()函数读取文件,可以在读取资源文件上获取较高的性能。
- 未经过签名的apk不能安装到手机上。在经过Export Unsigned Application Package步骤之后,eclipse就会给你提示:在发布程序之前,需要对程序签名处理。
此篇blog到此结束~~
感谢大家支持!如有错误,请指出~~
谢谢~
原文地址:http://blog.csdn.net/crazy1235/article/details/46289803