生成签名文件
Build—Generate Signed Apk…,如下图:
之后一路next,最后会在你之前选择的存储文件的文件夹中生成一个.jks文件。jks就是java key store的缩写。
这里演示,密码全部使用654321
查看jks文件的指纹证书MD5值
进入到你的.android目录:即AVD所在目录,也就是ANDROID_SDK_HOME这个环境变量所在的目录。格式:
keytool -v -list -keystore .jks所在的路径
G:\Andriod\.android>keytool -v -list -keystore "D:\Program Files\Android\key\hgy413.jks"
输入密钥库口令:
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: hgy413
创建日期: 2018-9-28
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=hgy413, OU=hgy413, C=cn
发布者: CN=hgy413, OU=hgy413, C=cn
序列号: 16f45539
有效期开始日期: Fri Sep 28 12:21:04 CST 2018, 截止日期: Tue Sep 22 12:21:04 CST 2043
证书指纹:
MD5: 2F:95:E2:2B:2A:E3:E5:CE:7D:51:9F:D0:70:C7:8E:2A
SHA1: B5:E2:CE:B3:5F:B9:D1:B7:44:38:99:55:A1:BF:A6:3F:DE:80:E0:3C
SHA256: DE:48:9E:4A:84:15:B5:2E:3A:61:26:58:E9:F7:F4:FD:92:0A:9B:9A:A8:5D:58:FB:4B:23:3D:80:66:DB:F4:8E
签名算法名称: SHA256withRSA
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: AF E9 F4 9B 0A A4 65 23 13 E5 36 73 39 C8 F4 63 ......e#..6s9..c
0010: D9 6B 03 1C .k..
]
]
*******************************************
*******************************************
注意,因为我的jks路径带了空格,所以要双引号括起来。输入密钥时不会显示,输完回车即可。
APK is not signed
release未设置签名时会报以下错误:
the apk for your currently selected variant(app-release-unsigned.apk)is not signed. Please specity a signing configuration for this variant(release)
此时会有以下提示:
apk图标会有小红叉,并有Error提示,点击Fix或者File–>Project Structure–>Signing打开下图界面:
点击中间的+号,并输入和前面创建签名一样的信息。
切换到Build Type,选择release,将Signing Config选择hgy413:
sync即可。
注意,如果Signing中配置的密码不正确,在真正运行到AVD上时会报错。
另一种添加方式:
比如我们在app/src目录下创建一个叫key的目录,把hgy413.jks拷贝到此目录下,
然后在对应module的build.gradle中android根节点添加:
signingConfigs {
debug {
File strFile = new File("./src/key/hgy413.jks")
storeFile file(strFile)
storePassword "654321"
keyPassword "654321"
keyAlias "hgy413"
// println strFile.absolutePath;
//println strFile.absolutePath;
}
release {
File strFile = new File("./src/key/hgy413.jks")
storeFile file(strFile)
storePassword "654321"
keyPassword "654321"
keyAlias "hgy413"
// println strFile.absolutePath;
}
}
并在同级的buildTypes节点的release下增加:
signingConfig signingConfigs.release
如下图:
其他
有时设置完这一切后,你会发现还是提示错误:
Could not get unknown property 'hgy413' for SigningConfig container of type org.gradle.api.internal.FactoryNamedDomainObjectContainer.
这时你要留意下,.gradle文件中signingConfigs这个配置块是否在buildTypes前面?,如果不是,就把它调整到前面。