apksigner V2签名
Android打渠道包时,经常先打一个母包
,解压这个母包,完成渠道信息的注入后,需要对APK重新签名,这时就会用到jarsigner
或者 apksigner
。
打包涉及到两个签名工具 jarsigner
、 apksigner
,其对应的签名方案如下:
- v1 方案:基于 JAR 签名,采用的签名工具为
jarsigner
- v2 方案:APK 签名方案 v2,在 Android 7.0 引入,采用的签名工具为
apksigner
- v3 方案:APK 签名方案v3,在 Android 9.0 引入,采用的签名工具为
apksigner
当前几乎所有的应用市场都要求采用V2以上签名方案,因此本文只介绍apksigner
工具:
如果了解 jarsigner V1 签名打包,可参考:
jarsigner 对APK签名:
https://blog.csdn.net/xiaxl/article/details/118800585
apksigner
是Android SDK中的一个签名工具,该工具的文件路径一般为 sdk\build-tools\28.0.3\lib
。
该工具所在的文件路径:因V2签名方案,于Android 7.0版本引入,所以Android SDK中build-tools 24.0.3
以上版本的lib
目录下才能找到apksigner.jar
工具。
- 使用.keystore签名文件
- 使用.x509.pem、.pk8签名文件
一、使用.keystore签名文件
使用签名工具 apksigner
使用.keystore
签名文件,对APK重新签名,使用方式如下:
// --ks [签名证书路径]
// --ks-key-alias [别名]
// --ks-pass pass:[KeyStore密码]
// --key-pass pass:[签署者的密码]
// --out [output.apk] [input.apk]
java -jar apksigner.jar sign --ks android.keystore --ks-key-alias cmccsdk --ks-pass pass:123456 --key-pass pass:123456 --out output.apk input.apk
验证APK对应的签名版本:
完成签名后,可以用以下命令查看APK采用的签名方案。
// 验证APK采用的是V1、V2 还是V3签名
apksigner verify -v test.apk
二、使用.x509.pem、.pk8签名文件
platform.x509.pem、platform.pk8
为Android系统的签名文件,因此使用platform.x509.pem、platform.pk8
为APK签名时,这个APK往往是系统APP
。
为系统APP签名,还有一种方案是:
将platform.x509.pem、platform.pk8
签名文件 转化为 .keystore
签名文件,然后 一、采用.keystore签名文件重签名 。
.pk8、.x509.pem转化为.keystore签名
可参考:
https://blog.csdn.net/xiaxl/article/details/107056180
// 1.Linux平台签名
// 将 libconscrypt_openjdk_jni.so 拷贝当前目录 cp prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so
// 将 signapk.jar 工具拷贝到当前目录
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 input.apk
output.apk
// 2.Mac平台签名
// 将 libconscrypt_openjdk_jni.dylib 拷贝当前目录 cp /prebuilts/sdk/tools/darwin/lib64/libconscrypt_openjdk_jni.dylib
// 将 signapk.jar 工具拷贝到当前目录
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 input.apk
output.apk