diff --git a/android/apex.go b/android/apex.go index 29b2a9fa8..114fe2988 100644 --- a/android/apex.go +++ b/android/apex.go @@ -88,6 +88,9 @@ type ApexInfo struct { // Returns the name of the overridden apex (com.android.foo) BaseApexName string + + // Returns the value of `apex_available_name` + ApexAvailableName string } // AllApexInfo holds the ApexInfo of all apexes that include this module. diff --git a/apex/apex.go b/apex/apex.go index e94327af5..27e9caa57 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1071,6 +1071,7 @@ func (a *apexBundle) ApexInfoMutator(mctx android.TopDownMutatorContext) { ApexContents: []*android.ApexContents{apexContents}, TestApexes: testApexes, BaseApexName: mctx.ModuleName(), + ApexAvailableName: proptools.String(a.properties.Apex_available_name), } mctx.WalkDeps(func(child, parent android.Module) bool { if !continueApexDepsWalk(child, parent) { diff --git a/apex/bootclasspath_fragment_test.go b/apex/bootclasspath_fragment_test.go index 7cad337cb..df7857f29 100644 --- a/apex/bootclasspath_fragment_test.go +++ b/apex/bootclasspath_fragment_test.go @@ -835,6 +835,7 @@ func TestBootclasspathFragment_HiddenAPIList(t *testing.T) { `) java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{ + "all_apex_contributions", "art-bootclasspath-fragment", "bar", "dex2oatd", @@ -1006,6 +1007,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_FromSource(t *testing.T) { `) java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{ + "all_apex_contributions", "android-non-updatable.stubs", "android-non-updatable.stubs.module_lib", "android-non-updatable.stubs.system", @@ -1178,6 +1180,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_FromText(t *testing.T) { `) java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{ + "all_apex_contributions", "android-non-updatable.stubs", "android-non-updatable.stubs.system", "android-non-updatable.stubs.test", @@ -1331,6 +1334,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_AlwaysUsePrebuiltSdks(t *test `) java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{ + "all_apex_contributions", "art-bootclasspath-fragment", "bar", "dex2oatd", diff --git a/java/bootclasspath_fragment.go b/java/bootclasspath_fragment.go index bef3b58c8..fe4cc7685 100644 --- a/java/bootclasspath_fragment.go +++ b/java/bootclasspath_fragment.go @@ -463,6 +463,12 @@ func (b *BootclasspathFragmentModule) DepsMutator(ctx android.BottomUpMutatorCon // Add a dependency onto the dex2oat tool which is needed for creating the boot image. The // path is retrieved from the dependency by GetGlobalSoongConfig(ctx). dexpreopt.RegisterToolDeps(ctx) + + // Add a dependency to `all_apex_contributions` to determine if prebuilts are active. + // If prebuilts are active, `contents` validation on the source bootclasspath fragment should be disabled. + if _, isPrebuiltModule := ctx.Module().(*PrebuiltBootclasspathFragmentModule); !isPrebuiltModule { + ctx.AddDependency(b, android.AcDepTag, "all_apex_contributions") + } } func (b *BootclasspathFragmentModule) BootclasspathDepsMutator(ctx android.BottomUpMutatorContext) { diff --git a/java/dexpreopt.go b/java/dexpreopt.go index 1c63e3f24..4734357ab 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -209,13 +209,18 @@ func disableSourceApexVariant(ctx android.BaseModuleContext) bool { psi = prebuiltSelectionInfo } }) + // Find the apex variant for this module - var apexVariantsWithoutTestApexes []string + apexVariantsWithoutTestApexes := []string{} if apexInfo.BaseApexName != "" { // This is a transitive dependency of an override_apex - apexVariantsWithoutTestApexes = []string{apexInfo.BaseApexName} + apexVariantsWithoutTestApexes = append(apexVariantsWithoutTestApexes, apexInfo.BaseApexName) } else { - _, apexVariantsWithoutTestApexes, _ = android.ListSetDifference(apexInfo.InApexVariants, apexInfo.TestApexes) + _, variants, _ := android.ListSetDifference(apexInfo.InApexVariants, apexInfo.TestApexes) + apexVariantsWithoutTestApexes = append(apexVariantsWithoutTestApexes, variants...) + } + if apexInfo.ApexAvailableName != "" { + apexVariantsWithoutTestApexes = append(apexVariantsWithoutTestApexes, apexInfo.ApexAvailableName) } disableSource := false // find the selected apexes