Чтобы избежать написания пароля хранилища ключей в текстовом формате, я пытаюсь добавить зависимость для задачи assembleRelease, созданной плагином android Gradle.
Я проверил документацию Gradle Манипулирование существующими задачами, но я не могу разместить зависимость там, где она должна
Это моя задача, определенная в $root $/myApp/build.gradle над плагином Android.
task readPasswordFromInput << {
def console = System.console()
ext.keystorePassword = console.readLine('\n\n\n> Enter keystore password: ')
}
apply plugin: 'android'
Затем я пробовал две возможности, предлагаемые Gradle: task.dependsOn и task.doFirst, но никто не работает. Последнее, по-видимому, игнорируется, а dependOn добавляет зависимость, но слишком поздно в цепочке зависимостей. Выполнение задач. /gradlew - all выводит этот
:assembleRelease - Assembles all Release builds [libs:ActionBarSherlock:bundleRelease, libs:DataDroid:bundleRelease, libs:SlidingMenu:bundleRelease]
:compileRelease
...
[SEVERAL TASKS]
...
:packageRelease
...
[SEVERAL TASKS]
...
:readPasswordFromInput
Проблема заключается в том, что в пакете задач необходим пароль хранилища ключейRelease
Как примечание, это работает так, как я хочу
buildTypes {
release {
def console = System.console()
ext.keystorePassword = console.readLine('\n\n\n> IF building release apk, enter keystore password: ')
debuggable false
signingConfigs.release.storePassword = ext.keystorePassword
signingConfigs.release.keyPassword = ext.keystorePassword
signingConfig signingConfigs.release
}
}
но он запрашивает пароль каждый раз, когда вы используете gradlew, независимо от того, является ли он чистым или собираемым
Спасибо!
ИЗМЕНИТЬ
Благодаря @Intae Kim, здесь моя версия build.gradle версии 2.0
task readPasswordFromInput << {
def console = System.console()
ext.keystorePassword = console.readLine('\n\n\n> Enter keystore password: ')
android.signingConfigs.release.storePassword = ext.keystorePassword
android.signingConfigs.release.keyPassword = ext.keystorePassword
}
tasks.whenTaskAdded { task ->
if (task.name == 'validateReleaseSigning') {
task.dependsOn readPasswordFromInput
}
}
apply plugin: 'android'
Затем buildTypes
release {
debuggable false
signingConfig signingConfigs.release
runProguard true
proguardFile 'my-file.txt'
}
Gradle выполняется правильно, но он генерирует только release-unsigned.apk