Android gradle 自动签名

来源:互联网 发布:程序员编程动漫 编辑:程序博客网 时间:2024/05/18 03:17

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.keystoreSTORE_PASSWORD=yourStorePwdKEY_ALIAS=yourKeyAliasKEY_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");       }    }

以上就完成了自动签名的流程.如需要为每个环境使用不同的签名,只需建不同的配置文件即可.

0 0
原创粉丝点击