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 签名。