Add a build-time check for dexpreopting system server jars.
This change adds a Soong module that stores the paths to the compilation artifacts of system server jars in a variable, which will then be consumed by Make to check if the artifacts are installed. When the check fails, it means that dexpreopting is not working for some system server jars and needs to be fixed. Bug: 201371822 Test: m nothing Test: manual - 1. Add "service-permission" to DEXPREOPT_DISABLED_MODULES (https://cs.android.com/android/platform/superproject/+/master:build/make/core/product_config.mk?q=DEXPREOPT_DISABLED_MODULES) 2. m nothing 3. See the error: Missing compilation artifacts. Dexpreopting is not working for some system server jars Offending entries: system/framework/oat/x86_64/apex@com.android.permission@javalib@service-permission.jar@classes.odex system/framework/oat/x86_64/apex@com.android.permission@javalib@service-permission.jar@classes.vdex Change-Id: I4816f19668f1dae180a34adafdbfa448c97aa0db
This commit is contained in:
@@ -204,6 +204,17 @@ func GetSystemServerDexLocation(global *GlobalConfig, lib string) string {
|
||||
return fmt.Sprintf("/system/framework/%s.jar", lib)
|
||||
}
|
||||
|
||||
// Returns the location to the odex file for the dex file at `path`.
|
||||
func ToOdexPath(path string, arch android.ArchType) string {
|
||||
if strings.HasPrefix(path, "/apex/") {
|
||||
return filepath.Join("/system/framework/oat", arch.String(),
|
||||
strings.ReplaceAll(path[1:], "/", "@")+"@classes.odex")
|
||||
}
|
||||
|
||||
return filepath.Join(filepath.Dir(path), "oat", arch.String(),
|
||||
pathtools.ReplaceExtension(filepath.Base(path), "odex"))
|
||||
}
|
||||
|
||||
func dexpreoptCommand(ctx android.PathContext, globalSoong *GlobalSoongConfig, global *GlobalConfig,
|
||||
module *ModuleConfig, rule *android.RuleBuilder, archIdx int, profile android.WritablePath,
|
||||
appImage bool, generateDM bool) {
|
||||
@@ -218,23 +229,8 @@ func dexpreoptCommand(ctx android.PathContext, globalSoong *GlobalSoongConfig, g
|
||||
base = "package.apk"
|
||||
}
|
||||
|
||||
toOdexPath := func(path string) string {
|
||||
if global.ApexSystemServerJars.ContainsJar(module.Name) {
|
||||
return filepath.Join(
|
||||
"/system/framework/oat",
|
||||
arch.String(),
|
||||
strings.ReplaceAll(path[1:], "/", "@")+"@classes.odex")
|
||||
}
|
||||
|
||||
return filepath.Join(
|
||||
filepath.Dir(path),
|
||||
"oat",
|
||||
arch.String(),
|
||||
pathtools.ReplaceExtension(filepath.Base(path), "odex"))
|
||||
}
|
||||
|
||||
odexPath := module.BuildPath.InSameDir(ctx, "oat", arch.String(), pathtools.ReplaceExtension(base, "odex"))
|
||||
odexInstallPath := toOdexPath(module.DexLocation)
|
||||
odexInstallPath := ToOdexPath(module.DexLocation, arch)
|
||||
if odexOnSystemOther(module, global) {
|
||||
odexInstallPath = filepath.Join(SystemOtherPartition, odexInstallPath)
|
||||
}
|
||||
|
Reference in New Issue
Block a user