gradle进行apk签名打包

默认为debug mode, 使用的签名文件在: $HOME/.android/debug.keystore

Android系统在安装APK的过程中,会对APK进行签名检验, 校验通过后才能安装成功.

数字摘要

1. 唯一性

在不考虑碰撞的情况下, 不同的数据的计算出的接要是不同的.

2. 固定长度

比较常用的Hash算法有MD5和SHA1, MD5的长度是128位, SHA1的长度是160位.

3.不可逆性

签名和校验的大体过程

签名就是要摘要的基础上再进行一次加密, 对摘要加密后的数据就可以当作数字签名, 在安装Apk时需要对签名进行验证, 验证通过才能继续安装.

gradle进行apk签名打包_第1张图片

数字证书

数字证书是身份认证机构颁发的, 接收到消息后, 先向CA机构验证证书的合法性, 再进行签名校验.

需要注意的是, Apk的证书通常是自签名的, 也就是由开发者自己制作, 没有向CA机构申请, 这也是对第三方apk重新签名后, 还能继续在没有安装这个apk的系统中继续安装的原因.

keystore和证书格式

我们在对apk签名时并没有直接指定私钥 公钥和数字证书, 而是使用keystore文件, 这些信息都包含在了keystore文件中.根据编码不同, keystore文件分为很多种, Android使用的是Java标准keystore格式JKS(Java Key Storage).

keystore使用的证书标准是X.509, X.509标准也有很多种编码格式, 常用的有两种: pem( Privacy Enhanced Mail)和der(Distinguished Encoding Rules), JKS使用的是der格式.

jarsigner和apksigner

Android提供了两种对Apk的签名方式, 一种是基于JAR的签名方式( 使用keystore文件), 另一种是基于Apk的签名方式( 除了支持keystore,还支持直接指定pem证书文件和私钥进行签名),

我们通过keytool或者AS生成一个keystore的时候,  输入的keystore的密码是用于保护keystore本身的, 另外的输入的alias和key是用于密钥和证书的.

签名相关的命令

● jarsigner签名
jarsigner -keystore keystore_file -signedjar signed.apk unsigned.apk alias_name -storepass pwd

● apksigner签名
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk

● 查看keystore文件
keytool -list  -v -keystore keystore_file -storepass pwd

● 查看apk证书
keytool -printcert -jarfile apk

● 查看DER格式证书(META-INFO/CERT.RSA)
openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs -text

● 查看PEM格式证书
openssl x509 -in cert.x509.pem -text -noout

● apksigner检查apk是否签名,以及查看证书SHA1值
apksigner verify -v --print-certs

生成数字证书

cd到项目目录, 证书在目录生成

 keytool -genkey -v -keystore dao_flashcard.keystore -alias flashcard -keyalg RSA -validity 20000

(1) -genkey表示执行的是生成数字证书操作, -v表示将生成证书的详细信息打印出来.

(2) -keyalg RSA表示生成密钥文件所采用的算法是RSA

(3)-validatity 20000表示该证书的有效期为20000天.

 

执行gradle 命令, $ gradlew assembleRelease 

你可能感兴趣的:(android)