Android Gradle使用详解(四) 之 如何安全配置APK包的签名

我们在《Android Gradle使用详解(三) 之 Android Gradle插件配置详解》中有简单介绍过signingConfigs{}配置及其使用到的字段意思。它是用于给 一个APP签名配置的。一个APP只有在签名之后才能发布、安装和使用,签名是保护APP的方式,它能标记APP的唯一性,防止恶意篡改。一般地我们在开发过程中使用的debug编译模式时,Android SDK已帮我们打上了一个默认的debug签名证书(该签名证书位于$HOME/.android/debug.keystore目录中),所以我们可以直接调试安装在手机上。但是在正式发布时构建的release模式版本时,我们就要对其进行配置签名证书了。

配置签名

关于配置签名可以在signingConfigs{}中进行,示例如:

android {
    ……    
    defaultConfig {
        ……
    }
    signingConfigs {
        releaseConfig {
            storeFile rootProject.file("buildkey/mykey.keystore")
            storePassword "password"
            keyAlias "MyKey"
            keyPassword "password"
        }
        debugConfig {	// debug可不配置
    	    storeFile rootProject.file("buildkey/debug.keystore")
    	    storePassword "android"
    	    keyAlias "androiddebugkey"
    	    keyPassword "android"
        }
    }
	buildTypes {
        ……
    }
}

字段介绍

storeFile                              指定签名证书文件,接收一个文件类型

storePassword                    配置签名证书文件的密码

keyAlias                               配置签名证书中密钥别名

keyPassword                       配置签名证书中该密钥的密码

应用签名

上述操作只是配置了签名证书,要使用它还需要在defaultConfig{}或buildTypes{}中进行signingConfig字段的指定,正如上面介绍defaultConfig{}或buildTypes{}中所提到的。示例:

android {
    ……
    defaultConfig {
        ……
        signingConfig signingConfigs.releaseConfig
    }
    signingConfigs {
        ……
    }
    buildTypes {
        ……
    }
}

或者针对构建类型分别配置,比如release和debug区分配置:

android {
    ……
    defaultConfig {
        ……
    }
    signingConfigs {
        ……
    }
    buildTypes {
        release {
            ……
            signingConfig signingConfigs.releaseConfig
        }
    }
}

值得注意一点就是,signingConfigs{}的配置一定要在buildTypes{}之前,否则会产生错误!

隐藏签名文件

上面示例中展示了签名证书的配置和使用,但是忽略了一个安全性问题。签名信息是我们应用非常重要的信息,是公司重要的资源,如果我们项目中都把APP的签名证书文件和相关密钥放在项目中托管在git上的话,那岂不是所有的开发者都能获得到签名证书文件和密钥,这种方式出于安全考虑确实有所欠佳。所以要解决这类问题,最好的办法是将证书文件和相关密钥放在服务器编译机上,然后配置相应的环境变量。如若各位开发者本地不存在环境变量就使用默认的debug签名证书,这样的话又虽能解决编译的问题又可提高安全性了。使用示例如:

android {
    ……
    defaultConfig {
        ……
    }
    signingConfigs {
        def appStoreFile = System.getenv("STORE_FILE");
        def appStorePassword = System.getenv("STORE_PASSWORD");
        def appKeyAlias = System.getenv("KEY_ALIAS");
        def appKeyPassword = System.getenv("KEY_PASSWORD");
        if (!appStoreFile || !appStorePassword || !appKeyAlias || !appKeyPassword) {
            appStoreFile = "buildkey/debug.keystore"   // 将$HOME/.android/debug.keystore的debug证书文件拷贝到工程目录中
            appStorePassword "android"
            appKeyAlias "androiddebugkey"
            appKeyPassword "android"
        }
        releaseConfig {
            storeFile rootProject.file(appStoreFile)
            storePassword appStorePassword
            keyAlias appKeyAlias
            keyPassword appKeyPassword
        }
    }
    buildTypes {
        release {
            ……
            signingConfig signingConfigs.releaseConfig
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值