之前都是透過 gradle.properties 分開管理 release 用的簽章,好處是不用把敏感的 information 也丟到公開的 repo,但有個問題最近困擾著我:如果存放 keystore 的路徑有中文,gradle 在 sign apk 時無法正確讀取 keystore。試過很多亂七八糟的方法,最後是透過分開的 .gradle 檔案滿足這樣的需求。

首先建立 signing.gradle,裡面很精簡的只設定 release 用的 signingConfig:

android {
    signingConfigs {
        release {
            keyAlias 'YourKeyAlias'
            storeFile file('YourStoreFile')
            storePassword 'YourStorePassword'
            keyPassword 'YourKeyPassword'
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

而在 gradle.properties 指定一個 property 存放 signing.gradle 的路徑:

releaseSignConfig=/path/to/signing.gradle

最後在主要 project 的 build.gradle 中判斷是否需要引入:

if (project.hasProperty(“releaseSignConfig”) && 
    new File(project.property(“releaseSignConfig")).exists()) {
    apply from: project.property(“releaseSignConfig”);
}

或者你也可以寫:

if (project.hasProperty(“releaseSignConfig”) && new File(releaseSignConfig).exists()) {
    apply from: releaseSignConfig;
}

這樣便可以解決中文或者空白路徑的問題,如果各位先進有更好的解法,也歡迎來討論。 :)

Comments

comments powered by Disqus