Android v1 v2签名实现流程

一、流程图

graph LR
A[生成密钥] --> B[生成v1签名]
A --> C[生成v2签名]

二、详细步骤

1. 生成密钥

首先,我们需要生成一个密钥用于签名。Android Studio 提供了一个名为 "keytool" 的工具,可以帮助我们生成密钥。

keytool -genkey -v -keystore my-key.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000
  • -genkey 表示生成密钥的命令
  • -v 表示输出详细信息
  • -keystore my-key.keystore 表示指定生成的密钥存储文件为 "my-key.keystore"
  • -alias my-alias 表示指定密钥的别名为 "my-alias"
  • -keyalg RSA 表示指定密钥算法为 RSA
  • -keysize 2048 表示指定密钥长度为 2048
  • -validity 10000 表示指定密钥的有效期为 10000 天

执行完这条命令后,会生成一个名为 "my-key.keystore" 的密钥存储文件,其中包含了我们生成的密钥。

2. 生成v1签名

Android v1 签名是传统的签名方式,可以在 Android 9 及更早版本的设备上使用。

我们可以使用 "jarsigner" 工具来生成 v1 签名。首先,我们需要将生成的密钥存储文件与 APK 文件进行签名。

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-key.keystore my-app.apk my-alias
  • -verbose 表示输出详细信息
  • -sigalg SHA1withRSA 表示使用 SHA1withRSA 算法进行签名
  • -digestalg SHA1 表示使用 SHA1 算法进行摘要
  • -keystore my-key.keystore 表示指定密钥存储文件为 "my-key.keystore"
  • my-app.apk 表示要签名的 APK 文件
  • my-alias 表示要使用的密钥的别名

执行完这条命令后,会在 APK 文件所在的目录下生成一个新的已签名的 APK 文件。

3. 生成v2签名

Android v2 签名是 Android 7.0 (API level 24) 及更高版本的新签名方式。它可以提供更好的安全性和效率。

我们可以使用 "apksigner" 工具来生成 v2 签名。与生成 v1 签名不同的是,生成 v2 签名需要使用一个私钥文件和一个证书文件。

首先,我们需要将密钥存储文件转换为私钥文件和证书文件。

keytool -importkeystore -srckeystore my-key.keystore -destkeystore my-key.pk8 -deststoretype PKCS8
keytool -exportcert -rfc -keystore my-key.keystore -alias my-alias -file my-cert.pem
  • -importkeystore 表示导入密钥存储文件
  • -srckeystore my-key.keystore 表示指定源密钥存储文件为 "my-key.keystore"
  • -destkeystore my-key.pk8 表示指定目标私钥文件为 "my-key.pk8"
  • -deststoretype PKCS8 表示指定目标私钥文件的存储类型为 PKCS8
  • -exportcert 表示导出证书
  • -rfc 表示以 PEM 格式输出证书
  • -keystore my-key.keystore 表示指定密钥存储文件为 "my-key.keystore"
  • -alias my-alias 表示指定密钥的别名为 "my-alias"
  • -file my-cert.pem 表示指定导出的证书文件为 "my-cert.pem"

执行完这两条命令后,会生成一个名为 "my-key.pk8" 的私钥文件和一个名为 "my-cert.pem" 的证书文件。

然后,我们可以使用 "apksigner" 工具来生成 v2 签名。