From 4d90da29a887f8919a0ad931d2045814e9e5ac65 Mon Sep 17 00:00:00 2001 From: Jiakai Zhang Date: Wed, 12 Jul 2023 16:51:48 +0100 Subject: [PATCH] Add a Make variable that overrides configured jar locations. We had hardcoded logic to override "framework-minus-apex", but we need to override more jars, so this CL adds a general solution for this. Bug: 290583827 Test: m nothing Change-Id: I211ebda7aa2803886ab6e6d081d26327665e49a6 --- android/Android.bp | 1 + android/configured_jars.go | 36 ++++++++++++++++---------- android/configured_jars_test.go | 46 +++++++++++++++++++++++++++++++++ android/variable.go | 7 ++--- java/dexpreopt_bootjars.go | 2 +- 5 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 android/configured_jars_test.go diff --git a/android/Android.bp b/android/Android.bp index fc5198fee..f5bb785ff 100644 --- a/android/Android.bp +++ b/android/Android.bp @@ -107,6 +107,7 @@ bootstrap_go_package { "bazel_test.go", "config_test.go", "config_bp2build_test.go", + "configured_jars_test.go", "csuite_config_test.go", "defaults_test.go", "depset_test.go", diff --git a/android/configured_jars.go b/android/configured_jars.go index 1281bae87..c7b808f3d 100644 --- a/android/configured_jars.go +++ b/android/configured_jars.go @@ -178,7 +178,7 @@ func (l *ConfiguredJarList) CopyOfApexJarPairs() []string { func (l *ConfiguredJarList) BuildPaths(ctx PathContext, dir OutputPath) WritablePaths { paths := make(WritablePaths, l.Len()) for i, jar := range l.jars { - paths[i] = dir.Join(ctx, ModuleStem(jar)+".jar") + paths[i] = dir.Join(ctx, ModuleStem(ctx.Config(), l.Apex(i), jar)+".jar") } return paths } @@ -187,8 +187,8 @@ func (l *ConfiguredJarList) BuildPaths(ctx PathContext, dir OutputPath) Writable // prefix. func (l *ConfiguredJarList) BuildPathsByModule(ctx PathContext, dir OutputPath) map[string]WritablePath { paths := map[string]WritablePath{} - for _, jar := range l.jars { - paths[jar] = dir.Join(ctx, ModuleStem(jar)+".jar") + for i, jar := range l.jars { + paths[jar] = dir.Join(ctx, ModuleStem(ctx.Config(), l.Apex(i), jar)+".jar") } return paths } @@ -228,24 +228,32 @@ func (l *ConfiguredJarList) MarshalJSON() ([]byte, error) { return json.Marshal(list) } -// ModuleStem hardcodes the stem of framework-minus-apex to return "framework". -// -// TODO(b/139391334): hard coded until we find a good way to query the stem of a -// module before any other mutators are run. -func ModuleStem(module string) string { - if module == "framework-minus-apex" { - return "framework" +func OverrideConfiguredJarLocationFor(cfg Config, apex string, jar string) (newApex string, newJar string) { + for _, entry := range cfg.productVariables.ConfiguredJarLocationOverrides { + tuple := strings.Split(entry, ":") + if len(tuple) != 4 { + panic("malformed configured jar location override '%s', expected format: :::") + } + if apex == tuple[0] && jar == tuple[1] { + return tuple[2], tuple[3] + } } - return module + return apex, jar +} + +// ModuleStem returns the overridden jar name. +func ModuleStem(cfg Config, apex string, jar string) string { + _, newJar := OverrideConfiguredJarLocationFor(cfg, apex, jar) + return newJar } // DevicePaths computes the on-device paths for the list of (apex, jar) pairs, // based on the operating system. func (l *ConfiguredJarList) DevicePaths(cfg Config, ostype OsType) []string { paths := make([]string, l.Len()) - for i, jar := range l.jars { - apex := l.apexes[i] - name := ModuleStem(jar) + ".jar" + for i := 0; i < l.Len(); i++ { + apex, jar := OverrideConfiguredJarLocationFor(cfg, l.Apex(i), l.Jar(i)) + name := jar + ".jar" var subdir string if apex == "platform" { diff --git a/android/configured_jars_test.go b/android/configured_jars_test.go new file mode 100644 index 000000000..32c3613f7 --- /dev/null +++ b/android/configured_jars_test.go @@ -0,0 +1,46 @@ +// Copyright 2023 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package android + +import ( + "testing" +) + +func TestOverrideConfiguredJarLocationFor(t *testing.T) { + cfg := NullConfig("", "") + + cfg.productVariables = productVariables{ + ConfiguredJarLocationOverrides: []string{ + "platform:libfoo-old:com.android.foo:libfoo-new", + "com.android.bar:libbar-old:platform:libbar-new", + }, + } + + apex, jar := OverrideConfiguredJarLocationFor(cfg, "platform", "libfoo-old") + AssertStringEquals(t, "", "com.android.foo", apex) + AssertStringEquals(t, "", "libfoo-new", jar) + + apex, jar = OverrideConfiguredJarLocationFor(cfg, "platform", "libbar-old") + AssertStringEquals(t, "", "platform", apex) + AssertStringEquals(t, "", "libbar-old", jar) + + apex, jar = OverrideConfiguredJarLocationFor(cfg, "com.android.bar", "libbar-old") + AssertStringEquals(t, "", "platform", apex) + AssertStringEquals(t, "", "libbar-new", jar) + + apex, jar = OverrideConfiguredJarLocationFor(cfg, "platform", "libbar-old") + AssertStringEquals(t, "", "platform", apex) + AssertStringEquals(t, "", "libbar-old", jar) +} diff --git a/android/variable.go b/android/variable.go index 3bec854ea..4442a09eb 100644 --- a/android/variable.go +++ b/android/variable.go @@ -401,9 +401,10 @@ type productVariables struct { WithDexpreopt bool `json:",omitempty"` - ManifestPackageNameOverrides []string `json:",omitempty"` - CertificateOverrides []string `json:",omitempty"` - PackageNameOverrides []string `json:",omitempty"` + ManifestPackageNameOverrides []string `json:",omitempty"` + CertificateOverrides []string `json:",omitempty"` + PackageNameOverrides []string `json:",omitempty"` + ConfiguredJarLocationOverrides []string `json:",omitempty"` ApexGlobalMinSdkVersionOverride *string `json:",omitempty"` diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index 479dd45ea..003f2de22 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -386,7 +386,7 @@ func (image bootImageConfig) moduleName(ctx android.PathContext, idx int) string m := image.modules.Jar(idx) name := image.stem if idx != 0 || image.extends != nil { - name += "-" + android.ModuleStem(m) + name += "-" + android.ModuleStem(ctx.Config(), image.modules.Apex(idx), m) } return name }