diff --git a/icu4c/source/data/BUILDRULES.py b/icu4c/source/data/BUILDRULES.py
index 686e0fe..56eb0e4 100644
--- a/icu4c/source/data/BUILDRULES.py
+++ b/icu4c/source/data/BUILDRULES.py
@@ -12,7 +12,6 @@
 
 import os
 import sys
-import xml.etree.ElementTree as ET
 
 
 def generate(config, glob, common_vars):
@@ -517,26 +516,28 @@ def generate_tree(
     ]
 
     # Generate res_index file
-    synthetic_locales = set()
-    if not config.ignore_xml_deprecates:
-        deprecates_xml_path = os.path.join(
-            os.path.dirname(__file__), xml_filename)
-        deprecates_xml = ET.parse(deprecates_xml_path)
-        for child in deprecates_xml.getroot():
-            if child.tag == "alias":
-                synthetic_locales.add(child.attrib["from"])
-            elif child.tag == "emptyLocale":
-                synthetic_locales.add(child.attrib["locale"])
-            else:
-                raise ValueError("Unknown tag in deprecates XML: %s" % child.tag)
-    index_input_files = []
+    # Exclude the deprecated locale variants and root; see ICU-20628. This
+    # could be data-driven, but we do not want to perform I/O in this script
+    # (for example, we do not want to read from an XML file).
+    excluded_locales = set([
+        "ja_JP_TRADITIONAL",
+        "th_TH_TRADITIONAL",
+        "de_",
+        "de__PHONEBOOK",
+        "es_",
+        "es__TRADITIONAL",
+        "root",
+    ])
+    # Put alias locales in a separate structure; see ICU-20627
+    alias_locales = set(locale_dependencies.data["aliases"].keys())
+    alias_files = []
+    installed_files = []
     for f in input_files:
-        file_stem = f.filename[f.filename.rfind("/")+1:-4]
-        if file_stem == "root":
+        file_stem = IndexRequest.locale_file_stem(f)
+        if file_stem in excluded_locales:
             continue
-        if file_stem in synthetic_locales:
-            continue
-        index_input_files.append(f)
+        destination = alias_files if file_stem in alias_locales else installed_files
+        destination.append(f)
     cldr_version = locale_dependencies.data["cldrVersion"] if sub_dir == "locales" else None
     index_file_txt = TmpFile("{IN_SUB_DIR}/{INDEX_NAME}.txt".format(
         IN_SUB_DIR = sub_dir,
@@ -551,7 +552,8 @@ def generate_tree(
         IndexRequest(
             name = index_file_target_name,
             category = category,
-            input_files = index_input_files,
+            installed_files = installed_files,
+            alias_files = alias_files,
             txt_file = index_file_txt,
             output_file = index_res_file,
             cldr_version = cldr_version,
diff --git a/icu4c/source/python/icutools/databuilder/__main__.py b/icu4c/source/python/icutools/databuilder/__main__.py
index 0b043f0..95d70a0 100644
--- a/icu4c/source/python/icutools/databuilder/__main__.py
+++ b/icu4c/source/python/icutools/databuilder/__main__.py
@@ -84,12 +84,6 @@
     action = "store_true"
 )
 flag_parser.add_argument(
-    "--ignore_xml_deprecates",
-    help = "Whether to ignore XML deprecates files for building res_index.",
-    default = False,
-    action = "store_true"
-)
-flag_parser.add_argument(
     "--seqmode",
     help = "Whether to optimize rules to be run sequentially (fewer threads) or in parallel (many threads). Defaults to 'sequential', which is better for unix-exec and windows-exec modes. 'parallel' is often better for massively parallel build systems.",
     choices = ["sequential", "parallel"],
@@ -134,9 +128,6 @@ def __init__(self, args):
         # Boolean: Whether to include core Unicode data files in the .dat file
         self.include_uni_core_data = args.include_uni_core_data
 
-        # Boolean: Whether to ignore the XML files
-        self.ignore_xml_deprecates = args.ignore_xml_deprecates
-
         # Default fields before processing filter file
         self.filters_json_data = {}
 
diff --git a/icu4c/source/python/icutools/databuilder/request_types.py b/icu4c/source/python/icutools/databuilder/request_types.py
index 72b3991..14c2edb 100644
--- a/icu4c/source/python/icutools/databuilder/request_types.py
+++ b/icu4c/source/python/icutools/databuilder/request_types.py
@@ -100,8 +100,8 @@ def apply_file_filter(self, filter):
         while i < len(self.input_files):
             if filter.match(self.input_files[i]):
                 i += 1
-                continue
-            self._del_at(i)
+            else:
+                self._del_at(i)
         return i > 0
 
     def _del_at(self, i):
@@ -286,7 +286,8 @@ def all_output_files(self):
 
 class IndexRequest(AbstractRequest):
     def __init__(self, **kwargs):
-        self.input_files = []
+        self.installed_files = []
+        self.alias_files = []
         self.txt_file = None
         self.output_file = None
         self.cldr_version = ""
@@ -296,12 +297,18 @@ def __init__(self, **kwargs):
 
     def apply_file_filter(self, filter):
         i = 0
-        while i < len(self.input_files):
-            if filter.match(self.input_files[i]):
+        while i < len(self.installed_files):
+            if filter.match(self.installed_files[i]):
                 i += 1
-                continue
-            del self.input_files[i]
-        return i > 0
+            else:
+                del self.installed_files[i]
+        j = 0
+        while j < len(self.alias_files):
+            if filter.match(self.alias_files[i]):
+                j += 1
+            else:
+                del self.alias_files[j]
+        return i + j > 0
 
     def flatten(self, config, all_requests, common_vars):
         return (
@@ -322,24 +329,34 @@ def flatten(self, config, all_requests, common_vars):
         )
 
     def _generate_index_file(self, common_vars):
-        locales = [f.filename[f.filename.rfind("/")+1:-4] for f in self.input_files]
+        installed_locales = [IndexRequest.locale_file_stem(f) for f in self.installed_files]
+        alias_locales = [IndexRequest.locale_file_stem(f) for f in self.alias_files]
         formatted_version = "    CLDRVersion { \"%s\" }\n" % self.cldr_version if self.cldr_version else ""
-        formatted_locales = "\n".join(["        %s {\"\"}" % v for v in locales])
+        formatted_installed_locales = "\n".join(["        %s {\"\"}" % v for v in installed_locales])
+        formatted_alias_locales = "\n".join(["        %s {\"\"}" % v for v in alias_locales])
         # TODO: CLDRVersion is required only in the base file
         return ("// Warning this file is automatically generated\n"
                 "{INDEX_NAME}:table(nofallback) {{\n"
                 "{FORMATTED_VERSION}"
                 "    InstalledLocales {{\n"
-                "{FORMATTED_LOCALES}\n"
+                "{FORMATTED_INSTALLED_LOCALES}\n"
+                "    }}\n"
+                "    AliasLocales {{\n"
+                "{FORMATTED_ALIAS_LOCALES}\n"
                 "    }}\n"
                 "}}").format(
                     FORMATTED_VERSION = formatted_version,
-                    FORMATTED_LOCALES = formatted_locales,
+                    FORMATTED_INSTALLED_LOCALES = formatted_installed_locales,
+                    FORMATTED_ALIAS_LOCALES = formatted_alias_locales,
                     **common_vars
                 )
 
     def all_input_files(self):
-        return self.input_files
+        return self.installed_files + self.alias_files
 
     def all_output_files(self):
         return [self.output_file]
+
+    @staticmethod
+    def locale_file_stem(f):
+        return f.filename[f.filename.rfind("/")+1:-4]
