aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--android/config.go18
-rw-r--r--android/util.go41
-rw-r--r--android/variable.go2
-rw-r--r--apex/apex.go5
-rw-r--r--java/app.go5
5 files changed, 71 insertions, 0 deletions
diff --git a/android/config.go b/android/config.go
index f046318e..b3469a9e 100644
--- a/android/config.go
+++ b/android/config.go
@@ -862,6 +862,24 @@ func (c *deviceConfig) PlatPrivateSepolicyDirs() []string {
return c.config.productVariables.BoardPlatPrivateSepolicyDirs
}
+func (c *deviceConfig) OverrideManifestPackageNameFor(name string) (manifestName string, overridden bool) {
+ overrides := c.config.productVariables.ManifestPackageNameOverrides
+ if overrides == nil || len(overrides) == 0 {
+ return "", false
+ }
+ for _, o := range overrides {
+ split := strings.Split(o, ":")
+ if len(split) != 2 {
+ // This shouldn't happen as this is first checked in make, but just in case.
+ panic(fmt.Errorf("invalid override rule %q in PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES should be <module_name>:<manifest_name>", o))
+ }
+ if matchPattern(split[0], name) {
+ return substPattern(split[0], split[1], name), true
+ }
+ }
+ return "", false
+}
+
func (c *config) SecondArchIsTranslated() bool {
deviceTargets := c.Targets[Android]
if len(deviceTargets) < 2 {
diff --git a/android/util.go b/android/util.go
index e9b97643..92ab845b 100644
--- a/android/util.go
+++ b/android/util.go
@@ -202,3 +202,44 @@ func GetNumericSdkVersion(v string) string {
}
return v
}
+
+// copied from build/kati/strutil.go
+func substPattern(pat, repl, str string) string {
+ ps := strings.SplitN(pat, "%", 2)
+ if len(ps) != 2 {
+ if str == pat {
+ return repl
+ }
+ return str
+ }
+ in := str
+ trimed := str
+ if ps[0] != "" {
+ trimed = strings.TrimPrefix(in, ps[0])
+ if trimed == in {
+ return str
+ }
+ }
+ in = trimed
+ if ps[1] != "" {
+ trimed = strings.TrimSuffix(in, ps[1])
+ if trimed == in {
+ return str
+ }
+ }
+
+ rs := strings.SplitN(repl, "%", 2)
+ if len(rs) != 2 {
+ return repl
+ }
+ return rs[0] + trimed + rs[1]
+}
+
+// copied from build/kati/strutil.go
+func matchPattern(pat, str string) bool {
+ i := strings.IndexByte(pat, '%')
+ if i < 0 {
+ return pat == str
+ }
+ return strings.HasPrefix(str, pat[:i]) && strings.HasSuffix(str, pat[i+1:])
+}
diff --git a/android/variable.go b/android/variable.go
index a1cdea16..264869a2 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -261,6 +261,8 @@ type productVariables struct {
FlattenApex *bool `json:",omitempty"`
DexpreoptGlobalConfig *string `json:",omitempty"`
+
+ ManifestPackageNameOverrides []string `json:",omitempty"`
}
func boolPtr(v bool) *bool {
diff --git a/apex/apex.go b/apex/apex.go
index c6d2e8e7..1d50cee3 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -757,6 +757,11 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext, keyFile and
optFlags = append(optFlags, "--pubkey "+pubKeyFile.String())
}
+ manifestPackageName, overridden := ctx.DeviceConfig().OverrideManifestPackageNameFor(ctx.ModuleName())
+ if overridden {
+ optFlags = append(optFlags, "--override_apk_package_name "+manifestPackageName)
+ }
+
ctx.Build(pctx, android.BuildParams{
Rule: apexRule,
Implicits: implicitInputs,
diff --git a/java/app.go b/java/app.go
index f99b2991..3b2305f6 100644
--- a/java/app.go
+++ b/java/app.go
@@ -184,6 +184,11 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
// TODO: LOCAL_PACKAGE_OVERRIDES
// $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
+ manifestPackageName, overridden := ctx.DeviceConfig().OverrideManifestPackageNameFor(ctx.ModuleName())
+ if overridden {
+ linkFlags = append(linkFlags, "--rename-manifest-package "+manifestPackageName)
+ }
+
a.aapt.buildActions(ctx, sdkContext(a), linkFlags...)
// apps manifests are handled by aapt, don't let Module see them