Allow codename.fingerprint format for targetSdkVersion

Use codename.fingerprint format for targetSdkVersion if it is unset
in the manifest and UNBUNDLED_BUILD_TARGET_SDK_WITH_API_FINGERPRINT=true.

Test: manual
Bug: 130541924
Change-Id: I4e3b1274cc32038b00b292dc6d67559eb320e9e4
diff --git a/java/android_manifest.go b/java/android_manifest.go
index d72476d..39cf471 100644
--- a/java/android_manifest.go
+++ b/java/android_manifest.go
@@ -68,15 +68,27 @@
 		args = append(args, "--use-embedded-dex=true")
 	}
 
+	var deps android.Paths
+	targetSdkVersion := sdkVersionOrDefault(ctx, sdkContext.targetSdkVersion())
+	if targetSdkVersion == ctx.Config().PlatformSdkCodename() &&
+		ctx.Config().UnbundledBuild() &&
+		!ctx.Config().UnbundledBuildUsePrebuiltSdks() &&
+		ctx.Config().IsEnvTrue("UNBUNDLED_BUILD_TARGET_SDK_WITH_API_FINGERPRINT") {
+		apiFingerprint := apiFingerprintPath(ctx)
+		targetSdkVersion += fmt.Sprintf(".$$(cat %s)", apiFingerprint.String())
+		deps = append(deps, apiFingerprint)
+	}
+
 	// Inject minSdkVersion into the manifest
 	fixedManifest := android.PathForModuleOut(ctx, "manifest_fixer", "AndroidManifest.xml")
 	ctx.Build(pctx, android.BuildParams{
-		Rule:   manifestFixerRule,
-		Input:  manifest,
-		Output: fixedManifest,
+		Rule:      manifestFixerRule,
+		Input:     manifest,
+		Implicits: deps,
+		Output:    fixedManifest,
 		Args: map[string]string{
 			"minSdkVersion":    sdkVersionOrDefault(ctx, sdkContext.minSdkVersion()),
-			"targetSdkVersion": sdkVersionOrDefault(ctx, sdkContext.targetSdkVersion()),
+			"targetSdkVersion": targetSdkVersion,
 			"args":             strings.Join(args, " "),
 		},
 	})