Merge changes I9ad66ea2,I4c95b77b am: 57271b9f45

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1934955

Change-Id: Ia5c342a6bbf931be55dbe63d2609341f9d1a8da2
This commit is contained in:
Treehugger Robot 2022-01-11 06:57:18 +00:00 committed by Automerger Merge Worker
commit a7c0107744
5 changed files with 115 additions and 9 deletions

View file

@ -433,8 +433,10 @@ func (a *AndroidApp) getOverriddenPackages() []string {
if len(a.appProperties.Overrides) > 0 { if len(a.appProperties.Overrides) > 0 {
overridden = append(overridden, a.appProperties.Overrides...) overridden = append(overridden, a.appProperties.Overrides...)
} }
if a.Name() != a.installApkName { // When APK name is overridden via PRODUCT_PACKAGE_NAME_OVERRIDES
overridden = append(overridden, a.Name()) // ensure that the original name is overridden.
if a.Stem() != a.installApkName {
overridden = append(overridden, a.Stem())
} }
return overridden return overridden
} }

View file

@ -621,7 +621,7 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
a.aapt.useEmbeddedDex = Bool(a.appProperties.Use_embedded_dex) a.aapt.useEmbeddedDex = Bool(a.appProperties.Use_embedded_dex)
// Check if the install APK name needs to be overridden. // Check if the install APK name needs to be overridden.
a.installApkName = ctx.DeviceConfig().OverridePackageNameFor(a.Name()) a.installApkName = ctx.DeviceConfig().OverridePackageNameFor(a.Stem())
if ctx.ModuleName() == "framework-res" { if ctx.ModuleName() == "framework-res" {
// framework-res.apk is installed as system/framework/framework-res.apk // framework-res.apk is installed as system/framework/framework-res.apk
@ -1006,6 +1006,7 @@ func (a *AndroidTest) FixTestConfig(ctx android.ModuleContext, testConfig androi
command := rule.Command().BuiltTool("test_config_fixer").Input(testConfig).Output(fixedConfig) command := rule.Command().BuiltTool("test_config_fixer").Input(testConfig).Output(fixedConfig)
fixNeeded := false fixNeeded := false
// Auto-generated test config uses `ModuleName` as the APK name. So fix it if it is not the case.
if ctx.ModuleName() != a.installApkName { if ctx.ModuleName() != a.installApkName {
fixNeeded = true fixNeeded = true
command.FlagWithArg("--test-file-name ", a.installApkName+".apk") command.FlagWithArg("--test-file-name ", a.installApkName+".apk")
@ -1162,7 +1163,10 @@ func (i *OverrideAndroidApp) GenerateAndroidBuildActions(_ android.ModuleContext
// some of its properties. // some of its properties.
func OverrideAndroidAppModuleFactory() android.Module { func OverrideAndroidAppModuleFactory() android.Module {
m := &OverrideAndroidApp{} m := &OverrideAndroidApp{}
m.AddProperties(&overridableAppProperties{}) m.AddProperties(
&OverridableDeviceProperties{},
&overridableAppProperties{},
)
android.InitAndroidMultiTargetsArchModule(m, android.DeviceSupported, android.MultilibCommon) android.InitAndroidMultiTargetsArchModule(m, android.DeviceSupported, android.MultilibCommon)
android.InitOverrideModule(m) android.InitOverrideModule(m)

View file

@ -1707,7 +1707,7 @@ func TestPackageNameOverride(t *testing.T) {
}, },
}, },
{ {
name: "overridden", name: "overridden via PRODUCT_PACKAGE_NAME_OVERRIDES",
bp: ` bp: `
android_app { android_app {
name: "foo", name: "foo",
@ -1722,6 +1722,22 @@ func TestPackageNameOverride(t *testing.T) {
"out/soong/target/product/test_device/system/app/bar/bar.apk", "out/soong/target/product/test_device/system/app/bar/bar.apk",
}, },
}, },
{
name: "overridden via stem",
bp: `
android_app {
name: "foo",
srcs: ["a.java"],
sdk_version: "current",
stem: "bar",
}
`,
packageNameOverride: "",
expected: []string{
"out/soong/.intermediates/foo/android_common/bar.apk",
"out/soong/target/product/test_device/system/app/bar/bar.apk",
},
},
} }
for _, test := range testCases { for _, test := range testCases {
@ -1965,6 +1981,80 @@ func TestOverrideAndroidApp(t *testing.T) {
} }
} }
func TestOverrideAndroidAppStem(t *testing.T) {
ctx, _ := testJava(t, `
android_app {
name: "foo",
srcs: ["a.java"],
sdk_version: "current",
}
override_android_app {
name: "bar",
base: "foo",
}
override_android_app {
name: "baz",
base: "foo",
stem: "baz_stem",
}
android_app {
name: "foo2",
srcs: ["a.java"],
sdk_version: "current",
stem: "foo2_stem",
}
override_android_app {
name: "bar2",
base: "foo2",
}
override_android_app {
name: "baz2",
base: "foo2",
stem: "baz2_stem",
}
`)
for _, expected := range []struct {
moduleName string
variantName string
apkPath string
}{
{
moduleName: "foo",
variantName: "android_common",
apkPath: "out/soong/target/product/test_device/system/app/foo/foo.apk",
},
{
moduleName: "foo",
variantName: "android_common_bar",
apkPath: "out/soong/target/product/test_device/system/app/bar/bar.apk",
},
{
moduleName: "foo",
variantName: "android_common_baz",
apkPath: "out/soong/target/product/test_device/system/app/baz_stem/baz_stem.apk",
},
{
moduleName: "foo2",
variantName: "android_common",
apkPath: "out/soong/target/product/test_device/system/app/foo2_stem/foo2_stem.apk",
},
{
moduleName: "foo2",
variantName: "android_common_bar2",
// Note that this may cause the duplicate output error.
apkPath: "out/soong/target/product/test_device/system/app/foo2_stem/foo2_stem.apk",
},
{
moduleName: "foo2",
variantName: "android_common_baz2",
apkPath: "out/soong/target/product/test_device/system/app/baz2_stem/baz2_stem.apk",
},
} {
variant := ctx.ModuleForTests(expected.moduleName, expected.variantName)
variant.Output(expected.apkPath)
}
}
func TestOverrideAndroidAppDependency(t *testing.T) { func TestOverrideAndroidAppDependency(t *testing.T) {
ctx, _ := testJava(t, ` ctx, _ := testJava(t, `
android_app { android_app {

View file

@ -253,9 +253,6 @@ type DeviceProperties struct {
// otherwise provides defaults libraries to add to the bootclasspath. // otherwise provides defaults libraries to add to the bootclasspath.
System_modules *string System_modules *string
// set the name of the output
Stem *string
IsSDKLibrary bool `blueprint:"mutated"` IsSDKLibrary bool `blueprint:"mutated"`
// If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. // If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file.
@ -267,6 +264,15 @@ type DeviceProperties struct {
SyspropPublicStub string `blueprint:"mutated"` SyspropPublicStub string `blueprint:"mutated"`
} }
// Device properties that can be overridden by overriding module (e.g. override_android_app)
type OverridableDeviceProperties struct {
// set the name of the output. If not set, `name` is used.
// To override a module with this property set, overriding module might need to set this as well.
// Otherwise, both the overridden and the overriding modules will have the same output name, which
// can cause the duplicate output error.
Stem *string
}
// Functionality common to Module and Import // Functionality common to Module and Import
// //
// It is embedded in Module so its functionality can be used by methods in Module // It is embedded in Module so its functionality can be used by methods in Module
@ -389,6 +395,8 @@ type Module struct {
protoProperties android.ProtoProperties protoProperties android.ProtoProperties
deviceProperties DeviceProperties deviceProperties DeviceProperties
overridableDeviceProperties OverridableDeviceProperties
// jar file containing header classes including static library dependencies, suitable for // jar file containing header classes including static library dependencies, suitable for
// inserting into the bootclasspath/classpath of another compile // inserting into the bootclasspath/classpath of another compile
headerJarFile android.Path headerJarFile android.Path
@ -544,6 +552,7 @@ func (j *Module) addHostAndDeviceProperties() {
j.addHostProperties() j.addHostProperties()
j.AddProperties( j.AddProperties(
&j.deviceProperties, &j.deviceProperties,
&j.overridableDeviceProperties,
&j.dexer.dexProperties, &j.dexer.dexProperties,
&j.dexpreoptProperties, &j.dexpreoptProperties,
&j.linter.properties, &j.linter.properties,
@ -1671,7 +1680,7 @@ func (j *Module) ShouldSupportSdkVersion(ctx android.BaseModuleContext, sdkVersi
} }
func (j *Module) Stem() string { func (j *Module) Stem() string {
return proptools.StringDefault(j.deviceProperties.Stem, j.Name()) return proptools.StringDefault(j.overridableDeviceProperties.Stem, j.Name())
} }
func (j *Module) JacocoReportClassesFile() android.Path { func (j *Module) JacocoReportClassesFile() android.Path {

View file

@ -1867,6 +1867,7 @@ func DefaultsFactory() android.Module {
module.AddProperties( module.AddProperties(
&CommonProperties{}, &CommonProperties{},
&DeviceProperties{}, &DeviceProperties{},
&OverridableDeviceProperties{},
&DexProperties{}, &DexProperties{},
&DexpreoptProperties{}, &DexpreoptProperties{},
&android.ProtoProperties{}, &android.ProtoProperties{},