transitive r8 flags for installable {android,java}_libraries
Only android_apps were actually applying transitive proguard flags files to their r8 invocation. This CL ensures that this also occurs for installable android_libraries and java_libraries. Bug: 302342049 Test: go test ./java Change-Id: Ie94d688d04367ee3d39e7e760fb3003df5829951
This commit is contained in:
parent
82f0f7eca1
commit
c8e040c70f
4 changed files with 96 additions and 56 deletions
11
java/aar.go
11
java/aar.go
|
@ -805,8 +805,11 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
|
|||
a.linter.manifest = a.aapt.manifestPath
|
||||
a.linter.resources = a.aapt.resourceFiles
|
||||
|
||||
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles,
|
||||
a.proguardOptionsFile)
|
||||
proguardSpecInfo := a.collectProguardSpecInfo(ctx)
|
||||
ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo)
|
||||
a.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList()
|
||||
a.extraProguardFlagFiles = append(a.extraProguardFlagFiles, a.exportedProguardFlagFiles...)
|
||||
a.extraProguardFlagFiles = append(a.extraProguardFlagFiles, a.proguardOptionsFile)
|
||||
|
||||
var extraSrcJars android.Paths
|
||||
var extraCombinedJars android.Paths
|
||||
|
@ -832,10 +835,6 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
|
|||
ctx.CheckbuildFile(a.aarFile)
|
||||
}
|
||||
|
||||
proguardSpecInfo := a.collectProguardSpecInfo(ctx)
|
||||
ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo)
|
||||
a.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList()
|
||||
|
||||
prebuiltJniPackages := android.Paths{}
|
||||
ctx.VisitDirectDeps(func(module android.Module) {
|
||||
if info, ok := ctx.OtherModuleProvider(module, JniPackageProvider).(JniPackageInfo); ok {
|
||||
|
|
|
@ -300,6 +300,8 @@ func (d *dexer) r8Flags(ctx android.ModuleContext, flags javaBuilderFlags) (r8Fl
|
|||
|
||||
flagFiles = append(flagFiles, android.PathsForModuleSrc(ctx, opt.Proguard_flags_files)...)
|
||||
|
||||
flagFiles = android.FirstUniquePaths(flagFiles)
|
||||
|
||||
r8Flags = append(r8Flags, android.JoinWithPrefix(flagFiles.Strings(), "-include "))
|
||||
r8Deps = append(r8Deps, flagFiles...)
|
||||
|
||||
|
|
130
java/dex_test.go
130
java/dex_test.go
|
@ -385,13 +385,53 @@ func TestProguardFlagsInheritanceStatic(t *testing.T) {
|
|||
func TestProguardFlagsInheritance(t *testing.T) {
|
||||
directDepFlagsFileName := "direct_dep.flags"
|
||||
transitiveDepFlagsFileName := "transitive_dep.flags"
|
||||
bp := `
|
||||
android_app {
|
||||
name: "app",
|
||||
static_libs: ["androidlib"], // this must be static_libs to initate dexing
|
||||
platform_apis: true,
|
||||
}
|
||||
|
||||
topLevelModules := []struct {
|
||||
name string
|
||||
definition string
|
||||
}{
|
||||
{
|
||||
name: "android_app",
|
||||
definition: `
|
||||
android_app {
|
||||
name: "app",
|
||||
static_libs: ["androidlib"], // this must be static_libs to initate dexing
|
||||
platform_apis: true,
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "android_library",
|
||||
definition: `
|
||||
android_library {
|
||||
name: "app",
|
||||
static_libs: ["androidlib"], // this must be static_libs to initate dexing
|
||||
installable: true,
|
||||
optimize: {
|
||||
enabled: true,
|
||||
shrink: true,
|
||||
},
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "java_library",
|
||||
definition: `
|
||||
java_library {
|
||||
name: "app",
|
||||
static_libs: ["androidlib"], // this must be static_libs to initate dexing
|
||||
srcs: ["Foo.java"],
|
||||
installable: true,
|
||||
optimize: {
|
||||
enabled: true,
|
||||
shrink: true,
|
||||
},
|
||||
}
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
||||
bp := `
|
||||
android_library {
|
||||
name: "androidlib",
|
||||
static_libs: ["app_dep"],
|
||||
|
@ -558,43 +598,46 @@ func TestProguardFlagsInheritance(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
for _, tc := range testcases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
result := android.GroupFixturePreparers(
|
||||
PrepareForTestWithJavaDefaultModules,
|
||||
android.FixtureMergeMockFs(android.MockFS{
|
||||
directDepFlagsFileName: nil,
|
||||
transitiveDepFlagsFileName: nil,
|
||||
}),
|
||||
).RunTestWithBp(t,
|
||||
fmt.Sprintf(
|
||||
bp,
|
||||
tc.depType,
|
||||
tc.transitiveDepType,
|
||||
tc.depExportsFlagsFiles,
|
||||
tc.transitiveDepExportsFlagsFiles,
|
||||
),
|
||||
)
|
||||
appR8 := result.ModuleForTests("app", "android_common").Rule("r8")
|
||||
for _, topLevelModuleDef := range topLevelModules {
|
||||
for _, tc := range testcases {
|
||||
t.Run(topLevelModuleDef.name+"-"+tc.name, func(t *testing.T) {
|
||||
result := android.GroupFixturePreparers(
|
||||
PrepareForTestWithJavaDefaultModules,
|
||||
android.FixtureMergeMockFs(android.MockFS{
|
||||
directDepFlagsFileName: nil,
|
||||
transitiveDepFlagsFileName: nil,
|
||||
}),
|
||||
).RunTestWithBp(t,
|
||||
topLevelModuleDef.definition+
|
||||
fmt.Sprintf(
|
||||
bp,
|
||||
tc.depType,
|
||||
tc.transitiveDepType,
|
||||
tc.depExportsFlagsFiles,
|
||||
tc.transitiveDepExportsFlagsFiles,
|
||||
),
|
||||
)
|
||||
appR8 := result.ModuleForTests("app", "android_common").Rule("r8")
|
||||
|
||||
shouldHaveDepFlags := android.InList(directDepFlagsFileName, tc.expectedFlagsFiles)
|
||||
if shouldHaveDepFlags {
|
||||
android.AssertStringDoesContain(t, "expected deps's proguard flags",
|
||||
appR8.Args["r8Flags"], directDepFlagsFileName)
|
||||
} else {
|
||||
android.AssertStringDoesNotContain(t, "app did not expect deps's proguard flags",
|
||||
appR8.Args["r8Flags"], directDepFlagsFileName)
|
||||
}
|
||||
shouldHaveDepFlags := android.InList(directDepFlagsFileName, tc.expectedFlagsFiles)
|
||||
if shouldHaveDepFlags {
|
||||
android.AssertStringDoesContain(t, "expected deps's proguard flags",
|
||||
appR8.Args["r8Flags"], directDepFlagsFileName)
|
||||
} else {
|
||||
android.AssertStringDoesNotContain(t, "app did not expect deps's proguard flags",
|
||||
appR8.Args["r8Flags"], directDepFlagsFileName)
|
||||
}
|
||||
|
||||
shouldHaveTransitiveDepFlags := android.InList(transitiveDepFlagsFileName, tc.expectedFlagsFiles)
|
||||
if shouldHaveTransitiveDepFlags {
|
||||
android.AssertStringDoesContain(t, "expected transitive deps's proguard flags",
|
||||
appR8.Args["r8Flags"], transitiveDepFlagsFileName)
|
||||
} else {
|
||||
android.AssertStringDoesNotContain(t, "app did not expect transitive deps's proguard flags",
|
||||
appR8.Args["r8Flags"], transitiveDepFlagsFileName)
|
||||
}
|
||||
})
|
||||
shouldHaveTransitiveDepFlags := android.InList(transitiveDepFlagsFileName, tc.expectedFlagsFiles)
|
||||
if shouldHaveTransitiveDepFlags {
|
||||
android.AssertStringDoesContain(t, "expected transitive deps's proguard flags",
|
||||
appR8.Args["r8Flags"], transitiveDepFlagsFileName)
|
||||
} else {
|
||||
android.AssertStringDoesNotContain(t, "app did not expect transitive deps's proguard flags",
|
||||
appR8.Args["r8Flags"], transitiveDepFlagsFileName)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -606,11 +649,6 @@ func TestProguardFlagsInheritanceAppImport(t *testing.T) {
|
|||
platform_apis: true,
|
||||
}
|
||||
|
||||
android_library {
|
||||
name: "androidlib",
|
||||
static_libs: ["aarimport"],
|
||||
}
|
||||
|
||||
android_library_import {
|
||||
name: "aarimport",
|
||||
aars: ["import.aar"],
|
||||
|
|
|
@ -697,6 +697,11 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
|
||||
j.stem = proptools.StringDefault(j.overridableDeviceProperties.Stem, ctx.ModuleName())
|
||||
|
||||
proguardSpecInfo := j.collectProguardSpecInfo(ctx)
|
||||
ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo)
|
||||
j.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList()
|
||||
j.extraProguardFlagFiles = append(j.extraProguardFlagFiles, j.exportedProguardFlagFiles...)
|
||||
|
||||
apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo)
|
||||
if !apexInfo.IsForPlatform() {
|
||||
j.hideApexVariantFromMake = true
|
||||
|
@ -741,10 +746,6 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
}
|
||||
j.installFile = ctx.InstallFile(installDir, j.Stem()+".jar", j.outputFile, extraInstallDeps...)
|
||||
}
|
||||
|
||||
proguardSpecInfo := j.collectProguardSpecInfo(ctx)
|
||||
ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo)
|
||||
j.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList()
|
||||
}
|
||||
|
||||
func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||
|
|
Loading…
Reference in a new issue