If a console doesn't exist, read password from stdin.

When signapk.jar is invoked by scripts like
sign_target_files_apks.py, there is no console as signapk is
invoked using popen(). To support signing of APKs using
software keys with passwords, we need to read
the password from stdin if there is no console.

Change-Id: Icf69ba1e58bf1f91979eaf1d3b91cb202782e8fd
Signed-off-by: adattatr <anisha.dattatraya.kulkarni@intel.com>
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
This commit is contained in:
adattatr 2015-09-03 11:17:57 -07:00 committed by Brad Geltz
parent cf448ddb4f
commit 50c7c5a722
1 changed files with 16 additions and 5 deletions

View File

@ -167,18 +167,29 @@ class SignApk {
}
/**
* Reads the password from console and returns it as a string.
* If a console doesn't exist, reads the password from stdin
* If a console exists, reads the password from console and returns it as a string.
*
* @param keyFile The file containing the private key. Used to prompt the user.
*/
private static String readPassword(File keyFile) {
Console console;
char[] pwd;
if((console = System.console()) != null &&
(pwd = console.readPassword("[%s]", "Enter password for " + keyFile)) != null){
return String.valueOf(pwd);
if ((console = System.console()) == null) {
System.out.print("Enter password for " + keyFile + " (password will not be hidden): ");
System.out.flush();
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
try {
return stdin.readLine();
} catch (IOException ex) {
return null;
}
} else {
return null;
if ((pwd = console.readPassword("[%s]", "Enter password for " + keyFile)) != null) {
return String.valueOf(pwd);
} else {
return null;
}
}
}