diff --git a/dexpreopt/config.go b/dexpreopt/config.go index 9215eff3f..f38d89297 100644 --- a/dexpreopt/config.go +++ b/dexpreopt/config.go @@ -44,9 +44,10 @@ type GlobalConfig struct { ProductUpdatableBootModules []string ProductUpdatableBootLocations []string - SystemServerJars []string // jars that form the system server - SystemServerApps []string // apps that are loaded into system server - SpeedApps []string // apps that should be speed optimized + SystemServerJars []string // jars that form the system server + SystemServerApps []string // apps that are loaded into system server + UpdatableSystemServerJars []string // jars within apex that are loaded into system server + SpeedApps []string // apps that should be speed optimized PreoptFlags []string // global dex2oat flags that should be used if no module-specific dex2oat flags are specified @@ -285,6 +286,7 @@ func GlobalConfigForTests(ctx android.PathContext) GlobalConfig { ProductUpdatableBootLocations: nil, SystemServerJars: nil, SystemServerApps: nil, + UpdatableSystemServerJars: nil, SpeedApps: nil, PreoptFlags: nil, DefaultCompilerFilter: "", diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go index a6661b33d..15f11e11c 100644 --- a/java/dexpreopt_config.go +++ b/java/dexpreopt_config.go @@ -15,6 +15,7 @@ package java import ( + "fmt" "path/filepath" "strings" @@ -65,6 +66,16 @@ func setDexpreoptTestGlobalConfig(config android.Config, globalConfig dexpreopt. var dexpreoptGlobalConfigKey = android.NewOnceKey("DexpreoptGlobalConfig") var dexpreoptTestGlobalConfigKey = android.NewOnceKey("TestDexpreoptGlobalConfig") +// Expected format for apexJarValue = : +func splitApexJarPair(apexJarValue string) (string, string) { + var apexJarPair []string = strings.SplitN(apexJarValue, ":", 2) + if apexJarPair == nil || len(apexJarPair) != 2 { + panic(fmt.Errorf("malformed apexJarValue: %q, expected format: :", + apexJarValue)) + } + return apexJarPair[0], apexJarPair[1] +} + // systemServerClasspath returns the on-device locations of the modules in the system server classpath. It is computed // once the first time it is called for any ctx.Config(), and returns the same slice for all future calls with the same // ctx.Config(). @@ -77,6 +88,11 @@ func systemServerClasspath(ctx android.PathContext) []string { systemServerClasspathLocations = append(systemServerClasspathLocations, filepath.Join("/system/framework", m+".jar")) } + for _, m := range global.UpdatableSystemServerJars { + apex, jar := splitApexJarPair(m) + systemServerClasspathLocations = append(systemServerClasspathLocations, + filepath.Join("/apex", apex, "javalib", jar + ".jar")) + } return systemServerClasspathLocations }) }