我正在使用Android Studio IDE,我需要選擇在代碼中分配一個變量,並在運行apk或生成apk時輸入一個值。在Android Studio中獲取用戶輸入gradle build
據我所知,我不能使用System.console
,有沒有其他解決方案?
我正在使用Android Studio IDE,我需要選擇在代碼中分配一個變量,並在運行apk或生成apk時輸入一個值。在Android Studio中獲取用戶輸入gradle build
據我所知,我不能使用System.console
,有沒有其他解決方案?
可以在Android Studio中使用命令行輸入或揮杆對話框來完成此操作。如果gradle作爲守護進程運行,則下面的示例任務將顯示對話框,如果不是,則顯示命令行提示符。
import groovy.swing.SwingBuilder
task ask << {
def keyPassPhrase
def console = System.console()
if (console) {
keyPassPhrase = console.readLine('> Please enter key pass phrase: ')
} else {
new SwingBuilder().edt {
dialog(modal: true,
title: 'Enter credentials',
alwaysOnTop: true,
resizable: false,
locationRelativeTo: null,
pack: true,
show: true
) {
vbox {
label(text: "Please enter key passphrase:")
input = passwordField()
button(defaultButton: true, text: 'OK', actionPerformed: {
keyPassPhrase = input.password;
dispose();
})
}
}
}
}
print "Key pass phrase: ${keyPassPhrase}"
}
(與感謝蒂姆魚卵的常規解決方案https://www.timroes.de/2014/01/19/using-password-prompts-with-gradle-build-files/)
非常感謝@drew! – kande
真棒:)作品像一個魅力 –
@德魯的解決方案是優秀的,但只接受兩種密鑰庫和密鑰一個密碼。我需要一個允許兩個不同密碼的解決方案,一個用於密鑰庫,另一個用於密鑰。
我不是很熟悉Groovy中,它採取了一些嘗試和錯誤將其擴展到兩個輸入字段 - 這是我結束了:
import groovy.swing.SwingBuilder
...
/**
* Ask for keystore/key passwords on the command line or popup UI
*/
task askForPasswords << {
def console = System.console()
def storePw
def keyPw
if (console) {
// Must create String because System.readPassword() returns char[]
// (and assigning that below fails silently)
storePw = new String(console.readPassword("\nKeystore password: "))
keyPw = new String(console.readPassword("Key password: "))
} else {
// Gradle is running as a daemon - prompt user to enter passwords via popup UI
new SwingBuilder().edt {
dialog(modal: true, title: 'Enter credentials', alwaysOnTop: true, resizable: false,
locationRelativeTo: null, pack: true, show: true
) {
vbox {
label(text: "Keystore passphrase:")
textField id: "storeText", input = passwordField()
label(text: "Key passphrase:")
textField id: "keyText", input = passwordField()
button(defaultButton: true, text: 'OK', actionPerformed: {
storePw = storeText.text;
keyPw = keyText.text;
dispose();
})
}
}
}
}
android.signingConfigs.release.storePassword = storePw
android.signingConfigs.release.keyPassword = keyPw
}
...這看起來是這樣的:
在https://github.com/OneBusAway/onebusaway-android/blob/master/onebusaway-android/build.gradle#L291參見本工作示例。
這相當晚,但你能告訴我在哪裏我可以把它的代碼實際工作? – Megakoresh
請參閱https://github.com/OneBusAway/onebusaway-android/blob/master/onebusaway-android/build.gradle#L291上的工作示例。 –
只要您沒有將gradle作爲守護進程運行,您應該可以訪問'System.console'。嘗試在您的gradle命令中添加'-Dorg.gradle.daemon = false' – drew
謝謝@drew我不是從命令行構建的。如果我在build.gradle中使用'System.console',那麼控制檯爲空時會出錯。 – kande