因此,我試圖將所有的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中?
因此,我試圖將所有的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中?
在你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將被構建但未被簽名。
我能夠做到以下幾點。我嘗試了@ 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
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
}
靈感來自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
}
簡短,有用且正常的作品。謝謝 – Meanman
我的要求是,如果沒有密鑰庫的人應該能夠正確地構建。這是我能找到的最乾淨的方式:
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'))
}
什麼gradle文件?在科爾多瓦文件夾中的一個?我在android中看到的是「生成文件」不要編輯。 – FlavorScape
謝謝,我修好了。 –
仍然有麻煩?請注意,外觀順序問題,請參閱http://stackoverflow.com/a/22791482/190599 – CodeReaper