Android应用程序签名简介

Android的应用程序APK的签名其实和一般的jar 文件签名差不多。
首先,得到keystore文件.
你可以从一些机构申请得到一个keystore;也可以自己生成一个自签的keystore文件。APK和jar签名所用的keystore文件是一致的。
因此关于生成自签keystore文件,请参照《 Jar文件的数字签名
另外android本身自带一个keystore文件 debug.keystore 。它一般位于以下目录: C:\Documents and Settings\用户名\.android\ 。对于Administrator用户,位于 C:\Documents and Settings\Administrator\.android\ 目录下
其次,签名。
我们可以直接用JDK的jarsigner工具对apk文件进行签名。
实例1:
jarsigner  -keystore  robin.keystore  -storepass  GL2009  -keypass  gl2009   Hello.apk  robin
这个命令用密码“GL2009”从名为“robin.keystore”的keystore文件中提出名字为“robin”、密码为“gl2009”的公钥/私钥对,并对Hello.apk 文件按照keystore文件robin.keystore中的约定进行数字签名。签名的输出文件为原apk文件,即 Hello.apk
实例2:
jarsigner   -keystore  robin.keystore  -storepass  GL2009  -keypass  gl2009  -signedjar  Hello_signed.apk  Hello.apk  robin
这个命令用密码“GL2009”从名为“robin.keystore”的keystore文件中提出名字为“robin”、密码为“gl2009”的公钥/私钥对,并对Hello.apk文件按照keystore文件robin.keystore中的约定进行数字签名,签名的输出文件为Hello_signed.apk
补充
使用sun jdk的jarsigner工具来进行签名时,有时会失败出现类似如下的提示:
jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compres
sed size (expected 9301 but got 9621 bytes)
网上有人说:这些问题主要是由于资源文件造成的,对于android开发来说应该检查res文件夹中的文件,逐个排查。这个问题可以通过升级系统的JDK和JRE版本来解决。
但是网上提供一种更直接简单而且有效的方法,即: 把apk压缩包下面的文件夹META-INF删除掉再重新执行上面的签名命令
当然这种方法的缺点是,如果原apk已经是签名过,你在删除 META-INF 目录时,它以前的签名也删除了。

另外,关于数字签名的更多东西请参考《 数字签名简介》和《 Java的数字签名和数字证书

你可能感兴趣的:(Android应用程序签名简介)