Rebuild vendor images in sign_target_files_apks with vendor otatools.

This is needed until image compilation tooling is backwards compatible.

Bug: 188491126
Bug: 192253131
Bug: 192422274
Test: Sign a GRF R+S merged target_files package using:
      sign_target_files_apks \
        --vendor_otatools=<otatools.zip from R> \
	--vendor_partitions=vendor,odm,vbmeta \
	merged-target_files.zip \
	signed-target_files.zip
Change-Id: Iec208f544b56f8ed577344d8d6ca904773d8baab
diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py
index 0842af9..47703bb 100755
--- a/tools/releasetools/sign_target_files_apks.py
+++ b/tools/releasetools/sign_target_files_apks.py
@@ -189,6 +189,8 @@
 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 = {
@@ -1289,6 +1291,10 @@
       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
@@ -1339,6 +1345,8 @@
           "gki_signing_key=",
           "gki_signing_algorithm=",
           "gki_signing_extra_args=",
+          "vendor_partitions=",
+          "vendor_otatools=",
       ],
       extra_option_handler=option_handler)
 
@@ -1385,7 +1393,12 @@
   common.ZipClose(output_zip)
 
   # Skip building userdata.img and cache.img when signing the target files.
-  new_args = ["--is_signing"]
+  new_args = ["--is_signing", "--verbose"]
+  if OPTIONS.vendor_partitions:
+    new_args += [
+        "--skip_list",
+        ','.join(OPTIONS.vendor_partitions),
+    ]
   # 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:
@@ -1393,6 +1406,19 @@
   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.")