Merge "Make "overrides" attribute of Android_app overridable"

This commit is contained in:
Treehugger Robot
2022-05-17 06:38:19 +00:00
committed by Gerrit Code Review
4 changed files with 118 additions and 14 deletions

View File

@@ -424,8 +424,8 @@ func (app *AndroidApp) AndroidMkEntries() []android.AndroidMkEntries {
func (a *AndroidApp) getOverriddenPackages() []string { func (a *AndroidApp) getOverriddenPackages() []string {
var overridden []string var overridden []string
if len(a.appProperties.Overrides) > 0 { if len(a.overridableAppProperties.Overrides) > 0 {
overridden = append(overridden, a.appProperties.Overrides...) overridden = append(overridden, a.overridableAppProperties.Overrides...)
} }
// When APK name is overridden via PRODUCT_PACKAGE_NAME_OVERRIDES // When APK name is overridden via PRODUCT_PACKAGE_NAME_OVERRIDES
// ensure that the original name is overridden. // ensure that the original name is overridden.

View File

@@ -206,3 +206,49 @@ func TestAndroidTestHelperApp_LocalDisableTestConfig(t *testing.T) {
t.Errorf("Unexpected flag value - expected: %q, actual: %q", expected, actual) t.Errorf("Unexpected flag value - expected: %q, actual: %q", expected, actual)
} }
} }
func TestGetOverriddenPackages(t *testing.T) {
ctx, _ := testJava(
t, `
android_app {
name: "foo",
srcs: ["a.java"],
sdk_version: "current",
overrides: ["qux"]
}
override_android_app {
name: "foo_override",
base: "foo",
overrides: ["bar"]
}
`)
expectedVariants := []struct {
name string
moduleName string
variantName string
overrides []string
}{
{
name: "foo",
moduleName: "foo",
variantName: "android_common",
overrides: []string{"qux"},
},
{
name: "foo",
moduleName: "foo_override",
variantName: "android_common_foo_override",
overrides: []string{"bar", "foo"},
},
}
for _, expected := range expectedVariants {
mod := ctx.ModuleForTests(expected.name, expected.variantName).Module()
entries := android.AndroidMkEntriesForTest(t, ctx, mod)[0]
actual := entries.EntryMap["LOCAL_OVERRIDES_PACKAGES"]
android.AssertDeepEquals(t, "overrides property", expected.overrides, actual)
}
}

View File

@@ -63,13 +63,6 @@ type appProperties struct {
// list of resource labels to generate individual resource packages // list of resource labels to generate individual resource packages
Package_splits []string Package_splits []string
// Names of modules to be overridden. Listed modules can only be other binaries
// (in Make or Soong).
// This does not completely prevent installation of the overridden binaries, but if both
// binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
// from PRODUCT_PACKAGES.
Overrides []string
// list of native libraries that will be provided in or alongside the resulting jar // list of native libraries that will be provided in or alongside the resulting jar
Jni_libs []string `android:"arch_variant"` Jni_libs []string `android:"arch_variant"`
@@ -133,6 +126,13 @@ type overridableAppProperties struct {
// Whether to rename the package in resources to the override name rather than the base name. Defaults to true. // Whether to rename the package in resources to the override name rather than the base name. Defaults to true.
Rename_resources_package *bool Rename_resources_package *bool
// Names of modules to be overridden. Listed modules can only be other binaries
// (in Make or Soong).
// This does not completely prevent installation of the overridden binaries, but if both
// binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
// from PRODUCT_PACKAGES.
Overrides []string
} }
type AndroidApp struct { type AndroidApp struct {
@@ -913,7 +913,7 @@ func AndroidAppFactory() android.Module {
android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon) android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon)
android.InitDefaultableModule(module) android.InitDefaultableModule(module)
android.InitOverridableModule(module, &module.appProperties.Overrides) android.InitOverridableModule(module, &module.overridableAppProperties.Overrides)
android.InitApexModule(module) android.InitApexModule(module)
android.InitBazelModule(module) android.InitBazelModule(module)
@@ -1037,7 +1037,7 @@ func AndroidTestFactory() android.Module {
android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon) android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon)
android.InitDefaultableModule(module) android.InitDefaultableModule(module)
android.InitOverridableModule(module, &module.appProperties.Overrides) android.InitOverridableModule(module, &module.overridableAppProperties.Overrides)
return module return module
} }

View File

@@ -1966,7 +1966,7 @@ func TestOverrideAndroidApp(t *testing.T) {
// Check if the overrides field values are correctly aggregated. // Check if the overrides field values are correctly aggregated.
mod := variant.Module().(*AndroidApp) mod := variant.Module().(*AndroidApp)
android.AssertDeepEquals(t, "overrides property", expected.overrides, mod.appProperties.Overrides) android.AssertDeepEquals(t, "overrides property", expected.overrides, mod.overridableAppProperties.Overrides)
// Test Overridable property: Logging_parent // Test Overridable property: Logging_parent
logging_parent := mod.aapt.LoggingParent logging_parent := mod.aapt.LoggingParent
@@ -1984,6 +1984,64 @@ func TestOverrideAndroidApp(t *testing.T) {
} }
} }
func TestOverrideAndroidAppOverrides(t *testing.T) {
ctx, _ := testJava(
t, `
android_app {
name: "foo",
srcs: ["a.java"],
sdk_version: "current",
overrides: ["qux"]
}
android_app {
name: "bar",
srcs: ["b.java"],
sdk_version: "current",
overrides: ["foo"]
}
override_android_app {
name: "foo_override",
base: "foo",
overrides: ["bar"]
}
`)
expectedVariants := []struct {
name string
moduleName string
variantName string
overrides []string
}{
{
name: "foo",
moduleName: "foo",
variantName: "android_common",
overrides: []string{"qux"},
},
{
name: "bar",
moduleName: "bar",
variantName: "android_common",
overrides: []string{"foo"},
},
{
name: "foo",
moduleName: "foo_override",
variantName: "android_common_foo_override",
overrides: []string{"bar", "foo"},
},
}
for _, expected := range expectedVariants {
variant := ctx.ModuleForTests(expected.name, expected.variantName)
// Check if the overrides field values are correctly aggregated.
mod := variant.Module().(*AndroidApp)
android.AssertDeepEquals(t, "overrides property", expected.overrides, mod.overridableAppProperties.Overrides)
}
}
func TestOverrideAndroidAppStem(t *testing.T) { func TestOverrideAndroidAppStem(t *testing.T) {
ctx, _ := testJava(t, ` ctx, _ := testJava(t, `
android_app { android_app {
@@ -2164,9 +2222,9 @@ func TestOverrideAndroidTest(t *testing.T) {
// Check if the overrides field values are correctly aggregated. // Check if the overrides field values are correctly aggregated.
mod := variant.Module().(*AndroidTest) mod := variant.Module().(*AndroidTest)
if !reflect.DeepEqual(expected.overrides, mod.appProperties.Overrides) { if !reflect.DeepEqual(expected.overrides, mod.overridableAppProperties.Overrides) {
t.Errorf("Incorrect overrides property value, expected: %q, got: %q", t.Errorf("Incorrect overrides property value, expected: %q, got: %q",
expected.overrides, mod.appProperties.Overrides) expected.overrides, mod.overridableAppProperties.Overrides)
} }
// Check if javac classpath has the correct jar file path. This checks instrumentation_for overrides. // Check if javac classpath has the correct jar file path. This checks instrumentation_for overrides.