blob: 14f51b45d50d8c457a4da9b9323ab64c925aa495 [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
from util import build_utils
import bundletool
def _ParseArgs(args):
parser = argparse.ArgumentParser(description=__doc__)
build_utils.AddDepfileOption(parser)
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('--key-path',
help='Keystore path')
parser.add_argument('--key-name',
help='Keystore key name')
parser.add_argument('--key-passwd',
help='Keystore password')
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.key_path:
cmd_args += [
'--ks=%s' % options.key_path,
'--ks-key-alias=%s' % options.key_name,
'--ks-pass=pass:%s' % options.key_passwd
]
build_utils.CheckOutput(cmd_args)
shutil.move(tmp_bundle, options.out_zip)
if options.depfile:
build_utils.WriteDepfile(options.depfile,
options.out_zip)
if __name__ == '__main__':
main(sys.argv[1:])