Allow VNDK extensions under vendor or device

This commit allows VNDK extensions (vndk.enabled:true and vendor:true)
to reside under vendor/* or device/*.  VNDK extensions will be installed
into /vendor/lib[64]/vndk[-sp].  It is reasonable for their source being
under vendor/* or device/*.

Bug: 74506774
Test: lunch aosp_walleye-userdebug && make  # runs unit tests
Change-Id: I406c5bef10f5c549371dd978b8ecc16c65a7af4b
diff --git a/android/neverallow.go b/android/neverallow.go
index 3c6c004..ec440d5 100644
--- a/android/neverallow.go
+++ b/android/neverallow.go
@@ -46,9 +46,15 @@
 }
 
 var neverallows = []*rule{
-	neverallow().in("vendor", "device").with("vndk.enabled", "true").
+	neverallow().
+		in("vendor", "device").
+		with("vndk.enabled", "true").
+		without("vendor", "true").
 		because("the VNDK can never contain a library that is device dependent."),
-	neverallow().with("vndk.enabled", "true").without("owner", "").
+	neverallow().
+		with("vndk.enabled", "true").
+		without("vendor", "true").
+		without("owner", "").
 		because("a VNDK module can never have an owner."),
 	neverallow().notIn("libcore", "development").with("no_standard_libs", "true"),
 
diff --git a/android/neverallow_test.go b/android/neverallow_test.go
index 19eeb22..a278365 100644
--- a/android/neverallow_test.go
+++ b/android/neverallow_test.go
@@ -53,6 +53,28 @@
 		},
 		expectedError: "VNDK can never contain a library that is device dependent",
 	},
+	{
+		name: "vndk-ext under vendor or device directory",
+		fs: map[string][]byte{
+			"device/Blueprints": []byte(`
+				cc_library {
+					name: "libvndk1_ext",
+					vendor: true,
+					vndk: {
+						enabled: true,
+					},
+				}`),
+			"vendor/Blueprints": []byte(`
+				cc_library {
+					name: "libvndk2_ext",
+					vendor: true,
+					vndk: {
+						enabled: true,
+					},
+				}`),
+		},
+		expectedError: "",
+	},
 
 	{
 		name: "no enforce_vintf_manifest.cflags",