Merge "Enable/disable optimize for android_test and android_test_helper_app by default." into main

This commit is contained in:
Treehugger Robot
2023-09-25 17:51:14 +00:00
committed by Gerrit Code Review
2 changed files with 95 additions and 5 deletions

View File

@@ -43,11 +43,44 @@ func TestMinimalAndroidTest(t *testing.T) {
"assets/asset.png": "", "assets/asset.png": "",
}, },
Blueprint: ` Blueprint: `
android_test {
name: "TestApp",
srcs: ["app.java"],
sdk_version: "current",
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("android_test", "TestApp", AttrNameToString{
"srcs": `["app.java"]`,
"manifest": `"AndroidManifest.xml"`,
"resource_files": `["res/res.png"]`,
"sdk_version": `"current"`,
"assets": `["assets/asset.png"]`,
"assets_dir": `"assets"`,
// no need for optimize = False because it's false for
// android_test by default
}),
}})
}
func TestAndroidTest_OptimizationEnabled(t *testing.T) {
runAndroidAppTestCase(t, Bp2buildTestCase{
Description: "Android test - simple example",
ModuleTypeUnderTest: "android_test",
ModuleTypeUnderTestFactory: java.AndroidTestFactory,
Filesystem: map[string]string{
"app.java": "",
"res/res.png": "",
"AndroidManifest.xml": "",
"assets/asset.png": "",
},
Blueprint: `
android_test { android_test {
name: "TestApp", name: "TestApp",
srcs: ["app.java"], srcs: ["app.java"],
sdk_version: "current", sdk_version: "current",
optimize: { optimize: {
enabled: true,
shrink: true, shrink: true,
optimize: true, optimize: true,
obfuscate: true, obfuscate: true,
@@ -62,6 +95,9 @@ android_test {
"sdk_version": `"current"`, "sdk_version": `"current"`,
"assets": `["assets/asset.png"]`, "assets": `["assets/asset.png"]`,
"assets_dir": `"assets"`, "assets_dir": `"assets"`,
// optimize = True because it's false for android_test by
// default
"optimize": `True`,
}), }),
}}) }})
} }
@@ -98,6 +134,45 @@ android_test_helper_app {
"assets": `["assets/asset.png"]`, "assets": `["assets/asset.png"]`,
"assets_dir": `"assets"`, "assets_dir": `"assets"`,
"testonly": `True`, "testonly": `True`,
// no need for optimize = True because it's true for
// android_test_helper_app by default
}),
}})
}
func TestAndroidTestHelperApp_OptimizationDisabled(t *testing.T) {
runAndroidAppTestCase(t, Bp2buildTestCase{
Description: "Android test helper app - simple example",
ModuleTypeUnderTest: "android_test_helper_app",
ModuleTypeUnderTestFactory: java.AndroidTestHelperAppFactory,
Filesystem: map[string]string{
"app.java": "",
"res/res.png": "",
"AndroidManifest.xml": "",
"assets/asset.png": "",
},
Blueprint: `
android_test_helper_app {
name: "TestApp",
srcs: ["app.java"],
sdk_version: "current",
optimize: {
enabled: false,
},
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("android_binary", "TestApp", AttrNameToString{
"srcs": `["app.java"]`,
"manifest": `"AndroidManifest.xml"`,
"resource_files": `["res/res.png"]`,
"sdk_version": `"current"`,
"assets": `["assets/asset.png"]`,
"assets_dir": `"assets"`,
"testonly": `True`,
// optimize = False because it's true for
// android_test_helper_app by default
"optimize": `False`,
}), }),
}}) }})
} }

View File

@@ -1683,9 +1683,22 @@ func convertWithBp2build(ctx android.Bp2buildMutatorContext, a *AndroidApp) (boo
Updatable: a.appProperties.Updatable, Updatable: a.appProperties.Updatable,
} }
if !BoolDefault(a.dexProperties.Optimize.Enabled, true) { // Optimization is..
appAttrs.Optimize = proptools.BoolPtr(false) // - enabled by default for android_app, android_test_helper_app
} else { // - disabled by default for android_test
//
// TODO(b/192032291): Disable android_test_helper_app optimization by
// default after auditing downstream usage.
if a.dexProperties.Optimize.Enabled == nil {
// Property was not explicitly defined.
a.dexProperties.Optimize.Enabled = &a.dexProperties.Optimize.EnabledByDefault
}
if Bool(a.dexProperties.Optimize.Enabled) {
if !a.dexProperties.Optimize.EnabledByDefault {
// explicitly enable optimize for module types that disable it by default
appAttrs.Optimize = proptools.BoolPtr(true)
}
handCraftedFlags := "" handCraftedFlags := ""
if Bool(a.dexProperties.Optimize.Ignore_warnings) { if Bool(a.dexProperties.Optimize.Ignore_warnings) {
handCraftedFlags += "-ignorewarning " handCraftedFlags += "-ignorewarning "
@@ -1715,6 +1728,9 @@ func convertWithBp2build(ctx android.Bp2buildMutatorContext, a *AndroidApp) (boo
}) })
appAttrs.Proguard_specs.Add(bazel.MakeLabelAttribute(":" + generatedFlagFileRuleName)) appAttrs.Proguard_specs.Add(bazel.MakeLabelAttribute(":" + generatedFlagFileRuleName))
} }
} else if a.dexProperties.Optimize.EnabledByDefault {
// explicitly disable optimize for module types that enable it by default
appAttrs.Optimize = proptools.BoolPtr(false)
} }
commonAttrs, bp2BuildInfo, supported := a.convertLibraryAttrsBp2Build(ctx) commonAttrs, bp2BuildInfo, supported := a.convertLibraryAttrsBp2Build(ctx)
@@ -1803,13 +1819,12 @@ func (atha *AndroidTestHelperApp) ConvertWithBp2build(ctx android.Bp2buildMutato
// an android_test_helper_app is an android_binary with testonly = True // an android_test_helper_app is an android_binary with testonly = True
commonAttrs.Testonly = proptools.BoolPtr(true) commonAttrs.Testonly = proptools.BoolPtr(true)
// additionally, it sets default values differently to android_app, // android_test_helper_app sets default values differently to android_app,
// https://cs.android.com/android/platform/superproject/main/+/main:build/soong/java/app.go;l=1273-1279;drc=e12c083198403ec694af6c625aed11327eb2bf7f // https://cs.android.com/android/platform/superproject/main/+/main:build/soong/java/app.go;l=1273-1279;drc=e12c083198403ec694af6c625aed11327eb2bf7f
// //
// installable: true (settable prop) // installable: true (settable prop)
// use_embedded_native_libs: true (settable prop) // use_embedded_native_libs: true (settable prop)
// lint.test: true (settable prop) // lint.test: true (settable prop)
// optimize EnabledByDefault: true (blueprint mutated prop)
// AlwaysPackageNativeLibs: true (blueprint mutated prop) // AlwaysPackageNativeLibs: true (blueprint mutated prop)
// dexpreopt isTest: true (not prop) // dexpreopt isTest: true (not prop)