gradle中隐藏Keystore密码
2016-04-29 本文已影响2689人
DevWang
该博客是对gradle整理汇总这篇文章的补充
1、一般写法
通常签名的配置方法为:
android {
signingConfigs {
config_release {
keyAlias 'releaseKey'
keyPassword '123456'
storePassword '123456'
storeFile file('key/releaseKey.jks')
}
}
}
2、改良写法:
把签名信息(主要是密码)写在gradle中是不安全的,我们可以把这些签名信息添加到gradle.properties:
RELEASE_KEY_PASSWORD = 123456
RELEASE_KEY_ALIAS = releaseKey
RELEASE_STORE_PASSWORD = 123456
RELEASE_STORE_FILE = key/releaseKey.jks
然后在build.gradle中引用即可:
android {
signingConfigs {
config_release {
storeFile file(RELEASE_STORE_FILE)
keyAlias RELEASE_KEY_ALIAS
storePassword RELEASE_KEY_PASSWORD
keyPassword RELEASE_STORE_PASSWORD
}
}
}
我们也可以将签名信息添加到local.properties中,然后在build.gradle中读取.
3、更安全写法:
签名密码的私密性是最关键的,所以我们要是能把它改成每次打包时手动输入密码才是最安全的:
android {
signingConfigs {
config_release {
storeFile file(RELEASE_STORE_FILE)
keyAlias RELEASE_KEY_ALIAS
storePassword System.console().readLine("\\\\nKeystore password:")
keyPassword System.console().readLine("\\\\nKey password:")
}
}
}
这样在执行 打包命令时,就会被要求输入密码.
4、遇到的问题及解决
问题描述:
设置apk签名时从console中读取keyAlias以及密码,使用”system.console().readLine”方法,在编译时总是出现问题:
使用命令行编译的时候没有问题,但是当使用Android studio命令编译的时候,会报这个错.
解决方法:
步骤1:去除优化gradle设置的./gradle/gradle.properties中设置damon为true的这行语句:
org.gradle.daemon=true
步骤2:加上判断console是否为空的语句:
if (System.console() != null)
这之后再从命令行执行,读取手动输入的密码.
#5、最终脚本
最终,gradle脚本中的相关部分长这样:
android {
signingConfigs {
config_release {
storeFile file(RELEASE_STORE_FILE)
keyAlias RELEASE_KEY_ALIAS
def sPassword = null
def kPassword = null
if (System.console() != null)
sPassword = System.console().readLine("\\\\nEnter store password ")
if (System.console() != null)
kPassword = System.console().readLine("\\\\nEnter key password ")
keyPassword kPassword
storePassword sPassword
}
}
}
ps:此种用法在命令行中执行没问题,但是用gradle自带命令执行报错,提示找不到keyPassword,这也是我之前推荐大家使用命令行编译、打包的原因!
至此,文章结束,希望此文能帮助到你,如果对此文有不同见解,欢迎直接评论!
参考文案:
Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包
Android Studio 在Gradle中隐藏Keystore密码