diff options
author | Roshan Pius <rpius@google.com> | 2020-04-27 09:42:27 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2020-04-28 13:08:55 -0700 |
commit | b830796ca4fe07dc8aa9b41090d795b6c1c970ca (patch) | |
tree | 661057fb9b7fe90650fb1aea69f0a05ba2b74f51 /java/app.go | |
parent | d5c7ad63ecb7e4a088dd4bf80471723f435b4304 (diff) | |
download | build_soong-b830796ca4fe07dc8aa9b41090d795b6c1c970ca.tar.gz build_soong-b830796ca4fe07dc8aa9b41090d795b6c1c970ca.tar.bz2 build_soong-b830796ca4fe07dc8aa9b41090d795b6c1c970ca.zip |
soong: Add support for override_runtime_resource_overlay
Bug: 154960712
Test: go test ./... -test.v -run TestOverrideAndroidApp
Change-Id: I8ca9d173b6ab7f9306c83c2b434107111aa2ca88
Diffstat (limited to 'java/app.go')
-rwxr-xr-x | java/app.go | 59 |
1 files changed, 54 insertions, 5 deletions
diff --git a/java/app.go b/java/app.go index 0ec2502b..4468dc54 100755 --- a/java/app.go +++ b/java/app.go @@ -45,6 +45,7 @@ func RegisterAppBuildComponents(ctx android.RegistrationContext) { ctx.RegisterModuleType("android_app_certificate", AndroidAppCertificateFactory) ctx.RegisterModuleType("override_android_app", OverrideAndroidAppModuleFactory) ctx.RegisterModuleType("override_android_test", OverrideAndroidTestModuleFactory) + ctx.RegisterModuleType("override_runtime_resource_overlay", OverrideRuntimeResourceOverlayModuleFactory) ctx.RegisterModuleType("android_app_import", AndroidAppImportFactory) ctx.RegisterModuleType("android_test_import", AndroidTestImportFactory) ctx.RegisterModuleType("runtime_resource_overlay", RuntimeResourceOverlayFactory) @@ -129,6 +130,15 @@ type overridableAppProperties struct { Logging_parent *string } +// runtime_resource_overlay properties that can be overridden by override_runtime_resource_overlay +type OverridableRuntimeResourceOverlayProperties struct { + // the package name of this app. The package name in the manifest file is used if one was not given. + Package_name *string + + // the target package name of this overlay app. The target package name in the manifest file is used if one was not given. + Target_package_name *string +} + type AndroidApp struct { Library aapt @@ -959,6 +969,27 @@ func OverrideAndroidTestModuleFactory() android.Module { return m } +type OverrideRuntimeResourceOverlay struct { + android.ModuleBase + android.OverrideModuleBase +} + +func (i *OverrideRuntimeResourceOverlay) GenerateAndroidBuildActions(ctx android.ModuleContext) { + // All the overrides happen in the base module. + // TODO(jungjw): Check the base module type. +} + +// override_runtime_resource_overlay is used to create a module based on another +// runtime_resource_overlay module by overriding some of its properties. +func OverrideRuntimeResourceOverlayModuleFactory() android.Module { + m := &OverrideRuntimeResourceOverlay{} + m.AddProperties(&OverridableRuntimeResourceOverlayProperties{}) + + android.InitAndroidMultiTargetsArchModule(m, android.DeviceSupported, android.MultilibCommon) + android.InitOverrideModule(m) + return m +} + type AndroidAppImport struct { android.ModuleBase android.DefaultableModuleBase @@ -1342,9 +1373,11 @@ func AndroidTestImportFactory() android.Module { type RuntimeResourceOverlay struct { android.ModuleBase android.DefaultableModuleBase + android.OverridableModuleBase aapt - properties RuntimeResourceOverlayProperties + properties RuntimeResourceOverlayProperties + overridableProperties OverridableRuntimeResourceOverlayProperties certificate Certificate @@ -1402,7 +1435,21 @@ func (r *RuntimeResourceOverlay) GenerateAndroidBuildActions(ctx android.ModuleC // Compile and link resources r.aapt.hasNoCode = true // Do not remove resources without default values nor dedupe resource configurations with the same value - r.aapt.buildActions(ctx, r, "--no-resource-deduping", "--no-resource-removal") + aaptLinkFlags := []string{"--no-resource-deduping", "--no-resource-removal"} + // Allow the override of "package name" and "overlay target package name" + manifestPackageName, overridden := ctx.DeviceConfig().OverrideManifestPackageNameFor(ctx.ModuleName()) + if overridden || r.overridableProperties.Package_name != nil { + // The product override variable has a priority over the package_name property. + if !overridden { + manifestPackageName = *r.overridableProperties.Package_name + } + aaptLinkFlags = append(aaptLinkFlags, "--rename-manifest-package "+manifestPackageName) + } + if r.overridableProperties.Target_package_name != nil { + aaptLinkFlags = append(aaptLinkFlags, + "--rename-overlay-target-package "+*r.overridableProperties.Target_package_name) + } + r.aapt.buildActions(ctx, r, aaptLinkFlags...) // Sign the built package _, certificates := collectAppDeps(ctx, false) @@ -1441,10 +1488,12 @@ func RuntimeResourceOverlayFactory() android.Module { module := &RuntimeResourceOverlay{} module.AddProperties( &module.properties, - &module.aaptProperties) - - InitJavaModule(module, android.DeviceSupported) + &module.aaptProperties, + &module.overridableProperties) + android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon) + android.InitDefaultableModule(module) + android.InitOverridableModule(module, &module.properties.Overrides) return module } |