android gradle 之 signingConfigs
条评论signingConfigs
是用来配置签名的信息, 该方法的参数为 NamedDomainObjectContainer<SigningConfig>
被 NamedDomainObjectContainer<T>
修饰的变量, 当我们在 gradle
中配置内容时, 我们可以定义一个代码块, 代码块的名字就是一个类名, 该类名会继承自T
当定义 signingConfings
时, 可以在 signingConfings
下面定义一个代码块, 名字可以随便写, 但是做好是定义一个有意义的名字
1 | android { |
或者可以根据不同的包定义不同的签名信息
1 | android { |
这里的 release
和 debug
都是 SigningConfig
的扩展类, SigningConfig
又继承自 DefaultSigningConfig
, 支持的属性如下:
属性 | 默认值 | 含义 |
---|---|---|
keyAlias | - | 签名别名 |
keyPassword | - | 签名的密码 |
storeFile | - | 签名文件的路径 |
storePassword | - | 签名文件的密码 |
storeType | jks | 签名类型 |
v1SigningEnabled | true | 是否支持v1签名 |
v2SigningEnabled | true | 是否支持v1签名 |
keyPassword
和storePassword
一般情况下都会将这两个密码设置为同一个
签名后的
apk
文件签名后的
apk
文件中会出现一个文件夹META-INF
, 该文件夹中包含了三个部分:MANIFEST.MF
该文件中保存的内容就是逐一遍历
apk
中所有的条目, 如果是目录就跳过, 如果是文件, 就是用SHA1
或者SHA256
消息摘要算法提取出该文件的摘要然后通过BASE64
编码后, 作为“SHA1-Digest”属性的值写入到 MANIFEST.MF 文件中的一个块中.CERT.SF
- SHA1-Digest-Manifest-Main-Attributes:对 MANIFEST.MF 头部的块做 SHA1(或者SHA256)后再用 Base64 编码
- SHA1-Digest-Manifest:对整个 MANIFEST.MF 文件做 SHA1(或者 SHA256)后再用 Base64 编码
- SHA1-Digest:对 MANIFEST.MF 的各个条目做 SHA1(或者 SHA256)后再用 Base64 编码
CERT.RSA
把之前生成的
CREF.SF
文件, 用私钥计算出签名, 然后将签名以及包含公钥信息的数字证书一同写入CERF-RSA
文件中保存.
<img src="/Users/xinxin/Desktop/截屏2020-06-25 上午11.09.27.png" alt="签名过程" style="zoom:50%;" />