前言
apk更新之前需要做安全检测,检测之前一版会做加固处理,加固后还需要重新进行签名。本文介绍一下v1签名和v1+v2签名两种方式。
有文章说需要把apk原来的签名文件,即META-INF文件夹删除,实测不删好像也不会影响。
签名之前需要准备好keystore文件、加固后的apk包
v1签名
v1签名实际是使用jarsigner签名
基本语法如下:
jarsigner -verbose -keystore $1 -storepass $2 -signedjar $3 $4 $5 -digestalg SHA1 -sigalg MD5withRSA
- $1:keystore文件路径
- $2:keystore文件密码,如果命令中没带,回车后系统会提示你输入对应密码
- $3:签名后apk包路径
- $4:要签名的apk包路径
- $5:keystore的别名
示例如下:
jarsigner -verbose -keystore my-release-key.jks -storepass pass -signedjar demo_signed.apk demo.apk alias_name -digestalg SHA1 -sigalg MD5withRSA
v1+v2签名
v1+v2签名就是使用apksigner签名,需要使用到apksigner.jar。这个jar包可以在SDK目录下获取,比如 ~\Android\Sdk\build-tools
可以找到几个版本,选择最新的版本即可,拷贝到apk同一目录。
其基本语法如下:
java -jar apksigner.jar sign --ks $1 --ks-key-alias $2 --out $3 $4
- $1:keystore文件路径
- $2:keystore的别名
- $3:签名后apk包路径
- $4:要签名的apk包路径
此时需要输入keystore文件的密码
示例如下:
java -jar apksigner.jar sign --ks my-release-key.jks --ks-key-alias alias_name --out demo_signed.apk demo.apk
验证签名是否成功命令
java -jar apksigner.jar verify -v --print-certs $1
- $1:签名后apk包路径
示例:
java -jar apksigner.jar verify -v --print-certs demo_signed.apk
如果显示v1 scheme和v2 scheme都成功即可