diff options
Diffstat (limited to 'build/android/gyp/dex.py')
-rwxr-xr-x | build/android/gyp/dex.py | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/build/android/gyp/dex.py b/build/android/gyp/dex.py index 67f43e9..2fef369 100755 --- a/build/android/gyp/dex.py +++ b/build/android/gyp/dex.py @@ -4,6 +4,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import json import logging import optparse import os @@ -14,14 +15,6 @@ import zipfile from util import build_utils -def _CreateCombinedMainDexList(main_dex_list_paths): - main_dex_list = [] - for m in main_dex_list_paths: - with open(m) as main_dex_list_file: - main_dex_list.extend(l for l in main_dex_list_file if l) - return '\n'.join(main_dex_list) - - def _RemoveUnwantedFilesFromZip(dex_path): iz = zipfile.ZipFile(dex_path, 'r') tmp_dex_path = '%s.tmp.zip' % dex_path @@ -56,32 +49,35 @@ def _ParseArgs(args): 'is enabled.')) parser.add_option('--no-locals', help='Exclude locals list from the dex file.') - parser.add_option('--multi-dex', default=False, action='store_true', - help='Create multiple dex files.') parser.add_option('--incremental', action='store_true', help='Enable incremental builds when possible.') parser.add_option('--inputs', help='A list of additional input paths.') parser.add_option('--excluded-paths', help='A list of paths to exclude from the dex file.') - parser.add_option('--main-dex-list-paths', - help='A list of paths containing a list of the classes to ' + parser.add_option('--main-dex-list-path', + help='A file containing a list of the classes to ' 'include in the main dex.') + parser.add_option('--multidex-configuration-path', + help='A JSON file containing multidex build configuration.') options, paths = parser.parse_args(args) required_options = ('android_sdk_tools',) build_utils.CheckOptions(options, parser, required=required_options) - if options.multi_dex and not options.main_dex_list_paths: - logging.warning('--multi-dex is unused without --main-dex-list-paths') + options.multi_dex = False + if options.multidex_configuration_path: + with open(options.multidex_configuration_path) as multidex_config_file: + multidex_config = json.loads(multidex_config_file.read()) + options.multi_dex = multidex_config.get('enabled', False) + + if options.multi_dex and not options.main_dex_list_path: + logging.warning('multidex cannot be enabled without --main-dex-list-path') options.multi_dex = False - elif options.main_dex_list_paths and not options.multi_dex: - logging.warning('--main-dex-list-paths is unused without --multi-dex') + elif options.main_dex_list_path and not options.multi_dex: + logging.warning('--main-dex-list-path is unused if multidex is not enabled') - if options.main_dex_list_paths: - options.main_dex_list_paths = build_utils.ParseGypList( - options.main_dex_list_paths) if options.inputs: options.inputs = build_utils.ParseGypList(options.inputs) if options.excluded_paths: @@ -101,11 +97,7 @@ def _RunDx(changes, options, dex_cmd, paths): with build_utils.TempDir() as classes_temp_dir: # --multi-dex is incompatible with --incremental. if options.multi_dex: - combined_main_dex_list = tempfile.NamedTemporaryFile(suffix='.txt') - combined_main_dex_list.write( - _CreateCombinedMainDexList(options.main_dex_list_paths)) - combined_main_dex_list.flush() - dex_cmd.append('--main-dex-list=%s' % combined_main_dex_list.name) + dex_cmd.append('--main-dex-list=%s' % options.main_dex_list_path) else: # Use --incremental when .class files are added or modified (never when # removed). @@ -173,7 +165,7 @@ def main(args): dex_cmd.append('--no-locals') if options.multi_dex: - input_paths.extend(options.main_dex_list_paths) + input_paths.append(options.main_dex_list_path) dex_cmd += [ '--multi-dex', '--minimal-main-dex', |