blob: cb374d42a5a836ad966ee0150d70aba7e0b0aa6e [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Process an app bundle (.aab) file into a set of split APKS (.apks)"""
import argparse
import itertools
import os
import shutil
import sys
import tempfile
import zipfile
# NOTE: Keep this consistent with the _app_bundle_to_apk_py_imports definition
# in build/config/android/rules.gni
from util import build_utils
import bundletool
def _ParseArgs(args):
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--aapt2', required=True,
help='Path to aapt2 tool')
parser.add_argument('--bundle', required=True,
help='Input bundle file.')
parser.add_argument('--out-zip', required=True,
help='Output zip archive that will contain all APKs.')
parser.add_argument('--keystore-path', required=True,
help='Keystore path')
parser.add_argument('--keystore-password', required=True,
help='Keystore password')
parser.add_argument('--key-name', required=True,
help='Keystore key name')
options = parser.parse_args(args)
return options
def main(args):
args = build_utils.ExpandFileArgs(args)
options = _ParseArgs(args)
with build_utils.TempDir() as tmp_dir:
# NOTE: The bundletool build-apks command requires the --output
# path to not exist, and to end with '.apks'.
tmp_bundle = os.path.join(tmp_dir,
os.path.basename(options.bundle) + '.apks')
cmd_args = ['java', '-jar', bundletool.BUNDLETOOL_JAR_PATH, 'build-apks']
cmd_args += ['--aapt2=%s' % options.aapt2]
cmd_args += ['--bundle=%s' % options.bundle]
cmd_args += ['--output=%s' % tmp_bundle]
if options.keystore_path:
cmd_args += [
'--ks=%s' % options.keystore_path,
'--ks-key-alias=%s' % options.key_name,
'--ks-pass=pass:%s' % options.keystore_password
]
build_utils.CheckOutput(cmd_args)
shutil.move(tmp_bundle, options.out_zip)
if __name__ == '__main__':
main(sys.argv[1:])