煎饼

煎饼为你分享Android有关的技术文章
不断分享,点滴积累,共同提高

关注微信公众号[developers]
更快的了解新的技术动态

在Gradle中隐藏签名所需密钥库信息

在开发中,尤其是在协同开发中,一般都使用版本控制系统(如Git等)来管理代码,在这种情况下为了安全保证App的签名证书等信息不被同时提交到仓库,都会做一些特别处理。网上的基本都类似,来看常用两种方式:

第一种:

将密钥库信息写在gradle.properties中,在signconfigs中直接配置。

第二种:

新建一个sign.properties文件来保存签名所需密钥库信息,然后在build.gradle中去读取处理。

这两种方法的具体实现在网上都能很容易搜到,不具体说明,但是这两种方法对我来说用起来都有不足之处。一般我会在gradle.properties文件中配置一些库文件版本号、sdk版本号等共用信息,需要上传到仓库中,所以不能将密钥库信息保存在这个文件中。新建sign.properties的方式编译debug版本和release版时不是很方便。所以自己实现了一种方式,用起来比较简单方便,而且也可以使用这个方式实现更多的配置。

我的方法

1、新建sign.config文件,将密钥库信息写在此文件中,并在.gitignore中配置,保证此文件不上传到仓库中。

为了在build.gradle中解析方便,这里写成json格式。

{
    "storeFile": "/Users/jabin/AndroidStudioProjects/keystore.jks",
    "storePassword": "androidstudio",
    "keyAlias": "androidstudio",
    "keyPassword": "androidstudio"
}

2、build.gradle中解析密钥库json数据并配置build和release签名

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        // replace with the current version of the Android plugin
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.google.code.gson:gson:2.4'  //添加gson库,用于解析json,也可以不加,使用groovy自带库解析                
    }
}
class SignInfo {
    public String storeFile;
    public String storePassword;
    public String keyAlias;
    public String keyPassword;
}

ext.signinfo = null;

def SignInfo parseSignInfo() {
    if (signinfo == null) {
        String str = GFileUtils.readFile(file("sign.config"));
        signinfo = new Gson().fromJson(str, SignInfo.class);
    }
    return signinfo;
}

def getMyStoreFile() {
    return parseSignInfo().storeFile;
}

def getMyStorePassword() {
    return parseSignInfo().storePassword;
}

def getMyKeyAlias() {
    return parseSignInfo().keyAlias;
}

def getMyKeyPassword() {
    return parseSignInfo().keyPassword;
}

 signingConfigs {
        release {
            storeFile file(getMyStoreFile())
            storePassword getMyStorePassword()
            keyAlias getMyKeyAlias()
            keyPassword getMyKeyPassword()
        }
        debug {
            storeFile file(getMyStoreFile())
            storePassword getMyStorePassword()
            keyAlias getMyKeyAlias()
            keyPassword getMyKeyPassword()
        }
    }

如果这个种方式对你有帮助,可以参考完整的build.gradle配置。

545

分享本文:

Gradle Tips2:使用archivesBaseName改变Apk名称