diff --git a/scripts/manifest_check.py b/scripts/manifest_check.py
index 0216fc0..c8d4f76 100755
--- a/scripts/manifest_check.py
+++ b/scripts/manifest_check.py
@@ -20,11 +20,9 @@
 
 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 @@
         '--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 @@
         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 @@
     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']
+    if configs is None:
+        configs = []
 
-    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:
+    for config in configs:
+        with open(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)
+        module_to_libname[contents['Name']] = contents['ProvidesUsesLibrary']
 
-    required = remove_duplicates(required)
-    optional = remove_duplicates(optional)
-
-    # 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)
-
-    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 @@
             # `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
