Don't use prebuilt_apex when TARGET_FLATTEN_APEX is set to true
am: 0a573d798f

Change-Id: I67d532961fc4584bc0d7bf3616edb3236fb1acc9
diff --git a/android/prebuilt.go b/android/prebuilt.go
index 5087b18..3d9804c 100644
--- a/android/prebuilt.go
+++ b/android/prebuilt.go
@@ -183,3 +183,7 @@
 
 	return source == nil || !source.Enabled()
 }
+
+func (p *Prebuilt) SourceExists() bool {
+	return p.properties.SourceExists
+}
diff --git a/apex/apex.go b/apex/apex.go
index 41728d1..b77e12f 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -1405,7 +1405,8 @@
 
 type PrebuiltProperties struct {
 	// the path to the prebuilt .apex file to import.
-	Source string `blueprint:"mutated"`
+	Source       string `blueprint:"mutated"`
+	ForceDisable bool   `blueprint:"mutated"`
 
 	Src  *string
 	Arch struct {
@@ -1434,6 +1435,14 @@
 }
 
 func (p *Prebuilt) DepsMutator(ctx android.BottomUpMutatorContext) {
+	if ctx.Config().FlattenApex() && !ctx.Config().UnbundledBuild() && p.prebuilt.SourceExists() {
+		// If the device is configured to use flattened APEX, don't set
+		// p.properties.Source so that the prebuilt module (which is
+		// a non-flattened APEX) is not used.
+		p.properties.ForceDisable = true
+		return
+	}
+
 	// This is called before prebuilt_select and prebuilt_postdeps mutators
 	// The mutators requires that src to be set correctly for each arch so that
 	// arch variants are disabled when src is not provided for the arch.
@@ -1475,6 +1484,10 @@
 }
 
 func (p *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+	if p.properties.ForceDisable {
+		return
+	}
+
 	// TODO(jungjw): Check the key validity.
 	p.inputApex = p.Prebuilt().SingleSourcePath(ctx)
 	p.installDir = android.PathForModuleInstall(ctx, "apex")