Add installable property for prebuilt_apex

In case of shim apexes, we prebuilt all of them, but only need to
install v1 to a system partition.

Bug: 128677967
Test: manually checked that non-installable prebuilts don't end in /system
Change-Id: I112432abfd8f03cc7d7379ea3cab3f5491ace49c
diff --git a/apex/apex.go b/apex/apex.go
index 3327a56..2332acc 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -1317,6 +1317,12 @@
 			Src *string
 		}
 	}
+
+	Installable *bool
+}
+
+func (p *Prebuilt) installable() bool {
+	return p.properties.Installable == nil || proptools.Bool(p.properties.Installable)
 }
 
 func (p *Prebuilt) DepsMutator(ctx android.BottomUpMutatorContext) {
@@ -1351,7 +1357,9 @@
 	// TODO(jungjw): Check the key validity.
 	p.inputApex = p.Prebuilt().SingleSourcePath(ctx)
 	p.installDir = android.PathForModuleInstall(ctx, "apex")
-	ctx.InstallFile(p.installDir, ctx.ModuleName()+imageApexSuffix, p.inputApex)
+	if p.installable() {
+		ctx.InstallFile(p.installDir, ctx.ModuleName()+imageApexSuffix, p.inputApex)
+	}
 }
 
 func (p *Prebuilt) Prebuilt() *android.Prebuilt {
@@ -1371,6 +1379,7 @@
 			func(w io.Writer, outputFile android.Path) {
 				fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", filepath.Join("$(OUT_DIR)", p.installDir.RelPathString()))
 				fmt.Fprintln(w, "LOCAL_MODULE_STEM :=", p.BaseModuleName()+imageApexSuffix)
+				fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE :=", !p.installable())
 			},
 		},
 	}