Android gradle 自动签名
上篇博客讲了如何自动生成多环境的包,但是现在生成的apk除了debug之外都是unsign的.也是没有签名.还需要对jar包重新进行一次签名.比较费时,其它时gradle已经可以实现在生成apk时自动签名.只是需要手动配置一下.流程也不复杂.只需要在修改一下build.gradle文件
实现基本功能
在build.gradle的adnroid层级中,加入如下配置
signingConfigs {
debugConfig {
storeFile file("yourDebugApp.keystore")
storePassword "your password"
keyAlias "your alias"
keyPassword "your password"
}
testConfig {
storeFile file("yourTestApp.keystore")
storePassword "your password"
keyAlias "your alias"
keyPassword "your password"
}
releaseConfig {
storeFile file("yourRelaseApp.keystore")
storePassword "your password"
keyAlias "your alias"
keyPassword "your password"
}
}
并修在buildType中加入
buildTypes {
//开发环境
debug {
//实现自动签名
signingConfig signingConfigs.debugConfig
}
//测试环境
Test {
signingConfig signingConfigs.testConfig
}
//生产环境
release {
signingConfig signingConfigs.releaseConfig
}
}
自动签名进阶
安照上面的配置,只要运行gradle build,就是自动生成签名后apk,但是把keystore文件在密码放在gradle文件明显是不安全的,做代码管理时,是需要把这个build.gradle文件也纳入管理范围的.所以为了安权起见,我们可以装证书相关的信息放在一个配置文件里,每次build的时候,使用gradle读取配置文件,这个在做代码管理时,把配置文件排除在外,就可以了.下面我们就来实现这个功能.
建立配置文件
建立sign.properties文件,内容如下.
STORE_FILE=yourAppStroe.keystore
STORE_PASSWORD=yourStorePwd
KEY_ALIAS=yourKeyAlias
KEY_PASSWORD=yourAliasPwd
读取配置文件并设置SigningConfig
def getSignInfo(propFileName) {
def com.android.build.gradle.internal.dsl.SigningConfig signingConfig = new com.android.build.gradle.internal.dsl.SigningConfig("signInfo")
File propFile = file(propFileName);
if (propFile.exists()) {
def Properties props = new Properties()
props.load(new FileInputStream(propFile))
signingConfig.storeFile = file(props['STORE_FILE'])
signingConfig.storePassword = props['STORE_PASSWORD']
signingConfig.keyAlias = props['KEY_ALIAS']
signingConfig.keyPassword = props['KEY_PASSWORD']
println('signConfig is exits')
} else {
println('sign config is null')
signingConfig = null
}
return signingConfig;
}
调用方式
删除signingConfigs,修改buildTypes,demo如下
buildTypes {
//开发环境
debug {
//实现自动签名
signingConfig getSignInfo("../sign.properties");
}
//测试环境
Test {
signingConfig getSignInfo("../testsign.properties");
}
//生产环境
release {
signingConfig getSignInfo("../sign.properties");
}
}
以上就完成了自动签名的流程.如需要为每个环境使用不同的签名,只需建不同的配置文件即可.