Android studio 在android studio中获取用户对gradle构建的输入
我使用的是Android Studio IDE,我需要在代码中指定一个变量,该变量的值将在运行apk或生成apk时输入Android studio 在android studio中获取用户对gradle构建的输入,android-studio,gradle,android-gradle-plugin,Android Studio,Gradle,Android Gradle Plugin,我使用的是Android Studio IDE,我需要在代码中指定一个变量,该变量的值将在运行apk或生成apk时输入 我知道我不能使用System.console,还有其他解决方案吗?可以使用Android Studio中的命令行输入或swing对话框来实现。如果gradle作为守护进程运行,下面的示例任务将显示一个对话框,如果不是,则显示为命令行提示符 import groovy.swing.SwingBuilder task ask << { def keyPassPhr
我知道我不能使用System.console,还有其他解决方案吗?可以使用Android Studio中的命令行输入或swing对话框来实现。如果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}"
}
导入groovy.swing.SwingBuilder
task ask@drew的解决方案非常优秀,但它只接受密钥库和密钥的单个密码。我需要一个允许两个不同密码的解决方案,一个用于密钥库,另一个用于密钥库
由于对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
}
导入groovy.swing.SwingBuilder
...
/**
*在命令行或弹出式UI上请求密钥库/密钥密码
*/
task askForPasswords只要您不是作为守护程序运行gradle,您就应该能够访问系统控制台。尝试将-Dorg.gradle.daemon=false
添加到gradle命令谢谢@drew我不是从命令行生成的。如果我在build.gradle中使用System.console
,我会得到控制台为空的错误。非常感谢@drew!如何在无头服务器上处理无法导出显示的构建?我使用的是ant
,但最新的gradle似乎打破了这个选项。升级到android Studio 3.3后,是否有人突然停止使用gradle-4.10.1
和com.android.tools.build:gradle:3.3.0
?现在,当输入密码时,我总是得到“keystore被篡改”(即,错误的密码)提示。光标闪烁,这让我觉得它看到的是另一个来源的输入,在输入密码时会破坏密码。是的,这停止了工作。从控制台读取也是如此。现在已经很晚了,但是您能告诉我在哪里可以放置代码以使其实际工作吗?请参阅的工作示例。我尝试放置错误的凭据,但它仍在继续构建。它最终会在签名阶段失败,而签名阶段是构建的后期。