Support passing resource zips to aapt2

A zip of resources provides an easy way to pass generated resources
to aapt2.

Bug: 74574557
Test: m FrameworksCoreTests
Change-Id: Ie4b1391521a27727694d03e42462b40d775614f8
diff --git a/java/aapt2.go b/java/aapt2.go
index 86eb9c8..d217b9f 100644
--- a/java/aapt2.go
+++ b/java/aapt2.go
@@ -109,6 +109,31 @@
 	})
 }
 
+var aapt2CompileZipRule = pctx.AndroidStaticRule("aapt2CompileZip",
+	blueprint.RuleParams{
+		Command: `${config.ZipSyncCmd} -d $resZipDir $in && ` +
+			`${config.Aapt2Cmd} compile -o $out $cFlags --legacy --dir $resZipDir`,
+		CommandDeps: []string{
+			"${config.Aapt2Cmd}",
+			"${config.ZipSyncCmd}",
+		},
+	}, "cFlags", "resZipDir")
+
+func aapt2CompileZip(ctx android.ModuleContext, flata android.WritablePath, zip android.Path) {
+	ctx.Build(pctx, android.BuildParams{
+		Rule:        aapt2CompileZipRule,
+		Description: "aapt2 compile zip",
+		Input:       zip,
+		Output:      flata,
+		Args: map[string]string{
+			// Always set --pseudo-localize, it will be stripped out later for release
+			// builds that don't want it.
+			"cFlags":    "--pseudo-localize",
+			"resZipDir": android.PathForModuleOut(ctx, "aapt2", "reszip", flata.Base()).String(),
+		},
+	})
+}
+
 var aapt2LinkRule = pctx.AndroidStaticRule("aapt2Link",
 	blueprint.RuleParams{
 		Command: `rm -rf $genDir && ` +