diff --git a/android/config.go b/android/config.go index 1e5a24de9..687cf9b8c 100644 --- a/android/config.go +++ b/android/config.go @@ -1091,6 +1091,10 @@ func (c *config) EnforceProductPartitionInterface() bool { return Bool(c.productVariables.EnforceProductPartitionInterface) } +func (c *config) InstallExtraFlattenedApexes() bool { + return Bool(c.productVariables.InstallExtraFlattenedApexes) +} + func (c *config) ProductHiddenAPIStubs() []string { return c.productVariables.ProductHiddenAPIStubs } diff --git a/android/variable.go b/android/variable.go index 25a5dc08f..628408eac 100644 --- a/android/variable.go +++ b/android/variable.go @@ -311,6 +311,8 @@ type productVariables struct { MissingUsesLibraries []string `json:",omitempty"` EnforceProductPartitionInterface *bool `json:",omitempty"` + + InstallExtraFlattenedApexes *bool `json:",omitempty"` } func boolPtr(v bool) *bool { diff --git a/apex/apex.go b/apex/apex.go index 289175bf7..4efba0314 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -905,6 +905,10 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { } else { a.suffix = "" a.primaryApexType = true + + if ctx.Config().InstallExtraFlattenedApexes() { + a.externalDeps = append(a.externalDeps, a.Name()+flattenedSuffix) + } } case zipApex: if proptools.String(a.properties.Payload_type) == "zip" { diff --git a/apex/apex_test.go b/apex/apex_test.go index 509d76039..2b09801cf 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -2458,6 +2458,29 @@ func TestApexWithTests(t *testing.T) { ensureContains(t, androidMk, "LOCAL_MODULE := myapex\n") } +func TestInstallExtraFlattenedApexes(t *testing.T) { + ctx, config := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + } + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + `, func(fs map[string][]byte, config android.Config) { + config.TestProductVariables.InstallExtraFlattenedApexes = proptools.BoolPtr(true) + }) + ab := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle) + ensureListContains(t, ab.externalDeps, "myapex.flattened") + mk := android.AndroidMkDataForTest(t, config, "", ab) + var builder strings.Builder + mk.Custom(&builder, ab.Name(), "TARGET_", "", mk) + androidMk := builder.String() + ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += myapex.flattened") +} + func TestApexUsesOtherApex(t *testing.T) { ctx, _ := testApex(t, ` apex {