Выпуск подписи в gradle.properties для Android
Итак, я пытаюсь преобразовать все мои скрипты сборки ant в gradle, и я смог найти достаточные ресурсы и документацию по всему, кроме как настроить подпись в gradle. файл свойств.
ant.properties делает это так:
key.alias=alias
key.store.password=password
key.store=keystore.file
key.alias.password=password
Но как мне сделать то же самое в gradle?
Ответы
Ответ 1
В вашем файле 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 будет построен, но не подписан.
Ответ 2
Я смог сделать это со следующим. Я попробовал решение @Xav, но он будет жаловаться во время шага проверки выпуска, если у меня не было установленных свойств. Я уверен, что это недавнее изменение из-за изменения структуры. Я просто хотел помочь, указав, что с else
в самом конце я смог заставить release signedConfig равным нулю. Теперь как подписанные, так и неподписанные релизы происходят в зависимости от наличия 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.properties в ~/.gradle/, если вы не хотите, чтобы он сидел в папке проекта. Также вы можете установить свойство storeFile
с абсолютным путем следующим образом: storePath=file:///Users/nick/Dropbox/mycompany.keystore
Ответ 3
Вдохновленный решением 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
}
Ответ 4
Gradle 1.9 не позволяет вам определять свойства. Вы можете добавить их только в ext сейчас. Небольшое дополнение к предыдущим ответам:
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
}
Ответ 5
Там есть хорошее руководство по этому вопросу - https://github.com/almalkawi/Android-Guide/wiki/Generating-signed-release-APK-using-Gradle
Ответ 6
Мои требования заключались в том, что любой, кто не имеет хранилища ключей, должен иметь возможность правильно строить. Это самый чистый способ, который я мог найти:
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'))
}