小编典典

签署 APK 而不将密钥库信息放入 build.gradle

all

我正在尝试设置签名过程,以便密钥库、密码和密钥密码 存储在项目build.gradle文件中。

目前我有以下内容build.gradle

android {
    ...
    signingConfigs {
        release {
            storeFile file("my.keystore")
            storePassword "store_password"
            keyAlias "my_key_alias"
            keyPassword "key_password"
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release            
        }
    }
}

它工作得很好,但我 不能storePassword,
和的值keyPassword放在我的存储库中。我宁愿也不放在storeFile那里keyAlias

有没有办法改变它,build.gradle以便它可以从某些外部来源(如仅驻留在我的计算机上的文件)获取密码?

当然,更改后build.gradle的计算机应该可以在任何其他计算机上使用(即使计算机无法访问密码)。

如果确实重要,我正在使用 Android Studio 和 Mac OS X Maverics。


阅读 96

收藏
2022-07-30

共1个答案

小编典典

Groovy 的好处是您可以自由混合 Java 代码,并且使用java.util.Properties. 也许使用惯用的 Groovy
有一种更简单的方法,但 Java 仍然非常简单。

创建一个keystore.properties文件(在本例中,在项目的根目录中settings.gradle,您可以将其放在任何您喜欢的位置:

storePassword=...
keyPassword=...
keyAlias=...
storeFile=...

将此添加到您的build.gradle

allprojects {
    afterEvaluate { project ->
        def propsFile = rootProject.file('keystore.properties')
        def configName = 'release'

        if (propsFile.exists() && android.signingConfigs.hasProperty(configName)) {
            def props = new Properties()
            props.load(new FileInputStream(propsFile))
            android.signingConfigs[configName].storeFile = file(props['storeFile'])
            android.signingConfigs[configName].storePassword = props['storePassword']
            android.signingConfigs[configName].keyAlias = props['keyAlias']
            android.signingConfigs[configName].keyPassword = props['keyPassword']
        }
    }
}
2022-07-30