diff --git a/bp2build/android_test_conversion_test.go b/bp2build/android_test_conversion_test.go index 52413fad5..486f154ca 100644 --- a/bp2build/android_test_conversion_test.go +++ b/bp2build/android_test_conversion_test.go @@ -43,11 +43,44 @@ func TestMinimalAndroidTest(t *testing.T) { "assets/asset.png": "", }, 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 { name: "TestApp", srcs: ["app.java"], sdk_version: "current", optimize: { + enabled: true, shrink: true, optimize: true, obfuscate: true, @@ -62,6 +95,9 @@ android_test { "sdk_version": `"current"`, "assets": `["assets/asset.png"]`, "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_dir": `"assets"`, "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`, }), }}) } diff --git a/java/app.go b/java/app.go index 603050081..10ffa7a3f 100755 --- a/java/app.go +++ b/java/app.go @@ -1683,9 +1683,22 @@ func convertWithBp2build(ctx android.Bp2buildMutatorContext, a *AndroidApp) (boo Updatable: a.appProperties.Updatable, } - if !BoolDefault(a.dexProperties.Optimize.Enabled, true) { - appAttrs.Optimize = proptools.BoolPtr(false) - } else { + // Optimization is.. + // - enabled by default for android_app, android_test_helper_app + // - 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 := "" if Bool(a.dexProperties.Optimize.Ignore_warnings) { handCraftedFlags += "-ignorewarning " @@ -1715,6 +1728,9 @@ func convertWithBp2build(ctx android.Bp2buildMutatorContext, a *AndroidApp) (boo }) 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) @@ -1803,13 +1819,12 @@ func (atha *AndroidTestHelperApp) ConvertWithBp2build(ctx android.Bp2buildMutato // an android_test_helper_app is an android_binary with testonly = 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 // // installable: true (settable prop) // use_embedded_native_libs: true (settable prop) // lint.test: true (settable prop) - // optimize EnabledByDefault: true (blueprint mutated prop) // AlwaysPackageNativeLibs: true (blueprint mutated prop) // dexpreopt isTest: true (not prop)