我们带着问题查看本文,可能会事半功倍哦!
1,app为什么要签名?签名是什么?
2,keystore和jks的区别是什么?
3,V1和V2的区别是什么?
4,怎么生成签名文件?怎么给app签名?
作为实用主义者,我们倒着来一个一个解决问题。
相信使用过AS的朋友,看图就明白要怎么操作了:
注意:
1,new key store中的store path,store password,alias,password要记住哦,一般年限默认选择25年即可,certificate一般只填Country Code即可,如:cn (中国)即可;
2,xxx.jks就是我们生成的签名文件;
3,我们默认选择V1即可,就会在apk destination folder 指定目录下生成我们签名过的apk。
小提示:查看签名文件MD5等信息
口令是 key store password,(输入时,不会显示,输入完成后直接 回车)。
为了不用每次打签名包时再次输入store path,store password,alias,password,我们需要把签名文件配置到我们项目中:
方法一:AS
输入对应的信息即可,这样在主项目的build.gradle中就会生成
signingConfigs {
release {
keyAlias xxx
keyPassword xxx
storeFile file('hdl_sign.jks')
storePassword xxx
}
}
方法二:当然就是我们直接在主项目的build.gradle中的android节点下,手写signingConfigs配置;
我们想要用命令行 “gradle assemblerelease” 打签名包,还需这行代码
buildTypes { release { signingConfig signingConfigs.release } }
是用来指定build release包的签名为对应的signingConfigs下的release签名。
这样我们就大功告成啦!可以打包出我们想要的带有签名的apk了。
进一步完善:
大家项目一般会托管到github等,有时也会开源出去,那么jks的安全性就要注意了。
我们可以把keyAlias,keyPassword,storePassword 放到local.properties里,(因为该文件一般放android sdk和ndK的本地路径,所以改文件是设置 上传忽略的);这样我们在设置signingConfigs就这可以这样写:
local.properties里
ndk.dir=D\:\\androidsdk\\ndk-bundle sdk.dir=D\:\\androidsdk KEYSTORE_PASSWORD=xx KEY_PASSWORD=xx KEY_ALIAS=xxbuild.gradle里
signingConfigs {
release {
keyAlias keystoreAlias
keyPassword keystoreAliasPSW
storeFile file('hdl_sign.jks')
storePassword keystorePSW
}
}
def keystorePSW = '' def keystoreAlias = '' def keystoreAliasPSW = '' // default keystore file, PLZ config file path in local.properties Properties properties = new Properties() // local.properties file in the root director properties.load(project.rootProject.file('local.properties').newDataInputStream()) keystorePSW = properties.getProperty("KEYSTORE_PASSWORD") keystoreAlias = properties.getProperty("KEY_ALIAS") keystoreAliasPSW = properties.getProperty("KEY_PASSWORD")
这样我们就可以放心的上传和使用签名了。
网友提供了介绍: https://blog.csdn.net/lonewolf521125/article/details/74535413;
我进行了测试,确实如他所说,所以这里我直接贴出结:
一定可行的方案: 只使用 v1 方案
不一定可行的方案:同时使用 v1 和 v2 方案
对 7.0 以下一定不行的方案:只使用 v2 方案
keystore 是Eclipse 打包生成的签名,而 jks是Android studio 生成的签名!都是用来打包的,并保证应用的唯一性!这就是他们的最大的区别!
备注:很多第三方市场,我们上传apk的时候,他们只支持keystore,需要我们把.jks签名转化为.keystore!
jks:java key store的简称。
https://blog.csdn.net/donkor_/article/details/53487133