私はAndroid Studio IDEを使用しています。私は、apkを実行中またはapkを生成中に入力する値を変数に割り当てる必要があります。アンドロイドスタジオのグラデルビルドでユーザーからの入力を取得
私はSystem.console
を使用できないことを理解していますが、他の解決方法はありますか?
私はAndroid Studio IDEを使用しています。私は、apkを実行中またはapkを生成中に入力する値を変数に割り当てる必要があります。アンドロイドスタジオのグラデルビルドでユーザーからの入力を取得
私は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/ためのティムを、Roesのおかげで)
ありがとう@drew! – kande
恐ろしい:)魅力のように動作します –
ドリューのソリューション@素晴らしいですが、それは唯一のキーストアとキーの両方のための単一のパスワードを受け入れます。私は2つの異なるパスワード、キーストアとキー用のソリューションを必要としました。
Groovyのに非常に精通していない、それは、2つの入力フィールドにこれを拡張するために、いくつかの試行錯誤を取った - ここに私がなってしまったものです:
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
コマンドラインからビルドしてくれてありがとうございます。私が 'System.console'をbuild.gradleで使用すると、コンソールがnullであるというエラーが発生します。 – kande