在Android中使用 apksigner 和 APK 签名方案 v2

62 篇文章 1 订阅
5 篇文章 0 订阅

Android 7.0 中引入了 APK 签名方案 v2,以更加重要地保护 apk 文件。之后,在 Android 9.0 中引入了 APK Signature Scheme v3,在 Android 11.0 中引入了 APK Signature Scheme v4。

~ 谷歌的签名验证过程 ~

在 APK Signature Scheme v2 之前,签名是基于 Signed JAR 使用 jarsigner,从 v2 开始开始基于 apksigner。

那么,在哪些情况下我们使用 apksigner 进行签名呢?

  1. 如果在构建应用程序时选择了 Signature Versions v2 选项。(APK 签名方案 v2)
  2. 如果在构建应用程序时将 targetSdkVersion 设置为高于 30

对于上述情况,必须使用 apksigner 进行签名。使用 jarsigner 签名时,应用程序安装和运行没有大问题,但在 Google Play Console 上上传应用程序时可能会出现错误。

如何检查应用程序的签名方案版本

1.从Android工作室检查

如果在“生成签名包或 APK”中选中“V2(完整 APK 签名)”,则为 V2 版本

~Androidstudio 中的签名版本选择~

2.从命令检查它

java -jar [apksigner.jar 路径] verify -v --print-certs [应用LIAPP之前的Apk路径]

例如)C:>java -jar D:\android\sdk\build-tools\28.0.0\lib\apksigner.jar verify -v --print-certs C:\app-release.apk

如果使用 v2 方案(APK 签名方案 v2)验证为真,则为 V2,为假则为 V1。

zipalign

重要的一点是,如果您使用 apksigner,则只能在 APK 文件签名之前执行 zipalign。如果您使用 apksigner 对 APK 进行签名并对 APK 进行进一步更改,则其签名将失效。因此,zipalign 只能在签署 apk 之前执行。

zipalign -f -v 4 “需要压缩对齐的apk文件路径” “压缩对齐后要保存的apk文件路径”

~windows cmd 中的-zipalign 命令~

使用 apksigner 签名

在完成的 zipalign 文件上使用 apksigner 签名很简单,如下所示。

[视窗]

java -jar [APKSIGNER_PATH] 符号 -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-key-alias [ALIAS_NAME] [APK_FILE_PATH]

[ 苹果电脑 ]

[APKSIGNER_PATH] 符号 -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-key-alias [ALIAS_NAME] [APK_FILE_PATH]

[APKSIGNER_PATH] 是 apksigner 所在的位置。apksigner 工具,在 Android SDK Build Tools 的 24.0.3 及更高版本中可用,您可以按如下方式检查它。

  1. 在Android Studio Tool菜单中检查SDK路径=> SDK Manager => Android SDK Location path check

  2. 从SDK目录检查Apksigner文件 SDK目录=> build-tools目录=>buildToolsVersion目录=>lib目录=>检查apksigner.jar文件如果是MAC,从buildToolsVersion目录检查apksigner文件

执行命令后,将出现一条输入密钥库密码的消息。

签名者 #1 的密钥库密码:

键入 keystore 密码时,密码字符不会显示在屏幕上,而是实际输入。输入正确的密钥库密码后,您可以继续下一步。如果密钥库密码和密钥密码相同,则签名将立即进行。如果密钥库密码和密钥密码不同,系统会提示您输入密钥密码。

签名者 #1 的密钥“KEY_NAME”密码:

输入正确的密钥密码后,将继续进行签名并“签名”。签名完成后会显示。

~windows cmd中的apksigner命令~

如果在命令行中使用-ks-pass pass: 和-key-pass:pass 选项,可以预先设置密码和命令。如果使用此选项,则不会显示输入密码的消息,而是自动输入。

[视窗]

java -jar [APKSIGNER_PATH] 符号 -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-pass pass:“keystore_password” --key-pass pass:“key_password” --ks-key-alias [ALIAS_NAME ] [APP_FILE_PATH]

[ 苹果电脑 ]

[APKSIGNER_PATH] 符号 -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-pass pass:“keystore_password” --key-pass pass:“key_password” --ks-key-alias [ALIAS_NAME] [APP_FILE_PATH ]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值