Define VendorApiLevelPropOverride for GRF prop

Soong must read BOARD_API_LEVEL_PROP_OVERRIDE to generate build props
for vendor image. If this value is provided, ro.board.api_level will
be set to this value.

Bug: 374333106
Test: read product_config
Change-Id: Ifbeea76596ea7b22928ae58467bb05cffeb5da1f
diff --git a/android/variable.go b/android/variable.go
index 34a3d30..c352942 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -241,7 +241,8 @@
 	DeviceMaxPageSizeSupported            *string  `json:",omitempty"`
 	DeviceNoBionicPageSizeMacro           *bool    `json:",omitempty"`
 
-	VendorApiLevel *string `json:",omitempty"`
+	VendorApiLevel             *string `json:",omitempty"`
+	VendorApiLevelPropOverride *string `json:",omitempty"`
 
 	DeviceSecondaryArch        *string  `json:",omitempty"`
 	DeviceSecondaryArchVariant *string  `json:",omitempty"`
diff --git a/scripts/gen_build_prop.py b/scripts/gen_build_prop.py
index c08a3fd..df9e98d 100644
--- a/scripts/gen_build_prop.py
+++ b/scripts/gen_build_prop.py
@@ -429,7 +429,9 @@
   # Build system set BOARD_API_LEVEL to show the api level of the vendor API surface.
   # This must not be altered outside of build system.
   if config["VendorApiLevel"]:
-    props.append(f"ro.board.api_level={config['VendorApiLevel']}")
+    props.append(f"ro.board.api_level?={config['VendorApiLevel']}")
+    if config["VendorApiLevelPropOverride"]:
+      props.append(f"ro.board.api_level={config['VendorApiLevelPropOverride']}")
 
   # RELEASE_BOARD_API_LEVEL_FROZEN is true when the vendor API surface is frozen.
   if build_flags["RELEASE_BOARD_API_LEVEL_FROZEN"]: