diff --git a/android/override_module.go b/android/override_module.go index 55f384f1f..f69f96309 100644 --- a/android/override_module.go +++ b/android/override_module.go @@ -253,6 +253,15 @@ type overrideBaseDependencyTag struct { var overrideBaseDepTag overrideBaseDependencyTag +// Override module should always override the source module. +// Overrides are implemented as a variant of the overridden module, and the build actions are created in the +// module context of the overridden module. +// If we replace override module with the prebuilt of the overridden module, `GenerateAndroidBuildActions` for +// the override module will have a very different meaning. +func (tag overrideBaseDependencyTag) ReplaceSourceWithPrebuilt() bool { + return false +} + // Adds dependency on the base module to the overriding module so that they can be visited in the // next phase. func overrideModuleDepsMutator(ctx BottomUpMutatorContext) { diff --git a/apex/apex_test.go b/apex/apex_test.go index 4cac0ccd4..c60ee73cd 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -11671,3 +11671,38 @@ func TestApexMinSdkVersionOverride(t *testing.T) { checkMinSdkVersion(t, overridingModuleDifferentMinSdkVersion, "31") checkHasDep(t, ctx, overridingModuleDifferentMinSdkVersion.Module(), javalibApex31Variant.Module()) } + +func TestOverrideApexWithPrebuiltApexPreferred(t *testing.T) { + context := android.GroupFixturePreparers( + android.PrepareForIntegrationTestWithAndroid, + PrepareForTestWithApexBuildComponents, + android.FixtureMergeMockFs(android.MockFS{ + "system/sepolicy/apex/foo-file_contexts": nil, + }), + ) + res := context.RunTestWithBp(t, ` + apex { + name: "foo", + key: "myapex.key", + apex_available_name: "com.android.foo", + variant_version: "0", + updatable: false, + } + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + prebuilt_apex { + name: "foo", + src: "foo.apex", + prefer: true, + } + override_apex { + name: "myoverrideapex", + base: "foo", + } + `) + + java.CheckModuleHasDependency(t, res.TestContext, "myoverrideapex", "android_common_myoverrideapex_myoverrideapex", "foo") +}