2013-04-01 18 views
19

因此,我試圖將所有的ant生成腳本轉換爲gradle,並且我已經能夠找到充足的資源和文檔,除了如何配置簽名gradle.properties文件。發佈Android版gradle.properties中的登錄

ant.properties做它像這樣:

key.alias=alias 
key.store.password=password 
key.store=keystore.file 
key.alias.password=password 

但我怎麼做同樣的gradle中?

回答

33

在你gradle.properties文件存儲作爲ant.properties文件相同的價值觀,我認爲你必須做的簡單的名稱,如keyAlias例如。只要刪除點確定。

然後在的build.gradle文件做這樣的事情:

android { 
    signingConfigs { 
     release 
    } 
    buildTypes { 
     release { 
      signingConfig signingConfigs.release 
     } 
    } 
} 

if (project.hasProperty('keyAlias')) { 
    android.signingConfigs.release.keyAlias = keyAlias 
} 
// do the same for the three other properties 
// ... 

這樣做,這樣您可以靈活構建具有gradle.properties文件或無法在電腦上。只有「keyalias」屬性存在時纔會被讀取,因此如果代碼不存在,代碼不會失敗。

如果所有的屬性都存在,signingConfigs.release將完全配置,並將用於在構建期間簽署apk。如果它不在那裏,APK將被構建但未被簽名。

+0

謝謝,我修好了。 –

+0

仍然有麻煩?請注意,外觀順序問題,請參閱http://stackoverflow.com/a/22791482/190599 – CodeReaper

22

我能夠做到以下幾點。我嘗試了@ Xav的解決方案,但如果我沒有設置屬性,它會在發佈驗證步驟中抱怨。由於框架的改變,我相信這是最近發生的變化。我只是想通過指出最後的else來幫忙,我能夠強制發佈signingConfig爲空。現在,根據gradle.properties的存在,簽名和未簽名的版本都會發生。

signingConfigs { 
    release { 
     keyAlias = "blue_sleep" 
    } 
} 

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 
} 

if (project.hasProperty('storeFile') && 
     project.hasProperty('storePassword') && 
     project.hasProperty('keyPassword')) { 
    android.signingConfigs.release.storeFile = file(storeFile) 
    android.signingConfigs.release.storePassword = storePassword 
    android.signingConfigs.release.keyPassword = keyPassword 
} else { 
    android.buildTypes.release.signingConfig = null 
} 

一些其他有用的筆記,你可以把〜/ .gradle /的gradle.properties,如果你不希望它坐在在項目文件夾做。你也可以用這樣的絕對路徑設置storeFile屬性:storePath=file:///Users/nick/Dropbox/mycompany.keystore

3

Gradle 1.9不允許你定義屬性。您現在只能將它們添加到分機。除了以前的答案:

signingConfigs { 
    debug { 
     project.ext.loadSign = false 
    } 
    release { 
     project.ext.loadSign = true 
    } 
} 

buildTypes { 
    debug { 
     signingConfig signingConfigs.debug 
    } 
    release { 
     signingConfig signingConfigs.release 
    } 
} 

if (project.ext.loadSign) { 
    Properties p = new Properties() 
    p.load (new FileInputStream (rootProject.file ('keys/sign.properties'))) 

    android.signingConfigs.release.storeFile file (p.file) 
    android.signingConfigs.release.storePassword p.password 
    android.signingConfigs.release.keyAlias p.alias 
    android.signingConfigs.release.keyPassword p.keyPassword 
} 
4

靈感來自Eugens的解決方案,我想出了一個短一點的差異。代碼必須位於android {}任務配置中。

File signFile = rootProject.file('sign.properties') 
if (signFile.exists()) { 
    Properties p = new Properties() 
    p.load(new FileInputStream(signFile)) 
    signingConfigs { 
     releaseConfig { 
      storeFile file(p.storeFile) 
      storePassword p.storePassword 
      keyAlias p.keyAlias 
      keyPassword p.keyPassword 
     } 
    } 
    buildTypes.release.signingConfig signingConfigs.releaseConfig 
} 
+0

簡短,有用且正常的作品。謝謝 – Meanman

0

我的要求是,如果沒有密鑰庫的人應該能夠正確地構建。這是我能找到的最乾淨的方式:

android { 
    signingConfigs { 
     release //Filled in readSigningConfigIfAvailable() 
    } 

    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-xyz.txt' 
      readSigningConfigIfAvailable() 
     } 
    } 
} 

private void readSigningConfigIfAvailable() { 
    if (hasAllSigningProperties()) { 
     android.signingConfigs.release.storeFile = file(keystore_path) 
     android.signingConfigs.release.storePassword = keystore_password 
     android.signingConfigs.release.keyAlias = key_alias 
     android.signingConfigs.release.keyPassword = key_password 
     android.buildTypes.release.signingConfig = android.signingConfigs.release 
    } else { 
     android.buildTypes.release.signingConfig = null 
    } 
} 

private boolean hasAllSigningProperties() { 
    (hasProperty('keystore_path') 
    && hasProperty('keystore_password') 
    && hasProperty('key_alias') 
    && hasProperty('key_password')) 
} 
+0

什麼gradle文件?在科爾多瓦文件夾中的一個?我在android中看到的是「生成文件」不要編輯。 – FlavorScape