diff options
author | 2022-06-13 09:04:49 +0000 | |
---|---|---|
committer | 2022-06-13 09:06:44 +0000 | |
commit | c68b289125dd187ebeb7a158c13c6e805bb8b3bd (patch) | |
tree | 544fd78c34bf5119e468668f3236a343e208621d /scripts/manifest_check.py | |
parent | 24abbe85d1f2aae1d7fc9b42c35f9bb28c0a1bb2 (diff) |
Revert "manifest_check.py: add uses-libraries propagaged via dex..."
Reason for revert: performance regression on AppStartup.
Reverted Changes:
I6522319a8:Dexpreopt: prepare to merge class loader context f...
Ic8528dffd:manifest_check.py: add uses-libraries propagaged v...
Bug: 235304939
Bug: 214255490
Change-Id: I054df19dbddb4897d07d74e51d7b651dfae85fbe
Diffstat (limited to 'scripts/manifest_check.py')
-rwxr-xr-x | scripts/manifest_check.py | 66 |
1 files changed, 16 insertions, 50 deletions
diff --git a/scripts/manifest_check.py b/scripts/manifest_check.py index 0216fc0fe..c8d4f76c8 100755 --- a/scripts/manifest_check.py +++ b/scripts/manifest_check.py @@ -20,11 +20,9 @@ from __future__ import print_function import argparse import json -import os import re import subprocess import sys -from collections import OrderedDict from xml.dom import minidom from manifest import android_ns @@ -45,13 +43,11 @@ def parse_args(): '--uses-library', dest='uses_libraries', action='append', - default=[], help='specify uses-library entries known to the build system') parser.add_argument( '--optional-uses-library', dest='optional_uses_libraries', action='append', - default=[], help='specify uses-library entries known to the build system with ' 'required:false' ) @@ -78,14 +74,9 @@ def parse_args(): help='print the targetSdkVersion from the manifest') parser.add_argument( '--dexpreopt-config', - dest='dexpreopt_config', - help='a path to dexpreopt.config file for this library/app') - parser.add_argument( - '--dexpreopt-dep-config', - dest='dexpreopt_dep_configs', + dest='dexpreopt_configs', action='append', - default=[], - help='a path to dexpreopt.config file for a dependency library') + help='a paths to a dexpreopt.config of some library') parser.add_argument('--aapt', dest='aapt', help='path to aapt executable') parser.add_argument( '--output', '-o', dest='output', help='output AndroidManifest.xml file') @@ -304,53 +295,25 @@ def extract_target_sdk_version_xml(xml): return target_attr.value -def remove_duplicates(l): - return list(OrderedDict.fromkeys(l)) - - -def load_dexpreopt_configs(args): +def load_dexpreopt_configs(configs): """Load dexpreopt.config files and map module names to library names.""" module_to_libname = {} - # Go over dexpreopt.config files for uses-library dependencies and create - # a mapping from module name to real library name (they may differ). - for config in args.dexpreopt_dep_configs: - # Empty dexpreopt.config files are expected for some dependencies. - if os.stat(config).st_size != 0: - with open(config, 'r') as f: - contents = json.load(f) - module_to_libname[contents['Name']] = contents['ProvidesUsesLibrary'] - - required = translate_libnames(args.uses_libraries, module_to_libname) - optional = translate_libnames(args.optional_uses_libraries, module_to_libname) - - # Add extra uses-libraries from the library/app's own dexpreopt.config. - # Extra libraries may be propagated via dependencies' dexpreopt.config files - # (not only uses-library ones, but also transitively via static libraries). - if args.dexpreopt_config: - with open(args.dexpreopt_config, 'r') as f: - contents = json.load(f) - for clc in contents['ClassLoaderContexts']['any']: - ulib = clc['Name'] - if clc['Optional']: - optional.append(ulib) - else: - required.append(ulib) - - required = remove_duplicates(required) - optional = remove_duplicates(optional) + if configs is None: + configs = [] - # If the same library is both in optional and required, prefer required. - # This may happen for compatibility libraries, e.g. org.apache.http.legacy. - for lib in required: - if lib in optional: - optional.remove(lib) + for config in configs: + with open(config, 'r') as f: + contents = json.load(f) + module_to_libname[contents['Name']] = contents['ProvidesUsesLibrary'] - return required, optional + return module_to_libname def translate_libnames(modules, module_to_libname): """Translate module names into library names using the mapping.""" + if modules is None: + modules = [] libnames = [] for name in modules: @@ -383,7 +346,10 @@ def main(): # `optional_uses_libs`, `LOCAL_USES_LIBRARIES`, # `LOCAL_OPTIONAL_LIBRARY_NAMES` all contain module names), while # the manifest addresses libraries by their name. - required, optional = load_dexpreopt_configs(args) + mod_to_lib = load_dexpreopt_configs(args.dexpreopt_configs) + required = translate_libnames(args.uses_libraries, mod_to_lib) + optional = translate_libnames(args.optional_uses_libraries, + mod_to_lib) # Check if the <uses-library> lists in the build system agree with # those in the manifest. Raise an exception on mismatch, unless the |