APK签名 需要使用以下几个工具:
其中apksigner和jarsigner作用类似,前者是谷歌官方提供的针对apk签名及验证的工具,功能更加强大。后者是java平台通用的jar包签名工具。在重签名时,选用二者中任意一个皆可以。对已签名过的apk进行重签名时,请删去META-INF目录下的*.MF,*.SF,*.RSA文件,之后执行重签名即可。
keytool
keytool是用来管理密钥和证书的工具,它允许用户管理自己的公钥/私钥对及与之相关联的证书。同时,它也允许用户以证书的形式来存储通信节点的公钥。证书是一个实体(人或公司)的数字签名的声明。当数据被数字签名时,签名可以被验证,以检查数据的完整性和可靠性。完整性表示数据没有被修改或篡改,可靠性意味着数据的确是来自创造并对其签名的一方。
keytool -genkeypair -keystore demo.jks(或者demo.keystore) -alias luis -validity 10950
上述命令上将生成一个名为的demo.keystore,其中包含别名为luis的
jarsigner
jarsigner 是一个为jar包生成签名并验证签名及jar包完整性的工具。注意:在jdk7及以上版本中执行jarsigner命令时,务必添加上-digestalg SHA1 -sigalg MD5withRSA
参数,以修改jdk7默认digest算法sha256为sha1,修复Android低版本(4.2以下)出现的问题。
jarsigner -keystore demo.keystore -digestalg SHA1 -sigalg MD5withRSA -sigfile CERT -signedjar out.apk in.apk youralias
zipalign
zipalign是一款对APK文件进行优化的工具。APK文件本质上是一个zip压缩文档,经过优化能使包内未压缩的数据有序的排列,从而减少应用程序运行时的内存消耗。在使用jarsigner对APK重签名之后,可以使用该工具优化已签名APK文件。
zipalign -v 4 in.apk out.apk //执行4字节对齐优化操作
zipalign -c -v 4 in.apk //检查当前APK是否已经执行过Align优化
apksigner
apksigner是一款在Android build tools 24.0.3及以上版本中提供的对apk文件签名以及验证签名信息的工具,它与jarsigner的作用类似,但比后者功能更加强大。注意在使用apksigner前,请先对APK执行zipalign,而不能在之后执行zipalign操作,这一点与jarsigner不同。
apksigner sign --ks demo.jks --out out.apk in.apk