From 8fe3a415b5620ea7e0edd83a031ebaedbe570d90 Mon Sep 17 00:00:00 2001 From: Jiakai Zhang Date: Thu, 23 Feb 2023 17:37:16 +0000 Subject: [PATCH 1/3] Refactor dexpreopt for boot jars to allow more complex dependencies. After this change, the dependency hierachy can be arbitrarily deep. For example, you can have one boot image that extends another boot image that extends yet another boot image. Bug: 269230245 Test: m Change-Id: I096d0b57bda36b982ecc97378647f9c59071a3bf --- android/util.go | 9 ++++++++ java/dexpreopt_bootjars.go | 32 +++++++++++++++++--------- java/dexpreopt_config.go | 39 ++++++++++++++++++++++++-------- java/dexpreopt_config_testing.go | 24 ++++++++++---------- 4 files changed, 72 insertions(+), 32 deletions(-) diff --git a/android/util.go b/android/util.go index 947af699c..8f4c17daa 100644 --- a/android/util.go +++ b/android/util.go @@ -29,6 +29,15 @@ func CopyOf(s []string) []string { return append([]string(nil), s...) } +// Concat returns a new slice concatenated from the two input slices. It does not change the input +// slices. +func Concat[T any](s1, s2 []T) []T { + res := make([]T, 0, len(s1)+len(s2)) + res = append(res, s1...) + res = append(res, s2...) + return res +} + // JoinWithPrefix prepends the prefix to each string in the list and // returns them joined together with " " as separator. func JoinWithPrefix(strs []string, prefix string) string { diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index 40aad0642..f2079b05d 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -16,6 +16,7 @@ package java import ( "path/filepath" + "sort" "strings" "android/soong/android" @@ -312,17 +313,17 @@ type bootImageVariant struct { // All the files that constitute this image variant, i.e. .art, .oat and .vdex files. imagesDeps android.OutputPaths - // The path to the primary image variant's imagePathOnHost field, where primary image variant + // The path to the base image variant's imagePathOnHost field, where base image variant // means the image variant that this extends. // // This is only set for a variant of an image that extends another image. - primaryImages android.OutputPath + baseImages android.OutputPaths - // The paths to the primary image variant's imagesDeps field, where primary image variant + // The paths to the base image variant's imagesDeps field, where base image variant // means the image variant that this extends. // // This is only set for a variant of an image that extends another image. - primaryImagesDeps android.Paths + baseImagesDeps android.Paths // Rules which should be used in make to install the outputs on host. // @@ -511,8 +512,13 @@ func (d *dexpreoptBootJars) GenerateSingletonBuildActions(ctx android.SingletonC defaultImageConfig := defaultBootImageConfig(ctx) d.defaultBootImage = defaultImageConfig - artBootImageConfig := artBootImageConfig(ctx) - d.otherImages = []*bootImageConfig{artBootImageConfig} + imageConfigs := genBootImageConfigs(ctx) + d.otherImages = make([]*bootImageConfig, 0, len(imageConfigs)-1) + for _, config := range imageConfigs { + if config != defaultImageConfig { + d.otherImages = append(d.otherImages, config) + } + } } // shouldBuildBootImages determines whether boot images should be built. @@ -708,9 +714,11 @@ func buildBootImageVariant(ctx android.ModuleContext, image *bootImageVariant, p } if image.extends != nil { - // It is a boot image extension, so it needs the boot image it depends on (in this case the - // primary ART APEX image). - artImage := image.primaryImages + // It is a boot image extension, so it needs the boot images that it depends on. + baseImageLocations := make([]string, 0, len(image.baseImages)) + for _, image := range image.baseImages { + baseImageLocations = append(baseImageLocations, dexpreopt.PathToLocation(image, arch)) + } cmd. Flag("--runtime-arg").FlagWithInputList("-Xbootclasspath:", image.dexPathsDeps.Paths(), ":"). Flag("--runtime-arg").FlagWithList("-Xbootclasspath-locations:", image.dexLocationsDeps, ":"). @@ -718,11 +726,11 @@ func buildBootImageVariant(ctx android.ModuleContext, image *bootImageVariant, p // dex2oat will reconstruct the path to the actual file when it needs it. As the actual path // to the file cannot be passed to the command make sure to add the actual path as an Implicit // dependency to ensure that it is built before the command runs. - FlagWithArg("--boot-image=", dexpreopt.PathToLocation(artImage, arch)).Implicit(artImage). + FlagWithList("--boot-image=", baseImageLocations, ":").Implicits(image.baseImages.Paths()). // Similarly, the dex2oat tool will automatically find the paths to other files in the base // boot image so make sure to add them as implicit dependencies to ensure that they are built // before this command is run. - Implicits(image.primaryImagesDeps) + Implicits(image.baseImagesDeps) } else { // It is a primary image, so it needs a base address. cmd.FlagWithArg("--base=", ctx.Config().LibartImgDeviceBaseAddress()) @@ -1021,6 +1029,8 @@ func (d *dexpreoptBootJars) MakeVars(ctx android.MakeVarsContext) { ctx.Strict("DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICE"+current.name, strings.Join(imageLocationsOnDevice, ":")) ctx.Strict("DEXPREOPT_IMAGE_ZIP_"+current.name, current.zip.String()) } + // Ensure determinism. + sort.Strings(imageNames) ctx.Strict("DEXPREOPT_IMAGE_NAMES", strings.Join(imageNames, " ")) } } diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go index 2975130f3..76c78cb29 100644 --- a/java/dexpreopt_config.go +++ b/java/dexpreopt_config.go @@ -94,10 +94,7 @@ func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig { deviceDir := android.PathForOutput(ctx, ctx.Config().DeviceName()) configs := genBootImageConfigRaw(ctx) - artCfg := configs[artBootImageName] - frameworkCfg := configs[frameworkBootImageName] - // common to all configs for _, c := range configs { c.dir = deviceDir.Join(ctx, "dex_"+c.name+"jars") c.symbolsDir = deviceDir.Join(ctx, "dex_"+c.name+"jars_unstripped") @@ -133,18 +130,42 @@ func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig { c.zip = c.dir.Join(ctx, c.name+".zip") } - // specific to the framework config - frameworkCfg.dexPathsDeps = append(artCfg.dexPathsDeps, frameworkCfg.dexPathsDeps...) - for i := range targets { - frameworkCfg.variants[i].primaryImages = artCfg.variants[i].imagePathOnHost - frameworkCfg.variants[i].primaryImagesDeps = artCfg.variants[i].imagesDeps.Paths() - frameworkCfg.variants[i].dexLocationsDeps = append(artCfg.variants[i].dexLocations, frameworkCfg.variants[i].dexLocationsDeps...) + visited := make(map[string]bool) + for _, c := range configs { + calculateDepsRecursive(c, targets, visited) } return configs }).(map[string]*bootImageConfig) } +// calculateDepsRecursive calculates the dependencies of the given boot image config and all its +// ancestors, if they are not visited. +// The boot images are supposed to form a tree, where the root is the primary boot image. We do not +// expect loops (e.g., A extends B, B extends C, C extends A), and we let them crash soong with a +// stack overflow. +// Note that a boot image config only has a pointer to the parent, not to children. Therefore, we +// first go up through the parent chain, and then go back down to visit every code along the path. +// `visited` is a map where a key is a boot image name and the value indicates whether the boot +// image config is visited. The boot image names are guaranteed to be unique because they come from +// `genBootImageConfigRaw` above, which also returns a map and would fail in the first place if the +// names were not unique. +func calculateDepsRecursive(c *bootImageConfig, targets []android.Target, visited map[string]bool) { + if c.extends == nil || visited[c.name] { + return + } + if c.extends.extends != nil { + calculateDepsRecursive(c.extends, targets, visited) + } + visited[c.name] = true + c.dexPathsDeps = android.Concat(c.extends.dexPathsDeps, c.dexPathsDeps) + for i := range targets { + c.variants[i].baseImages = android.Concat(c.extends.variants[i].baseImages, android.OutputPaths{c.extends.variants[i].imagePathOnHost}) + c.variants[i].baseImagesDeps = android.Concat(c.extends.variants[i].baseImagesDeps, c.extends.variants[i].imagesDeps.Paths()) + c.variants[i].dexLocationsDeps = android.Concat(c.extends.variants[i].dexLocationsDeps, c.variants[i].dexLocationsDeps) + } +} + func artBootImageConfig(ctx android.PathContext) *bootImageConfig { return genBootImageConfigs(ctx)[artBootImageName] } diff --git a/java/dexpreopt_config_testing.go b/java/dexpreopt_config_testing.go index 1c236d8af..c509c1bd7 100644 --- a/java/dexpreopt_config_testing.go +++ b/java/dexpreopt_config_testing.go @@ -100,8 +100,8 @@ type expectedVariant struct { imagePathOnHost string imagePathOnDevice string imagesDeps []string - primaryImages string - primaryImagesDeps []string + baseImages []string + baseImagesDeps []string // Mutated fields installs []normalizedInstall @@ -413,8 +413,8 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat", "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", }, - primaryImages: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", - primaryImagesDeps: []string{ + baseImages: []string{"out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art"}, + baseImagesDeps: []string{ "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", @@ -461,8 +461,8 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat", "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex", }, - primaryImages: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", - primaryImagesDeps: []string{ + baseImages: []string{"out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art"}, + baseImagesDeps: []string{ "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", @@ -509,8 +509,8 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", }, - primaryImages: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", - primaryImagesDeps: []string{ + baseImages: []string{"out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art"}, + baseImagesDeps: []string{ "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", @@ -557,8 +557,8 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", }, - primaryImages: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", - primaryImagesDeps: []string{ + baseImages: []string{"out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art"}, + baseImagesDeps: []string{ "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", @@ -664,8 +664,8 @@ func nestedCheckBootImageConfig(t *testing.T, imageConfig *bootImageConfig, expe android.AssertPathRelativeToTopEquals(t, "imagePathOnHost", expectedVariant.imagePathOnHost, variant.imagePathOnHost) android.AssertStringEquals(t, "imagePathOnDevice", expectedVariant.imagePathOnDevice, variant.imagePathOnDevice) android.AssertPathsRelativeToTopEquals(t, "imagesDeps", expectedVariant.imagesDeps, variant.imagesDeps.Paths()) - android.AssertPathRelativeToTopEquals(t, "primaryImages", expectedVariant.primaryImages, variant.primaryImages) - android.AssertPathsRelativeToTopEquals(t, "primaryImagesDeps", expectedVariant.primaryImagesDeps, variant.primaryImagesDeps) + android.AssertPathsRelativeToTopEquals(t, "baseImages", expectedVariant.baseImages, variant.baseImages.Paths()) + android.AssertPathsRelativeToTopEquals(t, "baseImagesDeps", expectedVariant.baseImagesDeps, variant.baseImagesDeps) assertInstallsEqual(t, "installs", expectedVariant.installs, variant.installs) assertInstallsEqual(t, "vdexInstalls", expectedVariant.vdexInstalls, variant.vdexInstalls) assertInstallsEqual(t, "unstrippedInstalls", expectedVariant.unstrippedInstalls, variant.unstrippedInstalls) From d49324dadb1fc38c363c0bc7ab28afacdf71b742 Mon Sep 17 00:00:00 2001 From: Jiakai Zhang Date: Fri, 24 Feb 2023 17:05:02 +0000 Subject: [PATCH 2/3] Refactor platform_bootclasspath to support multiple boot images. Bug: 269230245 Test: m Change-Id: I223756d5481607a82732f70c51057609ec4ee43f --- java/platform_bootclasspath.go | 42 ++++++++++++++++------------------ 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go index f0de7a4d8..5824f08fd 100644 --- a/java/platform_bootclasspath.go +++ b/java/platform_bootclasspath.go @@ -129,7 +129,7 @@ func (b *platformBootclasspathModule) BootclasspathDepsMutator(ctx android.Botto // Add dependencies on all the non-updatable module configured in the "boot" boot image. That does // not include modules configured in the "art" boot image. - bootImageConfig := b.getImageConfig(ctx) + bootImageConfig := defaultBootImageConfig(ctx) addDependenciesOntoBootImageModules(ctx, bootImageConfig.modules, platformBootclasspathBootJarDepTag) // Add dependencies on all the apex jars. @@ -205,7 +205,7 @@ func (b *platformBootclasspathModule) generateClasspathProtoBuildActions(ctx and func (b *platformBootclasspathModule) configuredJars(ctx android.ModuleContext) android.ConfiguredJarList { // Include all non APEX jars - jars := b.getImageConfig(ctx).modules + jars := defaultBootImageConfig(ctx).modules // Include jars from APEXes that don't populate their classpath proto config. remainingJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars @@ -266,10 +266,6 @@ func (b *platformBootclasspathModule) checkApexModules(ctx android.ModuleContext } } -func (b *platformBootclasspathModule) getImageConfig(ctx android.EarlyModuleContext) *bootImageConfig { - return defaultBootImageConfig(ctx) -} - // generateHiddenAPIBuildActions generates all the hidden API related build rules. func (b *platformBootclasspathModule) generateHiddenAPIBuildActions(ctx android.ModuleContext, modules []android.Module, fragments []android.Module) bootDexJarByModule { @@ -410,27 +406,24 @@ func (b *platformBootclasspathModule) generateBootImageBuildActions(ctx android. // GenerateSingletonBuildActions method as it cannot create it for itself. dexpreopt.GetGlobalSoongConfig(ctx) - imageConfig := b.getImageConfig(ctx) - if imageConfig == nil { - return - } - global := dexpreopt.GetGlobalConfig(ctx) if !shouldBuildBootImages(ctx.Config(), global) { return } - // Generate the framework profile rule - bootFrameworkProfileRule(ctx, imageConfig) + frameworkBootImageConfig := defaultBootImageConfig(ctx) + bootFrameworkProfileRule(ctx, frameworkBootImageConfig) + b.generateBootImage(ctx, frameworkBootImageName, platformModules) + b.copyApexBootJarsForAppsDexpreopt(ctx, apexModules) + dumpOatRules(ctx, frameworkBootImageConfig) +} - // Copy platform module dex jars to their predefined locations. - platformBootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, platformModules) - copyBootJarsToPredefinedLocations(ctx, platformBootDexJarsByModule, imageConfig.dexPathsByModule) +func (b *platformBootclasspathModule) generateBootImage(ctx android.ModuleContext, imageName string, modules []android.Module) { + imageConfig := genBootImageConfigs(ctx)[imageName] - // Copy apex module dex jars to their predefined locations. - config := GetApexBootConfig(ctx) - apexBootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, apexModules) - copyBootJarsToPredefinedLocations(ctx, apexBootDexJarsByModule, config.dexPathsByModule) + // Copy module dex jars to their predefined locations. + bootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, modules) + copyBootJarsToPredefinedLocations(ctx, bootDexJarsByModule, imageConfig.dexPathsByModule) // Build a profile for the image config and then use that to build the boot image. profile := bootImageProfileRule(ctx, imageConfig) @@ -443,6 +436,11 @@ func (b *platformBootclasspathModule) generateBootImageBuildActions(ctx android. // Build boot image files for the host variants. There are use directly by ART host side tests. buildBootImageVariantsForBuildOs(ctx, imageConfig, profile) - - dumpOatRules(ctx, imageConfig) +} + +// Copy apex module dex jars to their predefined locations. They will be used for dexpreopt for apps. +func (b *platformBootclasspathModule) copyApexBootJarsForAppsDexpreopt(ctx android.ModuleContext, apexModules []android.Module) { + config := GetApexBootConfig(ctx) + apexBootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, apexModules) + copyBootJarsToPredefinedLocations(ctx, apexBootDexJarsByModule, config.dexPathsByModule) } From 3830308fb8be13df66437b9798122789c85c7e37 Mon Sep 17 00:00:00 2001 From: Jiakai Zhang Date: Mon, 20 Feb 2023 16:30:01 +0000 Subject: [PATCH 3/3] Generate a boot image extension for mainline BCP jars. Bug: 269230245 Test: m Test: atest art_standalone_dexpreopt_tests Change-Id: I253c30d938eee2cf2549ec2338425d53956e7cbb --- java/dexpreopt.go | 6 + java/dexpreopt_config.go | 26 +- java/dexpreopt_config_test.go | 2 + java/dexpreopt_config_testing.go | 461 ++++++++++++++++++++++++- java/platform_bootclasspath.go | 1 + sdk/bootclasspath_fragment_sdk_test.go | 36 +- 6 files changed, 519 insertions(+), 13 deletions(-) diff --git a/java/dexpreopt.go b/java/dexpreopt.go index e0a062902..0ffedf6c4 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -293,6 +293,12 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Wr isSystemServerJar := global.AllSystemServerJars(ctx).ContainsJar(moduleName(ctx)) bootImage := defaultBootImageConfig(ctx) + // When `global.PreoptWithUpdatableBcp` is true, `bcpForDexpreopt` below includes the mainline + // boot jars into bootclasspath, so we should include the mainline boot image as well because it's + // generated from those jars. + if global.PreoptWithUpdatableBcp { + bootImage = mainlineBootImageConfig(ctx) + } dexFiles, dexLocations := bcpForDexpreopt(ctx, global.PreoptWithUpdatableBcp) targets := ctx.MultiTargets() diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go index 76c78cb29..117b660b7 100644 --- a/java/dexpreopt_config.go +++ b/java/dexpreopt_config.go @@ -44,6 +44,8 @@ var ( bootImageConfigRawKey = android.NewOnceKey("bootImageConfigRaw") artBootImageName = "art" frameworkBootImageName = "boot" + mainlineBootImageName = "mainline" + bootImageStem = "boot" ) func genBootImageConfigRaw(ctx android.PathContext) map[string]*bootImageConfig { @@ -52,14 +54,16 @@ func genBootImageConfigRaw(ctx android.PathContext) map[string]*bootImageConfig artModules := global.ArtApexJars frameworkModules := global.BootJars.RemoveList(artModules) + mainlineBcpModules := global.ApexBootJars + frameworkSubdir := "system/framework" // ART config for the primary boot image in the ART apex. // It includes the Core Libraries. artCfg := bootImageConfig{ name: artBootImageName, - stem: "boot", + stem: bootImageStem, installDirOnHost: "apex/art_boot_images/javalib", - installDirOnDevice: "system/framework", + installDirOnDevice: frameworkSubdir, profileInstallPathInApex: "etc/boot-image.prof", modules: artModules, preloadedClassesFile: "art/build/boot/preloaded-classes", @@ -68,11 +72,10 @@ func genBootImageConfigRaw(ctx android.PathContext) map[string]*bootImageConfig // Framework config for the boot image extension. // It includes framework libraries and depends on the ART config. - frameworkSubdir := "system/framework" frameworkCfg := bootImageConfig{ extends: &artCfg, name: frameworkBootImageName, - stem: "boot", + stem: bootImageStem, installDirOnHost: frameworkSubdir, installDirOnDevice: frameworkSubdir, modules: frameworkModules, @@ -80,9 +83,20 @@ func genBootImageConfigRaw(ctx android.PathContext) map[string]*bootImageConfig compilerFilter: "speed-profile", } + mainlineCfg := bootImageConfig{ + extends: &frameworkCfg, + name: mainlineBootImageName, + stem: bootImageStem, + installDirOnHost: frameworkSubdir, + installDirOnDevice: frameworkSubdir, + modules: mainlineBcpModules, + compilerFilter: "verify", + } + return map[string]*bootImageConfig{ artBootImageName: &artCfg, frameworkBootImageName: &frameworkCfg, + mainlineBootImageName: &mainlineCfg, } }).(map[string]*bootImageConfig) } @@ -174,6 +188,10 @@ func defaultBootImageConfig(ctx android.PathContext) *bootImageConfig { return genBootImageConfigs(ctx)[frameworkBootImageName] } +func mainlineBootImageConfig(ctx android.PathContext) *bootImageConfig { + return genBootImageConfigs(ctx)[mainlineBootImageName] +} + // Apex boot config allows to access build/install paths of apex boot jars without going // through the usual trouble of registering dependencies on those modules and extracting build paths // from those dependencies. diff --git a/java/dexpreopt_config_test.go b/java/dexpreopt_config_test.go index b704d09d2..cd7f295c8 100644 --- a/java/dexpreopt_config_test.go +++ b/java/dexpreopt_config_test.go @@ -28,8 +28,10 @@ func TestBootImageConfig(t *testing.T) { result := android.GroupFixturePreparers( PrepareForBootImageConfigTest, + PrepareApexBootJarConfigs, ).RunTest(t) CheckArtBootImageConfig(t, result) CheckFrameworkBootImageConfig(t, result) + CheckMainlineBootImageConfig(t, result) } diff --git a/java/dexpreopt_config_testing.go b/java/dexpreopt_config_testing.go index c509c1bd7..c27f4c6da 100644 --- a/java/dexpreopt_config_testing.go +++ b/java/dexpreopt_config_testing.go @@ -39,6 +39,78 @@ var PrepareForBootImageConfigTest = android.GroupFixturePreparers( FixtureConfigureBootJars("com.android.art:core1", "com.android.art:core2", "platform:framework"), ) +var PrepareApexBootJarConfigs = FixtureConfigureApexBootJars( + "com.android.foo:framework-foo", "com.android.bar:framework-bar") + +var PrepareApexBootJarConfigsAndModules = android.GroupFixturePreparers( + PrepareApexBootJarConfigs, + prepareApexBootJarModule("com.android.foo", "framework-foo"), + prepareApexBootJarModule("com.android.bar", "framework-bar"), +) + +var ApexBootJarFragmentsForPlatformBootclasspath = fmt.Sprintf(` + { + apex: "%[1]s", + module: "%[1]s-bootclasspathfragment", + }, + { + apex: "%[2]s", + module: "%[2]s-bootclasspathfragment", + }, +`, "com.android.foo", "com.android.bar") + +var ApexBootJarDexJarPaths = []string{ + "out/soong/.intermediates/packages/modules/com.android.bar/framework-bar/android_common_apex10000/aligned/framework-bar.jar", + "out/soong/.intermediates/packages/modules/com.android.foo/framework-foo/android_common_apex10000/aligned/framework-foo.jar", +} + +func prepareApexBootJarModule(apexName string, moduleName string) android.FixturePreparer { + moduleSourceDir := fmt.Sprintf("packages/modules/%s", apexName) + return android.GroupFixturePreparers( + android.FixtureAddTextFile(moduleSourceDir+"/Android.bp", fmt.Sprintf(` + apex { + name: "%[1]s", + key: "%[1]s.key", + bootclasspath_fragments: [ + "%[1]s-bootclasspathfragment", + ], + updatable: false, + } + + apex_key { + name: "%[1]s.key", + public_key: "%[1]s.avbpubkey", + private_key: "%[1]s.pem", + } + + bootclasspath_fragment { + name: "%[1]s-bootclasspathfragment", + contents: ["%[2]s"], + apex_available: ["%[1]s"], + hidden_api: { + split_packages: ["*"], + }, + } + + java_library { + name: "%[2]s", + srcs: ["%[2]s.java"], + system_modules: "none", + sdk_version: "none", + compile_dex: true, + apex_available: ["%[1]s"], + } + `, apexName, moduleName)), + android.FixtureMergeMockFs(android.MockFS{ + fmt.Sprintf("%s/apex_manifest.json", moduleSourceDir): nil, + fmt.Sprintf("%s/%s.avbpubkey", moduleSourceDir, apexName): nil, + fmt.Sprintf("%s/%s.pem", moduleSourceDir, apexName): nil, + fmt.Sprintf("system/sepolicy/apex/%s-file_contexts", apexName): nil, + fmt.Sprintf("%s/%s.java", moduleSourceDir, moduleName): nil, + }), + ) +} + // normalizedInstall represents a android.RuleBuilderInstall that has been normalized to remove // test specific parts of the From path. type normalizedInstall struct { @@ -601,6 +673,366 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut checkBootImageConfig(t, imageConfig, mutated, expected) } +// getMainlineImageConfig gets the framework bootImageConfig that was created during the test. +func getMainlineImageConfig(result *android.TestResult) *bootImageConfig { + pathCtx := &android.TestPathContext{TestResult: result} + imageConfig := mainlineBootImageConfig(pathCtx) + return imageConfig +} + +// CheckMainlineBootImageConfig checks the status of the fields of the bootImageConfig and +// bootImageVariant structures that are returned from mainlineBootImageConfig. +// +// This is before any fields are mutated. +func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) { + expectedLicenseMetadataFile := "" + imageConfig := getMainlineImageConfig(result) + + expected := &expectedConfig{ + name: "mainline", + stem: "boot", + dir: "out/soong/test_device/dex_mainlinejars", + symbolsDir: "out/soong/test_device/dex_mainlinejars_unstripped", + installDirOnDevice: "system/framework", + installDirOnHost: "system/framework", + profileInstallPathInApex: "", + modules: android.CreateTestConfiguredJarList([]string{ + "com.android.foo:framework-foo", + "com.android.bar:framework-bar", + }), + dexPaths: []string{ + "out/soong/test_device/dex_mainlinejars_input/framework-foo.jar", + "out/soong/test_device/dex_mainlinejars_input/framework-bar.jar", + }, + dexPathsDeps: []string{ + "out/soong/test_device/dex_artjars_input/core1.jar", + "out/soong/test_device/dex_artjars_input/core2.jar", + "out/soong/test_device/dex_bootjars_input/framework.jar", + "out/soong/test_device/dex_mainlinejars_input/framework-foo.jar", + "out/soong/test_device/dex_mainlinejars_input/framework-bar.jar", + }, + zip: "out/soong/test_device/dex_mainlinejars/mainline.zip", + variants: []*expectedVariant{ + { + archType: android.Arm64, + dexLocations: []string{ + "/apex/com.android.foo/javalib/framework-foo.jar", + "/apex/com.android.bar/javalib/framework-bar.jar", + }, + dexLocationsDeps: []string{ + "/apex/com.android.art/javalib/core1.jar", + "/apex/com.android.art/javalib/core2.jar", + "/system/framework/framework.jar", + "/apex/com.android.foo/javalib/framework-foo.jar", + "/apex/com.android.bar/javalib/framework-bar.jar", + }, + imagePathOnHost: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", + imagePathOnDevice: "/system/framework/arm64/boot-framework-foo.art", + imagesDeps: []string{ + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.art", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.oat", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.vdex", + }, + baseImages: []string{ + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", + "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art", + }, + baseImagesDeps: []string{ + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", + "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art", + "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat", + "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", + }, + installs: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", + to: "/system/framework/arm64/boot-framework-foo.art", + }, + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat", + to: "/system/framework/arm64/boot-framework-foo.oat", + }, + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.art", + to: "/system/framework/arm64/boot-framework-bar.art", + }, + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.oat", + to: "/system/framework/arm64/boot-framework-bar.oat", + }, + }, + vdexInstalls: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex", + to: "/system/framework/arm64/boot-framework-foo.vdex", + }, + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.vdex", + to: "/system/framework/arm64/boot-framework-bar.vdex", + }, + }, + unstrippedInstalls: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat", + to: "/system/framework/arm64/boot-framework-foo.oat", + }, + { + from: "out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-bar.oat", + to: "/system/framework/arm64/boot-framework-bar.oat", + }, + }, + licenseMetadataFile: expectedLicenseMetadataFile, + }, + { + archType: android.Arm, + dexLocations: []string{ + "/apex/com.android.foo/javalib/framework-foo.jar", + "/apex/com.android.bar/javalib/framework-bar.jar", + }, + dexLocationsDeps: []string{ + "/apex/com.android.art/javalib/core1.jar", + "/apex/com.android.art/javalib/core2.jar", + "/system/framework/framework.jar", + "/apex/com.android.foo/javalib/framework-foo.jar", + "/apex/com.android.bar/javalib/framework-bar.jar", + }, + imagePathOnHost: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", + imagePathOnDevice: "/system/framework/arm/boot-framework-foo.art", + imagesDeps: []string{ + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.art", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.oat", + "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.vdex", + }, + baseImages: []string{ + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", + "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art", + }, + baseImagesDeps: []string{ + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", + "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", + "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art", + "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat", + "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex", + }, + installs: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", + to: "/system/framework/arm/boot-framework-foo.art", + }, + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat", + to: "/system/framework/arm/boot-framework-foo.oat", + }, + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.art", + to: "/system/framework/arm/boot-framework-bar.art", + }, + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.oat", + to: "/system/framework/arm/boot-framework-bar.oat", + }, + }, + vdexInstalls: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex", + to: "/system/framework/arm/boot-framework-foo.vdex", + }, + { + from: "out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.vdex", + to: "/system/framework/arm/boot-framework-bar.vdex", + }, + }, + unstrippedInstalls: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat", + to: "/system/framework/arm/boot-framework-foo.oat", + }, + { + from: "out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-bar.oat", + to: "/system/framework/arm/boot-framework-bar.oat", + }, + }, + licenseMetadataFile: expectedLicenseMetadataFile, + }, + { + archType: android.X86_64, + dexLocations: []string{ + "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", + "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", + }, + dexLocationsDeps: []string{ + "host/linux-x86/apex/com.android.art/javalib/core1.jar", + "host/linux-x86/apex/com.android.art/javalib/core2.jar", + "host/linux-x86/system/framework/framework.jar", + "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", + "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", + }, + imagePathOnHost: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", + imagePathOnDevice: "/system/framework/x86_64/boot-framework-foo.art", + imagesDeps: []string{ + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.art", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.oat", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.vdex", + }, + baseImages: []string{ + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", + "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", + }, + baseImagesDeps: []string{ + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", + "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", + "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", + "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", + }, + installs: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", + to: "/system/framework/x86_64/boot-framework-foo.art", + }, + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", + to: "/system/framework/x86_64/boot-framework-foo.oat", + }, + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.art", + to: "/system/framework/x86_64/boot-framework-bar.art", + }, + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.oat", + to: "/system/framework/x86_64/boot-framework-bar.oat", + }, + }, + vdexInstalls: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex", + to: "/system/framework/x86_64/boot-framework-foo.vdex", + }, + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.vdex", + to: "/system/framework/x86_64/boot-framework-bar.vdex", + }, + }, + unstrippedInstalls: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", + to: "/system/framework/x86_64/boot-framework-foo.oat", + }, + { + from: "out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-bar.oat", + to: "/system/framework/x86_64/boot-framework-bar.oat", + }, + }, + licenseMetadataFile: expectedLicenseMetadataFile, + }, + { + archType: android.X86, + dexLocations: []string{ + "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", + "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", + }, + dexLocationsDeps: []string{ + "host/linux-x86/apex/com.android.art/javalib/core1.jar", + "host/linux-x86/apex/com.android.art/javalib/core2.jar", + "host/linux-x86/system/framework/framework.jar", + "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", + "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", + }, + imagePathOnHost: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", + imagePathOnDevice: "/system/framework/x86/boot-framework-foo.art", + imagesDeps: []string{ + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.art", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.oat", + "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.vdex", + }, + baseImages: []string{ + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", + "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", + }, + baseImagesDeps: []string{ + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", + "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", + "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", + "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", + "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", + }, + installs: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", + to: "/system/framework/x86/boot-framework-foo.art", + }, + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat", + to: "/system/framework/x86/boot-framework-foo.oat", + }, + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.art", + to: "/system/framework/x86/boot-framework-bar.art", + }, + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.oat", + to: "/system/framework/x86/boot-framework-bar.oat", + }, + }, + vdexInstalls: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex", + to: "/system/framework/x86/boot-framework-foo.vdex", + }, + { + from: "out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.vdex", + to: "/system/framework/x86/boot-framework-bar.vdex", + }, + }, + unstrippedInstalls: []normalizedInstall{ + { + from: "out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat", + to: "/system/framework/x86/boot-framework-foo.oat", + }, + { + from: "out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-bar.oat", + to: "/system/framework/x86/boot-framework-bar.oat", + }, + }, + licenseMetadataFile: expectedLicenseMetadataFile, + }, + }, + profileInstalls: []normalizedInstall{}, + profileLicenseMetadataFile: expectedLicenseMetadataFile, + } + + checkBootImageConfig(t, imageConfig, false, expected) +} + // clearMutatedFields clears fields in the expectedConfig that correspond to fields in the // bootImageConfig/bootImageVariant structs which are mutated outside the call to // genBootImageConfigs. @@ -712,6 +1144,10 @@ DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bootjars/andr DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art:/system/framework/arm64/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art:/system/framework/x86/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art:/system/framework/x86_64/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm=out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art:/system/framework/arm/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.art:/system/framework/arm/boot-framework-bar.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.oat:/system/framework/arm/boot-framework-bar.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm64=out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art:/system/framework/arm64/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.art:/system/framework/arm64/boot-framework-bar.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.oat:/system/framework/arm64/boot-framework-bar.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art:/system/framework/x86/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.art:/system/framework/x86/boot-framework-bar.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.oat:/system/framework/x86/boot-framework-bar.oat +DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art:/system/framework/x86_64/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.art:/system/framework/x86_64/boot-framework-bar.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.oat:/system/framework/x86_64/boot-framework-bar.oat DEXPREOPT_IMAGE_DEPS_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex DEXPREOPT_IMAGE_DEPS_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex DEXPREOPT_IMAGE_DEPS_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex @@ -720,6 +1156,10 @@ DEXPREOPT_IMAGE_DEPS_boot_arm=out/soong/test_device/dex_bootjars/android/system/ DEXPREOPT_IMAGE_DEPS_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex DEXPREOPT_IMAGE_DEPS_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex DEXPREOPT_IMAGE_DEPS_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex +DEXPREOPT_IMAGE_DEPS_mainline_arm=out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.oat out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.vdex +DEXPREOPT_IMAGE_DEPS_mainline_arm64=out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.art out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.oat out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.vdex +DEXPREOPT_IMAGE_DEPS_mainline_host_x86=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.oat out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.vdex +DEXPREOPT_IMAGE_DEPS_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.art out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.oat out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.vdex DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm=%[1]s DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm64=%[1]s DEXPREOPT_IMAGE_LICENSE_METADATA_art_host_x86=%[1]s @@ -728,11 +1168,17 @@ DEXPREOPT_IMAGE_LICENSE_METADATA_boot_arm=out/soong/.intermediates/frameworks/ba DEXPREOPT_IMAGE_LICENSE_METADATA_boot_arm64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic DEXPREOPT_IMAGE_LICENSE_METADATA_boot_host_x86=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic DEXPREOPT_IMAGE_LICENSE_METADATA_boot_host_x86_64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic +DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_arm=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic +DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_arm64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic +DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_host_x86=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic +DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_host_x86_64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEart=/system/framework/boot.art DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEboot=/system/framework/boot.art:/system/framework/boot-framework.art +DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEmainline=/system/framework/boot.art:/system/framework/boot-framework.art:/system/framework/boot-framework-foo.art DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTart=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/boot.art DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTboot=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/boot.art:out/soong/test_device/dex_bootjars/android/system/framework/boot-framework.art -DEXPREOPT_IMAGE_NAMES=art boot +DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTmainline=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/boot.art:out/soong/test_device/dex_bootjars/android/system/framework/boot-framework.art:out/soong/test_device/dex_mainlinejars/android/system/framework/boot-framework-foo.art +DEXPREOPT_IMAGE_NAMES=art boot mainline DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED=out/soong/test_device/dex_bootjars/boot.bprof:/system/etc/boot-image.bprof out/soong/test_device/dex_bootjars/boot.prof:/system/etc/boot-image.prof DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm=out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat @@ -743,6 +1189,10 @@ DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bo DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm=out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-bar.oat:/system/framework/arm/boot-framework-bar.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm64=out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-bar.oat:/system/framework/arm64/boot-framework-bar.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86=out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-bar.oat:/system/framework/x86/boot-framework-bar.oat +DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat out/soong/test_device/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-bar.oat:/system/framework/x86_64/boot-framework-bar.oat DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex:/apex/art_boot_images/javalib/arm/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex:/apex/art_boot_images/javalib/arm/boot-core2.vdex DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex:/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex:/apex/art_boot_images/javalib/arm64/boot-core2.vdex DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex:/apex/art_boot_images/javalib/x86/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex:/apex/art_boot_images/javalib/x86/boot-core2.vdex @@ -751,8 +1201,13 @@ DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bootjars DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex:/system/framework/arm64/boot-framework.vdex DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex:/system/framework/x86/boot-framework.vdex DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex:/system/framework/x86_64/boot-framework.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm=out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex:/system/framework/arm/boot-framework-foo.vdex out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-bar.vdex:/system/framework/arm/boot-framework-bar.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm64=out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex:/system/framework/arm64/boot-framework-foo.vdex out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-bar.vdex:/system/framework/arm64/boot-framework-bar.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex:/system/framework/x86/boot-framework-foo.vdex out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-bar.vdex:/system/framework/x86/boot-framework-bar.vdex +DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex:/system/framework/x86_64/boot-framework-foo.vdex out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-bar.vdex:/system/framework/x86_64/boot-framework-bar.vdex DEXPREOPT_IMAGE_ZIP_art=out/soong/test_device/dex_artjars/art.zip DEXPREOPT_IMAGE_ZIP_boot=out/soong/test_device/dex_bootjars/boot.zip +DEXPREOPT_IMAGE_ZIP_mainline=out/soong/test_device/dex_mainlinejars/mainline.zip DEXPREOPT_IMAGE_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art DEXPREOPT_IMAGE_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art DEXPREOPT_IMAGE_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art @@ -761,6 +1216,10 @@ DEXPREOPT_IMAGE_boot_arm=out/soong/test_device/dex_bootjars/android/system/frame DEXPREOPT_IMAGE_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art DEXPREOPT_IMAGE_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art DEXPREOPT_IMAGE_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art +DEXPREOPT_IMAGE_mainline_arm=out/soong/test_device/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art +DEXPREOPT_IMAGE_mainline_arm64=out/soong/test_device/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art +DEXPREOPT_IMAGE_mainline_host_x86=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art +DEXPREOPT_IMAGE_mainline_host_x86_64=out/soong/test_device/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art ` expected := strings.TrimSpace(fmt.Sprintf(format, expectedLicenseMetadataFile)) actual := strings.TrimSpace(out.String()) diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go index 5824f08fd..0ea360979 100644 --- a/java/platform_bootclasspath.go +++ b/java/platform_bootclasspath.go @@ -414,6 +414,7 @@ func (b *platformBootclasspathModule) generateBootImageBuildActions(ctx android. frameworkBootImageConfig := defaultBootImageConfig(ctx) bootFrameworkProfileRule(ctx, frameworkBootImageConfig) b.generateBootImage(ctx, frameworkBootImageName, platformModules) + b.generateBootImage(ctx, mainlineBootImageName, apexModules) b.copyApexBootJarsForAppsDexpreopt(ctx, apexModules) dumpOatRules(ctx, frameworkBootImageConfig) } diff --git a/sdk/bootclasspath_fragment_sdk_test.go b/sdk/bootclasspath_fragment_sdk_test.go index d81635ebf..efb97be37 100644 --- a/sdk/bootclasspath_fragment_sdk_test.go +++ b/sdk/bootclasspath_fragment_sdk_test.go @@ -27,6 +27,11 @@ import ( // fixtureAddPlatformBootclasspathForBootclasspathFragment adds a platform_bootclasspath module that // references the bootclasspath fragment. func fixtureAddPlatformBootclasspathForBootclasspathFragment(apex, fragment string) android.FixturePreparer { + return fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, "") +} + +// fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra is the same as above, but also adds extra fragments. +func fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, extraFragments string) android.FixturePreparer { return android.GroupFixturePreparers( // Add a platform_bootclasspath module. android.FixtureAddTextFile("frameworks/base/boot/Android.bp", fmt.Sprintf(` @@ -37,9 +42,10 @@ func fixtureAddPlatformBootclasspathForBootclasspathFragment(apex, fragment stri apex: "%s", module: "%s", }, + %s ], } - `, apex, fragment)), + `, apex, fragment, extraFragments)), android.FixtureAddFile("frameworks/base/config/boot-profile.txt", nil), android.FixtureAddFile("frameworks/base/config/boot-image-profile.txt", nil), android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil), @@ -79,9 +85,11 @@ func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) { }), // Add a platform_bootclasspath that depends on the fragment. - fixtureAddPlatformBootclasspathForBootclasspathFragment("com.android.art", "mybootclasspathfragment"), + fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra( + "com.android.art", "mybootclasspathfragment", java.ApexBootJarFragmentsForPlatformBootclasspath), java.PrepareForBootImageConfigTest, + java.PrepareApexBootJarConfigsAndModules, android.FixtureWithRootAndroidBp(` sdk { name: "mysdk", @@ -196,9 +204,15 @@ java_import { snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) { // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex. checkBootJarsPackageCheckRule(t, result, - "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/core1.jar", - "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/core2.jar", - "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar") + append( + []string{ + "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/core1.jar", + "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/core2.jar", + "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar", + }, + java.ApexBootJarDexJarPaths..., + )..., + ) java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/snapshot/mybootclasspathfragment/android_common_com.android.art/meta_lic") java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic") }), @@ -222,9 +236,15 @@ java_import { // Make sure that the boot jars package check rule includes the dex jars created from the source. checkBootJarsPackageCheckRule(t, result, - "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar", - "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar", - "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar") + append( + []string{ + "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar", + "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar", + "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar", + }, + java.ApexBootJarDexJarPaths..., + )..., + ) } // checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars