diff --git a/java/dexpreopt.go b/java/dexpreopt.go index 1192d929e..479dec60b 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -101,6 +101,10 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo global := dexpreoptGlobalConfig(ctx) bootImage := defaultBootImageConfig(ctx) + defaultBootImage := bootImage + if global.UseApexImage { + bootImage = apexBootImageConfig(ctx) + } var archs []android.ArchType for _, a := range ctx.MultiTargets() { @@ -170,8 +174,11 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo DexPreoptImagesDeps: imagesDeps, DexPreoptImageLocations: bootImage.imageLocations, - PreoptBootClassPathDexFiles: bootImage.dexPathsDeps.Paths(), - PreoptBootClassPathDexLocations: bootImage.dexLocationsDeps, + // We use the dex paths and dex locations of the default boot image, as it + // contains the full dexpreopt boot classpath. Other images may just contain a subset of + // the dexpreopt boot classpath. + PreoptBootClassPathDexFiles: defaultBootImage.dexPathsDeps.Paths(), + PreoptBootClassPathDexLocations: defaultBootImage.dexLocationsDeps, PreoptExtractedApk: false, diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index 571453102..1d363c963 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -220,19 +220,16 @@ func (d *dexpreoptBootJars) GenerateBuildActions(ctx android.SingletonContext) { return } - // Default boot image is either the framework one, or the JIT-zygote one. - // The boot image that is created first is used to get a unique profile rule for all images. - if global.GenerateApexImage { - d.defaultBootImage = buildBootImage(ctx, apexBootImageConfig(ctx)) - d.otherImages = append(d.otherImages, buildBootImage(ctx, frameworkBootImageConfig(ctx))) - } else { - d.defaultBootImage = buildBootImage(ctx, frameworkBootImageConfig(ctx)) - } - - // Create the ART boot image. + // Always create the default boot image first, to get a unique profile rule for all images. + d.defaultBootImage = buildBootImage(ctx, defaultBootImageConfig(ctx)) if !skipDexpreoptArtBootJars(ctx) { + // Create boot image for the ART apex (build artifacts are accessed via the global boot image config). d.otherImages = append(d.otherImages, buildBootImage(ctx, artBootImageConfig(ctx))) } + if global.GenerateApexImage { + // Create boot images for the JIT-zygote experiment. + d.otherImages = append(d.otherImages, buildBootImage(ctx, apexBootImageConfig(ctx))) + } dumpOatRules(ctx, d.defaultBootImage) } diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go index d578b67e7..91e0dfbdd 100644 --- a/java/dexpreopt_config.go +++ b/java/dexpreopt_config.go @@ -234,7 +234,7 @@ func artBootImageConfig(ctx android.PathContext) bootImageConfig { return *genBootImageConfigs(ctx)[artBootImageName] } -func frameworkBootImageConfig(ctx android.PathContext) bootImageConfig { +func defaultBootImageConfig(ctx android.PathContext) bootImageConfig { return *genBootImageConfigs(ctx)[frameworkBootImageName] } @@ -242,14 +242,6 @@ func apexBootImageConfig(ctx android.PathContext) bootImageConfig { return *genBootImageConfigs(ctx)[apexBootImageName] } -func defaultBootImageConfig(ctx android.PathContext) bootImageConfig { - if dexpreoptGlobalConfig(ctx).UseApexImage { - return apexBootImageConfig(ctx) - } else { - return frameworkBootImageConfig(ctx) - } -} - func defaultBootclasspath(ctx android.PathContext) []string { return ctx.Config().OnceStringSlice(defaultBootclasspathKey, func() []string { global := dexpreoptGlobalConfig(ctx)