Android Gradle - 从外部文件加载签名配置

时间:2014-06-17 12:23:02

标签: android android-studio gradle android-gradle build.gradle

在Gradle for Android中,似乎是公共惯例来定义发布版本的签名配置,如下所示:

android {
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

    buildTypes {
        foo {
            debuggable true
            jniDebugBuild true
            signingConfig signingConfigs.myConfig
        }
    }
}

事情是,我想将我的build.gradle文件保留在版本控制中,并且不能很好地拥有我的密钥库的密码(这与我用于其他东西相同,愚蠢,我知道) git服务器。

有没有办法从我硬盘上的某个地方加载来自外部文件的signingConfig?

4 个答案:

答案 0 :(得分:24)

我使用这样的东西。

我的应用根文件夹中有signing.properties

STORE_FILE=xxxx
STORE_PASSWORD=xxx
KEY_ALIAS=xxx
KEY_PASSWORD=xxx

此版本控制下未启用此文件。 当然你可以改变文件夹。

然后在你的build.gradle中,您可以使用以下内容:

 android {

        signingConfigs {
            release
        }

        buildTypes {
                release {
                    signingConfig signingConfigs.release
                }     
        }
    }

    def Properties props = new Properties()
    def propFile = file('../signing.properties')
    if (propFile.canRead()){
        props.load(new FileInputStream(propFile))

        if (props!=null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
                props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {

            android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
            android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
            android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
            android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
        } else {
            android.buildTypes.release.signingConfig = null
        }
    }else {
        android.buildTypes.release.signingConfig = null
    }

如果更改文件夹,则必须更改此行:

 def propFile = file('../signing.properties')

答案 1 :(得分:1)

您可以将敏感详细信息移至单独的签名文件,并将其加载到其中。

Here's a good article on how to do it

答案 2 :(得分:1)

对于Kotlin脚本(build.gradle.kts)

放入文件 signing.properties ,在其中找到特定于模块的 build.gradle.kts 。不要忘记将其添加到您的 .gitignore 文件中!

signing.properties

storeFilePath=/home/willi/example.keystore
storePassword=secret
keyPassword=secret
keyAlias=myReleaseSigningKey

build.gradle.kts

android {
    // ...
    signingConfigs {
        create("release") {
            val properties = Properties().apply {
                load(File("signing.properties").reader())
            }
            storeFile = File(properties.getProperty("storeFilePath"))
            storePassword = properties.getProperty("storePassword")
            keyPassword = properties.getProperty("keyPassword")
            keyAlias = "release"
        }
    }

    buildTypes {
        getByName("release") {
            signingConfig = signingConfigs.getByName("release")
            // ...
        }
    }
}

答案 3 :(得分:0)

对于Groovy(build.gradle)

放入文件 signing.properties ,在其中找到特定于模块的 build.gradle 。不要忘记将其添加到您的 .gitignore 文件中!

signing.properties

storeFilePath=/home/willi/example.keystore
storePassword=secret
keyPassword=secret
keyAlias=myReleaseSigningKey

build.gradle

android {
    // ...
    signingConfigs{
        release {
            def props = new Properties()

            def fileInputStream = new FileInputStream(file('../signing.properties'))
            props.load(fileInputStream)
            fileInputStream.close()

            storeFile = file(props['storeFilePath'])
            storePassword = props['storePassword']
            keyAlias = props['keyAlias']
            keyPassword = props['keyPassword']
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            // ...
        }
    }
}