diff options
Diffstat (limited to 'catapult/devil/devil/android/sdk/bundletool.py')
-rw-r--r-- | catapult/devil/devil/android/sdk/bundletool.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/catapult/devil/devil/android/sdk/bundletool.py b/catapult/devil/devil/android/sdk/bundletool.py new file mode 100644 index 00000000..5c181c56 --- /dev/null +++ b/catapult/devil/devil/android/sdk/bundletool.py @@ -0,0 +1,62 @@ +# Copyright 2019 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. +"""This module wraps bundletool.""" + +import json + +from devil import base_error +from devil import devil_env +from devil.utils import cmd_helper +from devil.utils import lazy +from py_utils import tempfile_ext + +_bundletool_path = lazy.WeakConstant(lambda: devil_env.config.FetchPath( + 'bundletool')) + + +def ExtractApks(output_dir, + apks_path, + abis, + locales, + features, + pixel_density, + sdk_version, + modules=None): + """Extracts splits from APKS archive. + + Args: + output_dir: Directory to extract splits into. + apks_path: Path to APKS archive. + abis: ABIs to support. + locales: Locales to support. + features: Device features to support. + pixel_density: Pixel density to support. + sdk_version: Target SDK version. + modules: Extra modules to install. + """ + device_spec = { + 'supportedAbis': abis, + 'supportedLocales': ['%s-%s' % l for l in locales], + 'deviceFeatures': features, + 'screenDensity': pixel_density, + 'sdkVersion': sdk_version, + } + with tempfile_ext.TemporaryFileName(suffix='.json') as device_spec_path: + with open(device_spec_path, 'w') as f: + json.dump(device_spec, f) + cmd = [ + 'java', + '-jar', + _bundletool_path.read(), + 'extract-apks', + '--apks=%s' % apks_path, + '--device-spec=%s' % device_spec_path, + '--output-dir=%s' % output_dir, + ] + if modules: + cmd += ['--modules=%s' % ','.join(modules)] + status, stdout, stderr = cmd_helper.GetCmdStatusOutputAndError(cmd) + if status != 0: + raise base_error.BaseError('Failed running {} with output\n{}\n{}'.format( + ' '.join(cmd), stdout, stderr)) |