Support for `prebuilt_avb` in Soong

Generally, the `root` directories for `prebuilt_etc` and
`prebuilt_root` are <partitions>. And <partitions> default to false
for InstallInRoot(), they always create a "system" subdirectory.
(See android/paths.go:modulePartition())

However, avb keys like `q-developer-gsi.avbpubkey` are installed by
default in the `avb` subdirectory under the `root directory` of the
<partition>. Therefore, it is necessary to create `prebuilt_avb` in
Soong and force the installation directory to be the `avb` subdirectory
under the `root directory` of the <partition> to meet the requirements.

Bug: 347636127
Test: go test -run TestPrebuiltAvbInstallDirPath
Change-Id: I0ee08492da9a96a567700a7285c527b280dcd5db
diff --git a/etc/prebuilt_etc_test.go b/etc/prebuilt_etc_test.go
index c44574a..e739afe 100644
--- a/etc/prebuilt_etc_test.go
+++ b/etc/prebuilt_etc_test.go
@@ -244,6 +244,31 @@
 	`)
 }
 
+func TestPrebuiltAvbInstallDirPath(t *testing.T) {
+	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
+		prebuilt_avb {
+			name: "foo.conf",
+			src: "foo.conf",
+			filename: "foo.conf",
+			//recovery: true,
+		}
+	`)
+
+	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
+	expected := "out/soong/target/product/test_device/root/avb"
+	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPath)
+}
+
+func TestPrebuiltAvdInstallDirPathValidate(t *testing.T) {
+	prepareForPrebuiltEtcTest.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("filename cannot contain separator")).RunTestWithBp(t, `
+		prebuilt_avb {
+			name: "foo.conf",
+			src: "foo.conf",
+			filename: "foo/bar.conf",
+		}
+	`)
+}
+
 func TestPrebuiltUserShareInstallDirPath(t *testing.T) {
 	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
 		prebuilt_usr_share {