apex: skip symbol files when replaced with prebuilt

Apexer rule with symbol files causes "no build rule" error when the apex
is replaced with prebuilt.

Bug: 251299786
Test: m checkbuild (presubmit)
Change-Id: I7390f72c321beaeb49fcee4e02a219c07f184664
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 557265c..924f923 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -5646,6 +5646,58 @@
 	})
 }
 
+func TestPrebuiltSkipsSymbols(t *testing.T) {
+	testCases := []struct {
+		name               string
+		usePrebuilt        bool
+		installSymbolFiles bool
+	}{
+		{
+			name:               "Source module build rule doesn't install symbol files",
+			usePrebuilt:        true,
+			installSymbolFiles: false,
+		},
+		{
+			name:               "Source module is installed with symbols",
+			usePrebuilt:        false,
+			installSymbolFiles: true,
+		},
+	}
+	for _, tc := range testCases {
+		t.Run(tc.name, func(t *testing.T) {
+			preferProperty := "prefer: false"
+			if tc.usePrebuilt {
+				preferProperty = "prefer: true"
+			}
+			ctx := testApex(t, `
+				// Source module
+				apex {
+					name: "myapex",
+					key: "myapex.key",
+					updatable: false,
+				}
+
+				apex_key {
+					name: "myapex.key",
+					public_key: "testkey.avbpubkey",
+					private_key: "testkey.pem",
+				}
+
+				apex_set {
+					name: "myapex",
+					set: "myapex.apks",
+					`+preferProperty+`
+				}
+			`)
+			// Symbol files are installed by installing entries under ${OUT}/apex/{apex name}
+			android.AssertStringListContainsEquals(t, "Implicits",
+				ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule").Implicits.Strings(),
+				"out/soong/target/product/test_device/apex/myapex/apex_manifest.pb",
+				tc.installSymbolFiles)
+		})
+	}
+}
+
 func TestApexWithTests(t *testing.T) {
 	ctx := testApex(t, `
 		apex_test {
diff --git a/apex/builder.go b/apex/builder.go
index 94aef49..2f8a4ec 100644
--- a/apex/builder.go
+++ b/apex/builder.go
@@ -468,6 +468,10 @@
 	imageDir := android.PathForModuleOut(ctx, "image"+suffix)
 
 	installSymbolFiles := (!ctx.Config().KatiEnabled() || a.ExportedToMake()) && a.installable()
+	// We can't install symbol files when prebuilt is used.
+	if a.IsReplacedByPrebuilt() {
+		installSymbolFiles = false
+	}
 
 	// set of dependency module:location mappings
 	installMapSet := make(map[string]bool)