diff --git a/java/platform_compat_config.go b/java/platform_compat_config.go index 03e82c2a8..c3d13ae65 100644 --- a/java/platform_compat_config.go +++ b/java/platform_compat_config.go @@ -221,12 +221,40 @@ type platformCompatConfigSingleton struct { metadata android.Path } +// isModulePreferredByCompatConfig checks to see whether the module is preferred for use by +// platform compat config. +func isModulePreferredByCompatConfig(module android.Module) bool { + // A versioned prebuilt_platform_compat_config, i.e. foo-platform-compat-config@current should be + // ignored. + if s, ok := module.(android.SdkAware); ok { + if !s.ContainingSdk().Unversioned() { + return false + } + } + + // A prebuilt module should only be used when it is preferred. + if pi, ok := module.(android.PrebuiltInterface); ok { + if p := pi.Prebuilt(); p != nil { + return p.UsePrebuilt() + } + } + + // Otherwise, a module should only be used if it has not been replaced by a prebuilt. + return !module.IsReplacedByPrebuilt() +} + func (p *platformCompatConfigSingleton) GenerateBuildActions(ctx android.SingletonContext) { var compatConfigMetadata android.Paths ctx.VisitAllModules(func(module android.Module) { + if !module.Enabled() { + return + } if c, ok := module.(platformCompatConfigMetadataProvider); ok { + if !isModulePreferredByCompatConfig(module) { + return + } metadata := c.compatConfigMetadata() compatConfigMetadata = append(compatConfigMetadata, metadata) } diff --git a/sdk/compat_config_sdk_test.go b/sdk/compat_config_sdk_test.go index 1b62885bd..00073c29d 100644 --- a/sdk/compat_config_sdk_test.go +++ b/sdk/compat_config_sdk_test.go @@ -77,8 +77,6 @@ prebuilt_platform_compat_config { // Make sure that the snapshot metadata is collated by the platform compat config singleton. java.CheckMergedCompatConfigInputs(t, result, "snapshot module", "out/soong/.intermediates/myconfig/android_common/myconfig_meta.xml", - // TODO(b/182402754): Remove this as only the config file from the preferred module should be used. - "snapshot/compat_configs/myconfig/myconfig_meta.xml", ) }), @@ -86,8 +84,6 @@ prebuilt_platform_compat_config { func(t *testing.T, result *android.TestResult) { // Make sure that the snapshot metadata is collated by the platform compat config singleton. java.CheckMergedCompatConfigInputs(t, result, "snapshot module", - "out/soong/.intermediates/myconfig/android_common/myconfig_meta.xml", - // TODO(b/182402754): Remove this as only the config file from the preferred module should be used. "snapshot/compat_configs/myconfig/myconfig_meta.xml", ) }),