Disable source javalib dexpreopt when using prebuilt apex

The apex_contributions in next builds use prebuilt apexes with source
java_sdk_library for javac. The dexpreopt rules of the source
java_sdk_library are disabled via
RELEASE_DEFAULT_MODULE_BUILD_FROM_SOURCE coupled with some complicated
special-casing in android/prebuilt.go

This special-casing breaks if we want to use prebuilts of some modules,
and sources of other modules. To enable per mainline module
toggelability, explicitly disable dexpreopt of source variant of
java_sdk_library if we use prebuilt of the containing apex.

Test: In internal, updated trunk_staging.scl's
RELEASE_APEX_CONTRIBUTIONS_ADSERVICES to use prebuilt followed by m
nothing

Change-Id: I32daefbd38338b396d6f07b899826b2869d8f8e1
This commit is contained in:
Spandan Das 2024-02-29 06:40:16 +00:00
parent 5354483c12
commit a8afdcb307

View file

@ -187,6 +187,33 @@ func forPrebuiltApex(ctx android.BaseModuleContext) bool {
return apexInfo.ForPrebuiltApex
}
// For apex variant of modules, this returns true on the source variant if the prebuilt apex
// has been selected using apex_contributions.
// The prebuilt apex will be responsible for generating the dexpreopt rules of the deapexed java lib.
func disableSourceApexVariant(ctx android.BaseModuleContext) bool {
if !isApexVariant(ctx) {
return false // platform variant
}
apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider)
psi := android.PrebuiltSelectionInfoMap{}
ctx.VisitDirectDepsWithTag(android.PrebuiltDepTag, func(am android.Module) {
psi, _ = android.OtherModuleProvider(ctx, am, android.PrebuiltSelectionInfoProvider)
})
// Find the apex variant for this module
_, apexVariantsWithoutTestApexes, _ := android.ListSetDifference(apexInfo.InApexVariants, apexInfo.TestApexes)
disableSource := false
// find the selected apexes
for _, apexVariant := range apexVariantsWithoutTestApexes {
for _, selected := range psi.GetSelectedModulesForApiDomain(apexVariant) {
// If the apex_contribution for this api domain contains a prebuilt apex, disable the source variant
if strings.HasPrefix(selected, "prebuilt_com.google.android") {
disableSource = true
}
}
}
return disableSource
}
// Returns whether dexpreopt is applicable to the module.
// When it returns true, neither profile nor dexpreopt artifacts will be generated.
func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext, libName string) bool {
@ -216,6 +243,10 @@ func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext, libName s
return true
}
if disableSourceApexVariant(ctx) {
return true
}
if _, isApex := android.ModuleProvider(ctx, android.ApexBundleInfoProvider); isApex {
// dexpreopt rules for system server jars can be generated in the ModuleCtx of prebuilt apexes
return false