Android gradle 自动签名

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");
       }
    }

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

你可能感兴趣的:(android,备忘,android自动化构建)