export_proguard_spec for libs deps

Add a property to export proguard flags files for libs dependencies.
Currently only proguard flags files from static deps are propagated up
to reverse dependencies, but it is necessary sometimes to have flags
from libs dependencies also be propagated.

Bug: 289087274
Test: go test ./java
Change-Id: Ic0aa22b086792bf322041aa5780db6c4f4eb2770
This commit is contained in:
Sam Delmerico
2023-08-02 18:00:35 -04:00
parent 34a1c57b05
commit 95d709402a
6 changed files with 327 additions and 44 deletions

View File

@@ -1670,6 +1670,49 @@ func (j *Module) useCompose() bool {
return android.InList("androidx.compose.runtime_runtime", j.properties.Static_libs)
}
func (j *Module) collectProguardSpecInfo(ctx android.ModuleContext) ProguardSpecInfo {
transitiveUnconditionalExportedFlags := []*android.DepSet[android.Path]{}
transitiveProguardFlags := []*android.DepSet[android.Path]{}
ctx.VisitDirectDeps(func(m android.Module) {
depProguardInfo := ctx.OtherModuleProvider(m, ProguardSpecInfoProvider).(ProguardSpecInfo)
depTag := ctx.OtherModuleDependencyTag(m)
if depProguardInfo.UnconditionallyExportedProguardFlags != nil {
transitiveUnconditionalExportedFlags = append(transitiveUnconditionalExportedFlags, depProguardInfo.UnconditionallyExportedProguardFlags)
transitiveProguardFlags = append(transitiveProguardFlags, depProguardInfo.UnconditionallyExportedProguardFlags)
}
if depTag == staticLibTag && depProguardInfo.ProguardFlagsFiles != nil {
transitiveProguardFlags = append(transitiveProguardFlags, depProguardInfo.ProguardFlagsFiles)
}
})
directUnconditionalExportedFlags := android.Paths{}
proguardFlagsForThisModule := android.PathsForModuleSrc(ctx, j.dexProperties.Optimize.Proguard_flags_files)
exportUnconditionally := proptools.Bool(j.dexProperties.Optimize.Export_proguard_flags_files)
if exportUnconditionally {
// if we explicitly export, then our unconditional exports are the same as our transitive flags
transitiveUnconditionalExportedFlags = transitiveProguardFlags
directUnconditionalExportedFlags = proguardFlagsForThisModule
}
return ProguardSpecInfo{
Export_proguard_flags_files: exportUnconditionally,
ProguardFlagsFiles: android.NewDepSet[android.Path](
android.POSTORDER,
proguardFlagsForThisModule,
transitiveProguardFlags,
),
UnconditionallyExportedProguardFlags: android.NewDepSet[android.Path](
android.POSTORDER,
directUnconditionalExportedFlags,
transitiveUnconditionalExportedFlags,
),
}
}
// Returns a copy of the supplied flags, but with all the errorprone-related
// fields copied to the regular build's fields.
func enableErrorproneFlags(flags javaBuilderFlags) javaBuilderFlags {