在Gradle中隐藏Keystore密码

转载请注明原作者,如果你觉得这篇文章对你有帮助或启发,不用请我喝咖啡:D

1.添加releaseConfig

1
2
3
4
5
6
7
8
9
signingConfigs{
releaseConfig{
storeFile file("mykey.keystore.jks")
storePassword "storepwd"
keyAlias "MyApp"
keyPassword "mypwd"

}
}

2.指向releaseConfig

在buildTypes中,release部分,添加sighingConfig 指向releaseConfig

1
2
3
4
5
6
7
8
buildTypes {
release {
minifyEnabled false
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.releaseConfig
}
}

3. 隐藏用户名

不想暴露用户名,修改步骤1中的storePassword和keyPassword为

1
2
3
4
5
6
7
8
9
signingConfigs{
releaseConfig{
storeFile file("hnt.keystore.jks")
storePassword System.console().readLine("\nKeyStore password: ")
keyAlias "HaniuTang"
keyPassword System.console().readLine("\nKey password: ")

}
}

这样使用命令行进行打包(assembleRelease命令)会让你输入用户名。

4.遇到的问题及解决

设置apk签名时从console中读取keyAlias以及密码,使用”system.console().readLine”方法,在编译时总是出现问题:

1
Cannot invoke method readLine() on null object"

使用命令行的时候没有问题,但是当使用android studio的时候,还是报这个错,可能是android studio默认设置gradle为deamon方式。

这之后再从命令行读取密码以及别名

Reference:
https://www.timroes.de/2013/09/22/handling-signing-configs-with-gradle/

5.最终脚本

最终,gradle脚本中的相关部分长这样:

1
2
3
4
5
6
7
8
9
10
11
12
signingConfigs{
releaseConfig{
storeFile file("mykey.keystore.jks")
storePassword
if(System.console() != null)
System.console().readLine("\nKeystore password: ")
keyAlias "MyApp"
keyPassword
if(System.console() != null)
System.console().readLine("\nKey password: ")
}
}