diff --git a/core/Makefile b/core/Makefile
index 63ec1a6..4b2a331 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -2430,6 +2430,7 @@
 #
 # Note: it's intentional to skip signing for boot-debug.img, because it
 # can only be used if the device is unlocked with verification error.
+ifneq ($(BUILDING_VENDOR_BOOT_IMAGE),true)
 ifneq ($(INSTALLED_BOOTIMAGE_TARGET),)
 ifneq ($(strip $(TARGET_NO_KERNEL)),true)
 ifneq ($(strip $(BOARD_KERNEL_BINARIES)),)
@@ -2488,6 +2489,7 @@
 
 endif # TARGET_NO_KERNEL
 endif # INSTALLED_BOOTIMAGE_TARGET
+endif # BUILDING_VENDOR_BOOT_IMAGE is not true
 
 ifeq ($(BUILDING_VENDOR_BOOT_IMAGE),true)
 ifeq ($(BUILDING_RAMDISK_IMAGE),true)
@@ -2633,6 +2635,7 @@
 #
 # Note: it's intentional to skip signing for boot-test-harness.img, because it
 # can only be used if the device is unlocked with verification error.
+ifneq ($(BUILDING_VENDOR_BOOT_IMAGE),true)
 ifneq ($(INSTALLED_BOOTIMAGE_TARGET),)
 ifneq ($(strip $(TARGET_NO_KERNEL)),true)
 
@@ -2675,6 +2678,7 @@
 
 endif # TARGET_NO_KERNEL
 endif # INSTALLED_BOOTIMAGE_TARGET
+endif # BUILDING_VENDOR_BOOT_IMAGE is not true
 endif # BOARD_BUILD_SYSTEM_ROOT_IMAGE is not true
 
 ifeq ($(BUILDING_VENDOR_BOOT_IMAGE),true)
diff --git a/core/soong_config.mk b/core/soong_config.mk
index a39707e..9eb02b2 100644
--- a/core/soong_config.mk
+++ b/core/soong_config.mk
@@ -165,6 +165,7 @@
 $(call add_json_list, VendorSnapshotDirsExcluded,        $(VENDOR_SNAPSHOT_DIRS_EXCLUDED))
 $(call add_json_list, RecoverySnapshotDirsIncluded,      $(RECOVERY_SNAPSHOT_DIRS_INCLUDED))
 $(call add_json_list, RecoverySnapshotDirsExcluded,      $(RECOVERY_SNAPSHOT_DIRS_EXCLUDED))
+$(call add_json_bool, HostFakeSnapshotEnabled,           $(HOST_FAKE_SNAPSHOT_ENABLE))
 
 $(call add_json_bool, Treble_linker_namespaces,          $(filter true,$(PRODUCT_TREBLE_LINKER_NAMESPACES)))
 $(call add_json_bool, Enforce_vintf_manifest,            $(filter true,$(PRODUCT_ENFORCE_VINTF_MANIFEST)))
diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py
index 5275087..f3b58f8 100644
--- a/tools/releasetools/add_img_to_target_files.py
+++ b/tools/releasetools/add_img_to_target_files.py
@@ -42,10 +42,6 @@
   --is_signing
       Skip building & adding the images for "userdata" and "cache" if we
       are signing the target files.
-
-  --skip_list <partitions>
-      Optional comma-separated list of partitions to skip when
-      processing the zipfile.
 """
 
 from __future__ import print_function
@@ -82,7 +78,6 @@
 OPTIONS.replace_verity_public_key = False
 OPTIONS.replace_verity_private_key = False
 OPTIONS.is_signing = False
-OPTIONS.skip_list = []
 
 # Use a fixed timestamp (01/01/2009 00:00:00 UTC) for files when packaging
 # images. (b/24377993, b/80600931)
@@ -594,7 +589,7 @@
     AssertionError: If it can't find an image.
   """
   for partition in ab_partitions:
-    img_name = partition + ".img"
+    img_name = partition.strip() + ".img"
 
     # Assert that the image is present under IMAGES/ now.
     if output_zip:
@@ -801,7 +796,7 @@
     logger.info("\n\n++++ %s  ++++\n\n", s)
 
   boot_image = None
-  if has_boot and "boot" not in OPTIONS.skip_list:
+  if has_boot:
     banner("boot")
     boot_images = OPTIONS.info_dict.get("boot_images")
     if boot_images is None:
@@ -822,7 +817,7 @@
           if output_zip:
             boot_image.AddToZip(output_zip)
 
-  if has_vendor_boot and "vendor_boot" not in OPTIONS.skip_list:
+  if has_vendor_boot:
     banner("vendor_boot")
     vendor_boot_image = common.GetVendorBootImage(
         "IMAGES/vendor_boot.img", "vendor_boot.img", OPTIONS.input_tmp,
@@ -836,7 +831,7 @@
           vendor_boot_image.AddToZip(output_zip)
 
   recovery_image = None
-  if has_recovery and "recovery" not in OPTIONS.skip_list:
+  if has_recovery:
     banner("recovery")
     recovery_image = common.GetBootableImage(
         "IMAGES/recovery.img", "recovery.img", OPTIONS.input_tmp, "RECOVERY")
@@ -861,39 +856,59 @@
         if output_zip:
           recovery_two_step_image.AddToZip(output_zip)
 
-  def add_partition(call):
-    partition, has_partition, add_func, add_args = call
-    if has_partition and partition not in OPTIONS.skip_list:
-      banner(partition)
-      partitions[partition] = add_func(output_zip, *add_args)
+  if has_system:
+    banner("system")
+    partitions['system'] = AddSystem(
+        output_zip, recovery_img=recovery_image, boot_img=boot_image)
 
-  add_partition_calls = (
-      ("system", has_system, AddSystem, [recovery_image, boot_image]),
-      ("vendor", has_vendor, AddVendor, [recovery_image, boot_image]),
-      ("product", has_product, AddProduct, []),
-      ("system_ext", has_system_ext, AddSystemExt, []),
-      ("odm", has_odm, AddOdm, []),
-      ("vendor_dlkm", has_vendor_dlkm, AddVendorDlkm, []),
-      ("odm_dlkm", has_odm_dlkm, AddOdmDlkm, []),
-      ("system_other", has_system_other, AddSystemOther, []),
-  )
-  for call in add_partition_calls:
-    add_partition(call)
+  if has_vendor:
+    banner("vendor")
+    partitions['vendor'] = AddVendor(
+        output_zip, recovery_img=recovery_image, boot_img=boot_image)
+
+  if has_product:
+    banner("product")
+    partitions['product'] = AddProduct(output_zip)
+
+  if has_system_ext:
+    banner("system_ext")
+    partitions['system_ext'] = AddSystemExt(output_zip)
+
+  if has_odm:
+    banner("odm")
+    partitions['odm'] = AddOdm(output_zip)
+
+  if has_vendor_dlkm:
+    banner("vendor_dlkm")
+    partitions['vendor_dlkm'] = AddVendorDlkm(output_zip)
+
+  if has_odm_dlkm:
+    banner("odm_dlkm")
+    partitions['odm_dlkm'] = AddOdmDlkm(output_zip)
+
+  if has_system_other:
+    banner("system_other")
+    AddSystemOther(output_zip)
 
   AddApexInfo(output_zip)
 
   if not OPTIONS.is_signing:
-    add_partition(("userdata", True, AddUserdata, []))
-    add_partition(("cache", True, AddUserdata, []))
+    banner("userdata")
+    AddUserdata(output_zip)
+    banner("cache")
+    AddCache(output_zip)
 
   if OPTIONS.info_dict.get("board_bpt_enable") == "true":
     banner("partition-table")
     AddPartitionTable(output_zip)
 
-  add_partition(
-      ("dtbo", OPTIONS.info_dict.get("has_dtbo") == "true", AddDtbo, []))
-  add_partition(
-      ("pvmfw", OPTIONS.info_dict.get("has_pvmfw") == "true", AddPvmfw, []))
+  if OPTIONS.info_dict.get("has_dtbo") == "true":
+    banner("dtbo")
+    partitions['dtbo'] = AddDtbo(output_zip)
+
+  if OPTIONS.info_dict.get("has_pvmfw") == "true":
+    banner("pvmfw")
+    partitions['pvmfw'] = AddPvmfw(output_zip)
 
   # Custom images.
   custom_partitions = OPTIONS.info_dict.get(
@@ -911,7 +926,7 @@
     vbmeta_partitions = common.AVB_PARTITIONS[:] + tuple(custom_partitions)
 
     vbmeta_system = OPTIONS.info_dict.get("avb_vbmeta_system", "").strip()
-    if vbmeta_system and "vbmeta_system" not in OPTIONS.skip_list:
+    if vbmeta_system:
       banner("vbmeta_system")
       partitions["vbmeta_system"] = AddVBMeta(
           output_zip, partitions, "vbmeta_system", vbmeta_system.split())
@@ -921,7 +936,7 @@
       vbmeta_partitions.append("vbmeta_system")
 
     vbmeta_vendor = OPTIONS.info_dict.get("avb_vbmeta_vendor", "").strip()
-    if vbmeta_vendor and "vbmeta_vendor" not in OPTIONS.skip_list:
+    if vbmeta_vendor:
       banner("vbmeta_vendor")
       partitions["vbmeta_vendor"] = AddVBMeta(
           output_zip, partitions, "vbmeta_vendor", vbmeta_vendor.split())
@@ -930,20 +945,16 @@
           if item not in vbmeta_vendor.split()]
       vbmeta_partitions.append("vbmeta_vendor")
 
-    if OPTIONS.info_dict.get("avb_building_vbmeta_image"
-                            ) == "true" and "vbmeta" not in OPTIONS.skip_list:
+    if OPTIONS.info_dict.get("avb_building_vbmeta_image") == "true":
       banner("vbmeta")
       AddVBMeta(output_zip, partitions, "vbmeta", vbmeta_partitions)
 
   if OPTIONS.info_dict.get("use_dynamic_partitions") == "true":
-    if OPTIONS.info_dict.get(
-        "build_super_empty_partition"
-    ) == "true" and "super_empty" not in OPTIONS.skip_list:
+    if OPTIONS.info_dict.get("build_super_empty_partition") == "true":
       banner("super_empty")
       AddSuperEmpty(output_zip)
 
-  if OPTIONS.info_dict.get(
-      "build_super_partition") == "true" and "super" not in OPTIONS.skip_list:
+  if OPTIONS.info_dict.get("build_super_partition") == "true":
     if OPTIONS.info_dict.get(
         "build_retrofit_dynamic_partitions_ota_package") == "true":
       banner("super split images")
@@ -954,20 +965,17 @@
                                    "ab_partitions.txt")
   if os.path.exists(ab_partitions_txt):
     with open(ab_partitions_txt) as f:
-      ab_partitions = f.read().splitlines()
+      ab_partitions = f.readlines()
 
-    # Skip care_map generation if any A/B partitions are in the skip list,
-    # since this file cannot be generated without those partitions.
-    if not set(ab_partitions).intersection(set(OPTIONS.skip_list)):
-      # For devices using A/B update, make sure we have all the needed images
-      # ready under IMAGES/ or RADIO/.
-      CheckAbOtaImages(output_zip, ab_partitions)
+    # For devices using A/B update, make sure we have all the needed images
+    # ready under IMAGES/ or RADIO/.
+    CheckAbOtaImages(output_zip, ab_partitions)
 
-      # Generate care_map.pb for ab_partitions, then write this file to
-      # target_files package.
-      output_care_map = os.path.join(OPTIONS.input_tmp, "META", "care_map.pb")
-      AddCareMapForAbOta(output_zip if output_zip else output_care_map,
-                         ab_partitions, partitions)
+    # Generate care_map.pb for ab_partitions, then write this file to
+    # target_files package.
+    output_care_map = os.path.join(OPTIONS.input_tmp, "META", "care_map.pb")
+    AddCareMapForAbOta(output_zip if output_zip else output_care_map,
+                       ab_partitions, partitions)
 
   # Radio images that need to be packed into IMAGES/, and product-img.zip.
   pack_radioimages_txt = os.path.join(
@@ -976,8 +984,7 @@
     with open(pack_radioimages_txt) as f:
       AddPackRadioImages(output_zip, f.readlines())
 
-  if "vbmeta" not in OPTIONS.skip_list:
-    AddVbmetaDigest(output_zip)
+  AddVbmetaDigest(output_zip)
 
   if output_zip:
     common.ZipClose(output_zip)
@@ -998,8 +1005,6 @@
       OPTIONS.replace_verity_public_key = (True, a)
     elif o == "--is_signing":
       OPTIONS.is_signing = True
-    elif o == "--skip_list":
-      OPTIONS.skip_list = a.split(',')
     else:
       return False
     return True
@@ -1009,7 +1014,7 @@
       extra_long_opts=["add_missing", "rebuild_recovery",
                        "replace_verity_public_key=",
                        "replace_verity_private_key=",
-                       "is_signing","skip_list="],
+                       "is_signing"],
       extra_option_handler=option_handler)
 
   if len(args) != 1:
diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py
index 47703bb..0842af9 100755
--- a/tools/releasetools/sign_target_files_apks.py
+++ b/tools/releasetools/sign_target_files_apks.py
@@ -189,8 +189,6 @@
 OPTIONS.gki_signing_algorithm = None
 OPTIONS.gki_signing_extra_args = None
 OPTIONS.android_jar_path = None
-OPTIONS.vendor_partitions = []
-OPTIONS.vendor_otatools = None
 
 
 AVB_FOOTER_ARGS_BY_PARTITION = {
@@ -1291,10 +1289,6 @@
       OPTIONS.gki_signing_algorithm = a
     elif o == "--gki_signing_extra_args":
       OPTIONS.gki_signing_extra_args = a
-    elif o == "--vendor_otatools":
-      OPTIONS.vendor_otatools = a
-    elif o == "--vendor_partitions":
-      OPTIONS.vendor_partitions = a.split(",")
     else:
       return False
     return True
@@ -1345,8 +1339,6 @@
           "gki_signing_key=",
           "gki_signing_algorithm=",
           "gki_signing_extra_args=",
-          "vendor_partitions=",
-          "vendor_otatools=",
       ],
       extra_option_handler=option_handler)
 
@@ -1393,12 +1385,7 @@
   common.ZipClose(output_zip)
 
   # Skip building userdata.img and cache.img when signing the target files.
-  new_args = ["--is_signing", "--verbose"]
-  if OPTIONS.vendor_partitions:
-    new_args += [
-        "--skip_list",
-        ','.join(OPTIONS.vendor_partitions),
-    ]
+  new_args = ["--is_signing"]
   # add_img_to_target_files builds the system image from scratch, so the
   # recovery patch is guaranteed to be regenerated there.
   if OPTIONS.rebuild_recovery:
@@ -1406,19 +1393,6 @@
   new_args.append(args[1])
   add_img_to_target_files.main(new_args)
 
-  # Rebuild the vendor partitions using vendor_otatools.
-  # TODO(b/192253131): Remove the need for image compilation with vendor_otatools
-  if OPTIONS.vendor_partitions and OPTIONS.vendor_otatools:
-    vendor_otatools_dir = common.MakeTempDir(prefix="vendor_otatools_")
-    common.UnzipToDir(OPTIONS.vendor_otatools, vendor_otatools_dir)
-    cmd = [
-        os.path.join(vendor_otatools_dir, "bin", "add_img_to_target_files"),
-        "--verbose",
-        "--add_missing",
-        args[1],
-    ]
-    common.RunAndCheckOutput(cmd, verbose=True)
-
   print("done.")
 
 
diff --git a/tools/zipalign/ZipFile.cpp b/tools/zipalign/ZipFile.cpp
index 1e3c413..6037d59 100644
--- a/tools/zipalign/ZipFile.cpp
+++ b/tools/zipalign/ZipFile.cpp
@@ -654,7 +654,7 @@
 {
     ZipEntry* pEntry = NULL;
     status_t result;
-    long lfhPosn, startPosn, endPosn, uncompressedLen;
+    long lfhPosn, uncompressedLen;
 
     if (mReadOnly)
         return INVALID_OPERATION;
@@ -690,7 +690,6 @@
      */
     lfhPosn = ftell(mZipFp);
     pEntry->mLFH.write(mZipFp);
-    startPosn = ftell(mZipFp);
 
     /*
      * Copy the data over.
@@ -741,18 +740,13 @@
     }
 
     /*
-     * Update file offsets.
-     */
-    endPosn = ftell(mZipFp);
-
-    /*
      * Success!  Fill out new values.
      */
     pEntry->setLFHOffset(lfhPosn);
     mEOCD.mNumEntries++;
     mEOCD.mTotalNumEntries++;
     mEOCD.mCentralDirSize = 0;      // mark invalid; set by flush()
-    mEOCD.mCentralDirOffset = endPosn;
+    mEOCD.mCentralDirOffset = ftell(mZipFp);
 
     /*
      * Go back and write the LFH.
