一、为什么要重新签名?
APK文件在安装时,操作系统会根据签名去验证这个APK文件的完整性,而我们在做加固处理的时候,会对该APK文件中的classes.dex、AndroidManifest.xml等文件作出修改,这样APK文件的原签名就会失效,所以用户需要在下载加固包之后,重新进行签名。
因为签名需要使用用户自己的秘钥文件,所以我们无法替用户完成这个工作。
二、如何签名?
可以通过jarsigner、signapk、apksigner等工具对APK文件进行签名。其中jarsigner是JDK自带的一个签名工具,也可用于对jar文件进行签名。signapk是专门用于对APK文件进行签名的工具。apksigner支持更安全的APK Signature Scheme v2签名方式。
下面是在Windows环境下使用jarsigner进行签名的一个示例命令行:
打开CMD命令行,输入下述
jarsigner -verbose -keystore C:\Users\XXX.keystore -signedjar C:\Users\YYY_signed.apk C:\Users\YYY.apk ZZZ.keystore
1)jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来;
2)-keystore C:\Users\XXX.keystore 表示签名所使用的数字证书所在的完整路径名,C:\Users\XXX即指代该完整路径名,请根据实际情况进行替换;
3)-signedjar C:\Users\YYY_signed.apk C:\Users\YYY.apk 表示给YYY.apk签名,签名后的文件名称为YYY_signed.apk;这里使用的都是完整路径名。
4)最后面的ZZZ.keystore 表示证书的别名,对应于生成数字证书时-alias参数后面的名称
三、重要提示
上述示例仅供简单参考。
无论使用哪个工具都有很多的命令参数可以选择,用户应该根据自己的实际需要选用合适的工具和合适的命令行参数进行签名。