Android 签名、空包签名 、jarsigner、apksigner
jarsigner是JDK提供的针对jar包签名的通用工具,
位于JDK/bin/jarsigner.exe
apksigner是Google官方提供的针对Android apk签名及验证的专用工具,
位于Android SDK/build-tools/SDK版本/apksigner.bat
jarsigner:
jarsigner签名空包执行的命令:
jarsigner -verbose -keystore [your signature storage path] -signedjar [signed filename] [unsigned filename] [alias]
[your signature storage path]-keystore文件路径
[signed filename]-签名以后的apk
[unsigned filename]-要签名的apk
[alias] -keystore中的别名!
为了防止环境变量配置导致的问题,请将待签名的空包“xx.apk”和待签名的私钥keystore拷贝到JDK下的bin目录下。
androidStudio查看配置的jdk路径:
把jks与空包同时放入JDK下的bin目录下。
jks的别名用自己的,这里用xxx代替。
cmd进入到JDK下的bin目录下,执行命令:
jarsigner -verbose -keystore xxx.jks -signedjar OppoSignVerify_signed.apk OppoSignVerify.apk xxx
输入密码签名完成
JDK下的bin目录下生成已签名的apk包。
apksigner:
apksigner签名空包执行的命令:
apksigner sign --ks [your private key storage path] --ks-key-alias [your key alias] --out [path to signed file] [path to unsigned file]
[your private key storage path]-jks文件路径
[your key alias]-别名
[path to signed file]-签名以后的apk输出路径
[path to unsigned file]-要签名的apk路径
androidStudio查看配置的sdk路径:
cmd进入到SDK\build-tools\对应版本 的目录下,执行命令:(C:\Users\guowe\Desktop\signDir是自己未签名和jks所在的路径)
apksigner sign --ks C:\Users\guowe\Desktop\signDir\xxx.jks --ks-key-alias xxx --out C:\Users\guowe\Desktop\signDir\signed.apk C:\Users\guowe\Desktop\signDir\OppoSignVerify.apk
Keystore password for signer #1: (输入签名密码)后回车,签名完成
目录下生成已签名的apk包
同时会生成.idsig 文件。
APK 签名方案 v4 是在 Android 11
中引入的。Android 11 将签名存储在单独的 [apk name].apk.idsig 文件中。
具体看:
Android 应用签署
Android不同的签名方式讲解
apksigner签名过程中,出现的话
按照提示在命令前加上.\可以执行成功。
.\apksigner sign --ks.....
--------------------------------------------------------------------------------------------
用apksigner打小米签名空包遇到的问题:
https://global.developer.mi.com/document?doc=appManagement.emptyPackageSignatureGuide
下载了小米的空包:com.xiaomi.getapps.signature.verification.apk
按照示例命令签名:
apksigner sign --ks C:\Users\YourName\keystore-test.jks --ks-key-alias keystore-test --out C:\Users\YourName\signed.apk C:\Users\YourName\com.xiaomi.getapps.signature.verification.apk
输出的apk也按照signed.apk 这样命名。但把签完名的apk提交时报错:
解决方式:
把签完名的apk也用com.xiaomi.getapps.signature.verification.apk来命名。。。。。。
也就是:
apksigner sign --ks C:\Users\YourName\keystore-test.jks --ks-key-alias keystore-test --out C:\Users\YourName\com.xiaomi.getapps.signature.verification.apk C:\Users\YourName\com.xiaomi.getapps.signature.verification.apk
把最后生成的com.xiaomi.getapps.signature.verification.apk 再提交就验证通过了。。。。。。。。。。。。。。。。。。。。。。。
参考:
Android中APK签名工具之jarsigner和apksigner详解
https://cloud.tencent.com/developer/article/1743269