NIGHTLY = '-nightly'
-def _ssh_key_from_debug_keystore():
+def _ssh_key_from_debug_keystore(keystore=KEYSTORE_FILE):
tmp_dir = tempfile.mkdtemp(prefix='.')
privkey = os.path.join(tmp_dir, '.privkey')
key_pem = os.path.join(tmp_dir, '.key.pem')
_config = dict()
common.fill_config_defaults(_config)
subprocess.check_call([_config['keytool'], '-importkeystore',
- '-srckeystore', KEYSTORE_FILE, '-srcalias', KEY_ALIAS,
+ '-srckeystore', keystore, '-srcalias', KEY_ALIAS,
'-srcstorepass', PASSWORD, '-srckeypass', PASSWORD,
'-destkeystore', p12, '-destalias', KEY_ALIAS,
'-deststorepass', PASSWORD, '-destkeypass', PASSWORD,
rsakey = paramiko.RSAKey.from_private_key_file(privkey)
fingerprint = base64.b64encode(hashlib.sha256(rsakey.asbytes()).digest()).decode('ascii').rstrip('=')
- ssh_private_key_file = os.path.join(tmp_dir, 'debug_keystore_' + fingerprint + '_id_rsa')
+ ssh_private_key_file = os.path.join(tmp_dir, 'debug_keystore_'
+ + fingerprint.replace('/', '_') + '_id_rsa')
shutil.move(privkey, ssh_private_key_file)
pub = rsakey.get_name() + ' ' + rsakey.get_base64() + ' ' + ssh_private_key_file
parser = ArgumentParser(usage="%(prog)s")
common.setup_global_opts(parser)
+ parser.add_argument("--keystore", default=KEYSTORE_FILE,
+ help=_("Specify which debug keystore file to use."))
parser.add_argument("--show-secret-var", action="store_true", default=False,
help=_("Print the secret variable to the terminal for easy copy/paste"))
parser.add_argument("--file", default='app/build/outputs/apk/*.apk',
shutil.rmtree(os.path.dirname(ssh_private_key_file))
else:
+ if not os.path.isfile(options.keystore):
+ androiddir = os.path.dirname(options.keystore)
+ if not os.path.exists(androiddir):
+ os.mkdir(androiddir)
+ logging.info(_('created {path}').format(path=androiddir))
+ logging.error(_('{path} does not exist! Create it by running:').format(path=options.keystore)
+ + '\n keytool -genkey -v -keystore ' + options.keystore + ' -storepass android \\'
+ + '\n -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 \\'
+ + '\n -dname "CN=Android Debug,O=Android,C=US"')
+ sys.exit(1)
ssh_dir = os.path.join(os.getenv('HOME'), '.ssh')
os.makedirs(os.path.dirname(ssh_dir), exist_ok=True)
- privkey = _ssh_key_from_debug_keystore()
+ privkey = _ssh_key_from_debug_keystore(options.keystore)
ssh_private_key_file = os.path.join(ssh_dir, os.path.basename(privkey))
shutil.move(privkey, ssh_private_key_file)
shutil.move(privkey + '.pub', ssh_private_key_file + '.pub')
shutil.rmtree(os.path.dirname(privkey))
if options.show_secret_var:
- with open(KEYSTORE_FILE, 'rb') as fp:
+ with open(options.keystore, 'rb') as fp:
debug_keystore = base64.standard_b64encode(fp.read()).decode('ascii')
print(_('\n{path} encoded for the DEBUG_KEYSTORE secret variable:')
- .format(path=KEYSTORE_FILE))
+ .format(path=options.keystore))
print(debug_keystore)
os.umask(umask)