Loading java/aar.go +10 −12 Original line number Diff line number Diff line Loading @@ -29,8 +29,8 @@ import ( ) type AndroidLibraryDependency interface { LibraryDependency ExportPackage() android.Path ExportedProguardFlagFiles() android.Paths ExportedRRODirs() []rroDir ExportedStaticPackages() android.Paths ExportedManifests() android.Paths Loading Loading @@ -498,7 +498,6 @@ type AndroidLibrary struct { aarFile android.WritablePath exportedProguardFlagFiles android.Paths exportedStaticPackages android.Paths } Loading @@ -514,10 +513,6 @@ func (a *AndroidLibrary) OutputFiles(tag string) (android.Paths, error) { } } func (a *AndroidLibrary) ExportedProguardFlagFiles() android.Paths { return a.exportedProguardFlagFiles } func (a *AndroidLibrary) ExportedStaticPackages() android.Paths { return a.exportedStaticPackages } Loading Loading @@ -566,13 +561,16 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) a.exportedProguardFlagFiles = append(a.exportedProguardFlagFiles, android.PathsForModuleSrc(ctx, a.dexProperties.Optimize.Proguard_flags_files)...) ctx.VisitDirectDeps(func(m android.Module) { if lib, ok := m.(AndroidLibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { if ctx.OtherModuleDependencyTag(m) == staticLibTag { if lib, ok := m.(LibraryDependency); ok { a.exportedProguardFlagFiles = append(a.exportedProguardFlagFiles, lib.ExportedProguardFlagFiles()...) a.exportedStaticPackages = append(a.exportedStaticPackages, lib.ExportPackage()) a.exportedStaticPackages = append(a.exportedStaticPackages, lib.ExportedStaticPackages()...) } if alib, ok := m.(AndroidLibraryDependency); ok { a.exportedStaticPackages = append(a.exportedStaticPackages, alib.ExportPackage()) a.exportedStaticPackages = append(a.exportedStaticPackages, alib.ExportedStaticPackages()...) } } }) a.exportedProguardFlagFiles = android.FirstUniquePaths(a.exportedProguardFlagFiles) a.exportedStaticPackages = android.FirstUniquePaths(a.exportedStaticPackages) Loading java/app.go +1 −1 Original line number Diff line number Diff line Loading @@ -457,7 +457,7 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) { func (a *AndroidApp) proguardBuildActions(ctx android.ModuleContext) { var staticLibProguardFlagFiles android.Paths ctx.VisitDirectDeps(func(m android.Module) { if lib, ok := m.(AndroidLibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { if lib, ok := m.(LibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { staticLibProguardFlagFiles = append(staticLibProguardFlagFiles, lib.ExportedProguardFlagFiles()...) } }) Loading java/dex_test.go +54 −0 Original line number Diff line number Diff line Loading @@ -155,3 +155,57 @@ func TestD8(t *testing.T) { android.AssertStringDoesNotContain(t, "expected no static_lib header jar in foo javac classpath", fooD8.Args["d8Flags"], staticLibHeader.String()) } func TestProguardFlagsInheritance(t *testing.T) { result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, ` android_app { name: "app", static_libs: [ "primary_android_lib", "primary_lib", ], platform_apis: true, } java_library { name: "primary_lib", optimize: { proguard_flags_files: ["primary.flags"], }, } android_library { name: "primary_android_lib", static_libs: ["secondary_lib"], optimize: { proguard_flags_files: ["primary_android.flags"], }, } java_library { name: "secondary_lib", static_libs: ["tertiary_lib"], optimize: { proguard_flags_files: ["secondary.flags"], }, } java_library { name: "tertiary_lib", optimize: { proguard_flags_files: ["tertiary.flags"], }, } `) app := result.ModuleForTests("app", "android_common") appR8 := app.Rule("r8") android.AssertStringDoesContain(t, "expected primary_lib's proguard flags from direct dep", appR8.Args["r8Flags"], "primary.flags") android.AssertStringDoesContain(t, "expected primary_android_lib's proguard flags from direct dep", appR8.Args["r8Flags"], "primary_android.flags") android.AssertStringDoesContain(t, "expected secondary_lib's proguard flags from inherited dep", appR8.Args["r8Flags"], "secondary.flags") android.AssertStringDoesContain(t, "expected tertiary_lib's proguard flags from inherited dep", appR8.Args["r8Flags"], "tertiary.flags") } java/java.go +22 −0 Original line number Diff line number Diff line Loading @@ -294,6 +294,11 @@ type UsesLibraryDependency interface { ClassLoaderContexts() dexpreopt.ClassLoaderContextMap } // Provides transitive Proguard flag files to downstream DEX jars. type LibraryDependency interface { ExportedProguardFlagFiles() android.Paths } // TODO(jungjw): Move this to kythe.go once it's created. type xref interface { XrefJavaFiles() android.Paths Loading Loading @@ -596,9 +601,17 @@ func normalizeJavaVersion(ctx android.BaseModuleContext, javaVersion string) jav type Library struct { Module exportedProguardFlagFiles android.Paths InstallMixin func(ctx android.ModuleContext, installPath android.Path) (extraInstallDeps android.Paths) } var _ LibraryDependency = (*Library)(nil) func (j *Library) ExportedProguardFlagFiles() android.Paths { return j.exportedProguardFlagFiles } var _ android.ApexModule = (*Library)(nil) // Provides access to the list of permitted packages from apex boot jars. Loading Loading @@ -694,6 +707,15 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) { } j.installFile = ctx.InstallFile(installDir, j.Stem()+".jar", j.outputFile, extraInstallDeps...) } j.exportedProguardFlagFiles = append(j.exportedProguardFlagFiles, android.PathsForModuleSrc(ctx, j.dexProperties.Optimize.Proguard_flags_files)...) ctx.VisitDirectDeps(func(m android.Module) { if lib, ok := m.(LibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { j.exportedProguardFlagFiles = append(j.exportedProguardFlagFiles, lib.ExportedProguardFlagFiles()...) } }) j.exportedProguardFlagFiles = android.FirstUniquePaths(j.exportedProguardFlagFiles) } func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) { Loading Loading
java/aar.go +10 −12 Original line number Diff line number Diff line Loading @@ -29,8 +29,8 @@ import ( ) type AndroidLibraryDependency interface { LibraryDependency ExportPackage() android.Path ExportedProguardFlagFiles() android.Paths ExportedRRODirs() []rroDir ExportedStaticPackages() android.Paths ExportedManifests() android.Paths Loading Loading @@ -498,7 +498,6 @@ type AndroidLibrary struct { aarFile android.WritablePath exportedProguardFlagFiles android.Paths exportedStaticPackages android.Paths } Loading @@ -514,10 +513,6 @@ func (a *AndroidLibrary) OutputFiles(tag string) (android.Paths, error) { } } func (a *AndroidLibrary) ExportedProguardFlagFiles() android.Paths { return a.exportedProguardFlagFiles } func (a *AndroidLibrary) ExportedStaticPackages() android.Paths { return a.exportedStaticPackages } Loading Loading @@ -566,13 +561,16 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) a.exportedProguardFlagFiles = append(a.exportedProguardFlagFiles, android.PathsForModuleSrc(ctx, a.dexProperties.Optimize.Proguard_flags_files)...) ctx.VisitDirectDeps(func(m android.Module) { if lib, ok := m.(AndroidLibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { if ctx.OtherModuleDependencyTag(m) == staticLibTag { if lib, ok := m.(LibraryDependency); ok { a.exportedProguardFlagFiles = append(a.exportedProguardFlagFiles, lib.ExportedProguardFlagFiles()...) a.exportedStaticPackages = append(a.exportedStaticPackages, lib.ExportPackage()) a.exportedStaticPackages = append(a.exportedStaticPackages, lib.ExportedStaticPackages()...) } if alib, ok := m.(AndroidLibraryDependency); ok { a.exportedStaticPackages = append(a.exportedStaticPackages, alib.ExportPackage()) a.exportedStaticPackages = append(a.exportedStaticPackages, alib.ExportedStaticPackages()...) } } }) a.exportedProguardFlagFiles = android.FirstUniquePaths(a.exportedProguardFlagFiles) a.exportedStaticPackages = android.FirstUniquePaths(a.exportedStaticPackages) Loading
java/app.go +1 −1 Original line number Diff line number Diff line Loading @@ -457,7 +457,7 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) { func (a *AndroidApp) proguardBuildActions(ctx android.ModuleContext) { var staticLibProguardFlagFiles android.Paths ctx.VisitDirectDeps(func(m android.Module) { if lib, ok := m.(AndroidLibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { if lib, ok := m.(LibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { staticLibProguardFlagFiles = append(staticLibProguardFlagFiles, lib.ExportedProguardFlagFiles()...) } }) Loading
java/dex_test.go +54 −0 Original line number Diff line number Diff line Loading @@ -155,3 +155,57 @@ func TestD8(t *testing.T) { android.AssertStringDoesNotContain(t, "expected no static_lib header jar in foo javac classpath", fooD8.Args["d8Flags"], staticLibHeader.String()) } func TestProguardFlagsInheritance(t *testing.T) { result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, ` android_app { name: "app", static_libs: [ "primary_android_lib", "primary_lib", ], platform_apis: true, } java_library { name: "primary_lib", optimize: { proguard_flags_files: ["primary.flags"], }, } android_library { name: "primary_android_lib", static_libs: ["secondary_lib"], optimize: { proguard_flags_files: ["primary_android.flags"], }, } java_library { name: "secondary_lib", static_libs: ["tertiary_lib"], optimize: { proguard_flags_files: ["secondary.flags"], }, } java_library { name: "tertiary_lib", optimize: { proguard_flags_files: ["tertiary.flags"], }, } `) app := result.ModuleForTests("app", "android_common") appR8 := app.Rule("r8") android.AssertStringDoesContain(t, "expected primary_lib's proguard flags from direct dep", appR8.Args["r8Flags"], "primary.flags") android.AssertStringDoesContain(t, "expected primary_android_lib's proguard flags from direct dep", appR8.Args["r8Flags"], "primary_android.flags") android.AssertStringDoesContain(t, "expected secondary_lib's proguard flags from inherited dep", appR8.Args["r8Flags"], "secondary.flags") android.AssertStringDoesContain(t, "expected tertiary_lib's proguard flags from inherited dep", appR8.Args["r8Flags"], "tertiary.flags") }
java/java.go +22 −0 Original line number Diff line number Diff line Loading @@ -294,6 +294,11 @@ type UsesLibraryDependency interface { ClassLoaderContexts() dexpreopt.ClassLoaderContextMap } // Provides transitive Proguard flag files to downstream DEX jars. type LibraryDependency interface { ExportedProguardFlagFiles() android.Paths } // TODO(jungjw): Move this to kythe.go once it's created. type xref interface { XrefJavaFiles() android.Paths Loading Loading @@ -596,9 +601,17 @@ func normalizeJavaVersion(ctx android.BaseModuleContext, javaVersion string) jav type Library struct { Module exportedProguardFlagFiles android.Paths InstallMixin func(ctx android.ModuleContext, installPath android.Path) (extraInstallDeps android.Paths) } var _ LibraryDependency = (*Library)(nil) func (j *Library) ExportedProguardFlagFiles() android.Paths { return j.exportedProguardFlagFiles } var _ android.ApexModule = (*Library)(nil) // Provides access to the list of permitted packages from apex boot jars. Loading Loading @@ -694,6 +707,15 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) { } j.installFile = ctx.InstallFile(installDir, j.Stem()+".jar", j.outputFile, extraInstallDeps...) } j.exportedProguardFlagFiles = append(j.exportedProguardFlagFiles, android.PathsForModuleSrc(ctx, j.dexProperties.Optimize.Proguard_flags_files)...) ctx.VisitDirectDeps(func(m android.Module) { if lib, ok := m.(LibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { j.exportedProguardFlagFiles = append(j.exportedProguardFlagFiles, lib.ExportedProguardFlagFiles()...) } }) j.exportedProguardFlagFiles = android.FirstUniquePaths(j.exportedProguardFlagFiles) } func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) { Loading