签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
apk文件签名主要分为三个步骤,证书的创建-->签名生成-->优化(可选)
前提是已经安装jdk并且已经添加到环境变量中。
证书的创建
keytool -genkey -v alias KeyName -keyalg RSA -keysize 2048 -validity 10000 -keystore KeyFileName.keystore
这行命令中一些重要的参数值说明如下:
KeyName:表示证书的别名
KeyFileName.keystore: 证书保存的文件名
10000: 表示证书的有效期,单位(天)
RSA:证书的加密类型,一般默认为RSA
其次在创建的过程中要填写一些基本的信息,证书密码等相关的信息。
证书生成后的查看
keytool -list -alias KeyName -keystore KeyFileName.keystore
对APK进行签名
jarsigner -verbose -keystore KeyFileName.keystore sign_apk_file.apk KeyName参数解释:
KeyFileName.keystore 已经生成号的证书
sign_apk_file.apk 需要签名的apk文件
KeyName 证书的别名
待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。
如果不想创建过程输出太多信息,可以删除“-verbose” 。
上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signed.akp,
只需将 signed.apk 改为
-signedjar signed.apk sign_old.akp即可。
签名后可以使用如下命令验证是否签名成功:
> jarsigner -verify signed.apk
如果需要查看更详细的验证信息,可修改为:
> jarsigner -certs -verbose -verify signed.apk
使用android sdk的zipalign工具优化已签名的apk文件
> zipalign -v 4 unaligned.apk aligned.apk
注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%\tools\zipalign。