app签名

ECDSA数字签名算法

Android N Signature Scheme v2 渠道打包

如果您使用 APK Signature Scheme v2 签署您的应用,并对应用进行了进一步更改,则应用的签名将无效。出于这个原因,请在使用 APK Signature Scheme v2 签署您的应用之前、而非之后使用 zipalign 等工具。 如需了解详细信息,请阅读相关的 Android Studio 文档,这些文档介绍了如何在 Android Studio 中签署应用以及如何使用 Android Plugin for Gradle 为签署应用配置构建文件

APK文件格式

apk 本身是个 zip 格式, 格式可以参考http://blog.sina.com.cn/s/blog_4c3591bd0100zzm6.html.

apksigner

https://www.jianshu.com/p/4a07d902066f

apksigner.bat sign –ks 签名文件 –ks-pass 密码 –ks-key-alias 别名

Sdk\build-tools\28.0.3>apksigner.bat sign –help

Sdk\build-tools\28.0.3\lib\apksigner.jar

–ks 你的jks路径 //jks签名证书路径

–ks-key-alias 你的alias //生成jks时指定的alias

–ks-pass pass:你的密码 //KeyStore密码

–key-pass pass:你的密码 //签署者的密码,即生成jks时指定alias对应的密码

–out output.apk //输出路径

input.apk //被签名的apk

示例:

java -jar apksigner.jar sign  --ks key.jks  --ks-key-alias releasekey  --ks-pass pass:pp123456  --key-pass pass:pp123456  --out output.apk   input.apk

java -jar Sdk\build-tools\28.0.3\lib\apksigner.jar sign --ks $keystoreFilePath --ks-key-alias $keyAlias  --ks-pass pass:$ksPass  --key-pass pass:$keyPass  --out xxx\output.apk input.apk

数字签名

数字签名和签名验证的大体流程如下图所示: image

Android 签名机制 v1、v2、v3

Android v1、v2、v3签名详解

  • v1 方案:基于 JAR 签名。
  • v2 方案:APK 签名方案 v2,在 Android 7.0 引入。
  • v3 方案:APK 签名方案v3,在 Android 9.0 引入

其中,v1 到 v2 是颠覆性的,主要是为了解决 JAR 签名方案的安全性问题,而到了 v3 方案,其实结构上并没有太大的调整,可以理解为 v2 签名方案的升级版。

v1 到 v2 方案的升级,对开发者影响是最大的,就是渠道签署的问题。v2的签名也是为了让不同渠道、市场的安装包有所区别,携带渠道的唯一标识,也即是我们俗称的渠道包。好在各大厂都开源了自己的签渠道方案,例如:Walle(美团)、VasDolly(腾讯)都是非常优秀的方案。

新一代开源Android渠道包生成工具Walle