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
This commit is contained in:
Jiakai Zhang 2023-07-12 16:51:48 +01:00
parent cb13b5d1bd
commit 4d90da29a8
5 changed files with 74 additions and 18 deletions

View file

@ -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",

View file

@ -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: <old_apex>:<old_jar>:<new_apex>:<new_jar>")
}
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" {

View file

@ -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)
}

View file

@ -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"`

View file

@ -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
}