Преглед на файлове

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
Ulya Trofimovich преди 1 година
родител
ревизия
c68b289125
променени са 1 файла, в които са добавени 16 реда и са изтрити 50 реда
  1. 16 50
      scripts/manifest_check.py

+ 16 - 50
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