1.签名的意义
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.签名的步骤
a.创建key
b.使用步骤a中产生的key对apk签名
3.具体操作
方法一:命令行下对apk签名(原理)
1)创建key,需要用到keytool.exe (位于jdk1.6.0_24jrein目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于 jdk1.6.0_24in目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入
keytool -genkey -v -aliasCERT-keyalg RSA -keysize 2048 -validity 10000 -keystoreCERT.keystore
创建过程需要输入一些标识信息和密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改):
CERT.keystore —- 证书保存的文件名
CERT —- 证书的别名
10000 —- 10000天的有效期
2048 —- 默认为1024 bits,Android 建议使用2048 bits或更高
其他的详细信息可以使用keytool -help查看帮助
证书生成后使用如下命令可以查看证书的信息:
keytool -list -aliasCERT-keystoreCERT.keystore
2)使用jdk的jarsigner工具对apk文件签名
jarsigner -verbose -keystoreCERT.keystoreto_sign.apkCERT
jarsigner -verbose -keystore d:project360Wallpaper.keystore -signedjar d:qihusign.apk d:Qihuunsign.apk cret
签名过程需要输入证书的密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改):
CERT.keystore —- 证书保存的文件名
CERT —- 证书的别名
待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。
如果不想创建过程输出太多信息,可以删除“-verbose” 。
上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signed.akp,
只需将 to_sign.apk 改为-signedjar to_sign.apk signed.akp即可。
签名后可以使用如下命令验证是否签名成功:
jarsigner -verify to_sign.apk
如果需要查看更详细的验证信息,可修改为:
jarsigner -certs-verbose -verify to_sign.apk
注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。
3)使用android sdk的zipalign工具优化已签名的apk文件
zipalign -v 4unaligned.apk aligned.apk
注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME% oolszipalign.exe。
例子:
为APK重新生成签名
1)、将证书复制到与需要重新签名的apk文件相同的目录下
2)、进入该目录下执行以下语句
jarsigner -verbose -keystore CERT.keystore -signedjar weibo_signed.apk
netease_microblog_android_unsigned.apk CERT
命令解释:
jarsigner是Java的签名工具,JDK自带
-verbose参数表示:显示出签名详细信息
-keystore表示使用当前目录中的android.keystore签名证书文件。
–signedjar weibo_signed.apk netease_microblog_android_unsigned.apk表示签名后生成的APK名称为 weibo_signed.apk,未签名的APK Android软件名称为netease_microblog_android_unsigned.apk
CERT: 表示签名文件的别名,生成证书的时候有书写
执行以上操作之后在目录下生成了weibo_signed.apk ,经过自己签名的APK文件
参考资料
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。