diff --git a/android/prebuilt.go b/android/prebuilt.go index b6741531d..8559df923 100644 --- a/android/prebuilt.go +++ b/android/prebuilt.go @@ -29,7 +29,7 @@ type prebuiltDependencyTag struct { blueprint.BaseDependencyTag } -var prebuiltDepTag prebuiltDependencyTag +var PrebuiltDepTag prebuiltDependencyTag type PrebuiltProperties struct { // When prefer is set to true the prebuilt will be used instead of any source module with @@ -127,7 +127,7 @@ func PrebuiltMutator(ctx BottomUpMutatorContext) { p := m.Prebuilt() name := m.base().BaseModuleName() if ctx.OtherModuleExists(name) { - ctx.AddReverseDependency(ctx.Module(), prebuiltDepTag, name) + ctx.AddReverseDependency(ctx.Module(), PrebuiltDepTag, name) p.properties.SourceExists = true } else { ctx.Rename(name) @@ -147,7 +147,7 @@ func PrebuiltSelectModuleMutator(ctx TopDownMutatorContext) { p.properties.UsePrebuilt = p.usePrebuilt(ctx, nil) } } else if s, ok := ctx.Module().(Module); ok { - ctx.VisitDirectDepsWithTag(prebuiltDepTag, func(m Module) { + ctx.VisitDirectDepsWithTag(PrebuiltDepTag, func(m Module) { p := m.(PrebuiltInterface).Prebuilt() if p.usePrebuilt(ctx, s) { p.properties.UsePrebuilt = true diff --git a/apex/apex.go b/apex/apex.go index 0466ccbe4..de9ce0d95 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -410,6 +410,8 @@ type apexBundle struct { outputFiles map[apexPackaging]android.WritablePath installDir android.OutputPath + prebuiltFileToDelete string + public_key_file android.Path private_key_file android.Path @@ -871,6 +873,12 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { } else { ctx.ModuleErrorf("certificate dependency %q must be an android_app_certificate module", depName) } + case android.PrebuiltDepTag: + // If the prebuilt is force disabled, remember to delete the prebuilt file + // that might have been installed in the previous builds + if prebuilt, ok := child.(*Prebuilt); ok && prebuilt.isForceDisabled() { + a.prebuiltFileToDelete = prebuilt.InstallFilename() + } } } else { // indirect dependencies @@ -1355,6 +1363,10 @@ func (a *apexBundle) androidMkForType(apexType apexPackaging) android.AndroidMkD if len(a.externalDeps) > 0 { fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(a.externalDeps, " ")) } + if a.prebuiltFileToDelete != "" { + fmt.Fprintln(w, "LOCAL_POST_INSTALL_CMD :=", "rm -rf "+ + filepath.Join("$(OUT_DIR)", a.installDir.RelPathString(), a.prebuiltFileToDelete)) + } fmt.Fprintln(w, "include $(BUILD_PREBUILT)") if apexType == imageApex { @@ -1510,6 +1522,10 @@ func (p *Prebuilt) DepsMutator(ctx android.BottomUpMutatorContext) { p.properties.Source = src } +func (p *Prebuilt) isForceDisabled() bool { + return p.properties.ForceDisable +} + func (p *Prebuilt) OutputFiles(tag string) (android.Paths, error) { switch tag { case "":