Merge "Revert "Consistently use either "boot" or "apex" boot image as the default.""
diff --git a/java/dexpreopt.go b/java/dexpreopt.go
index 1192d92..479dec6 100644
--- a/java/dexpreopt.go
+++ b/java/dexpreopt.go
@@ -101,6 +101,10 @@
 
 	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 @@
 		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 5714531..1d363c9 100644
--- a/java/dexpreopt_bootjars.go
+++ b/java/dexpreopt_bootjars.go
@@ -220,19 +220,16 @@
 		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 d578b67..91e0dfb 100644
--- a/java/dexpreopt_config.go
+++ b/java/dexpreopt_config.go
@@ -234,7 +234,7 @@
 	return *genBootImageConfigs(ctx)[artBootImageName]
 }
 
-func frameworkBootImageConfig(ctx android.PathContext) bootImageConfig {
+func defaultBootImageConfig(ctx android.PathContext) bootImageConfig {
 	return *genBootImageConfigs(ctx)[frameworkBootImageName]
 }
 
@@ -242,14 +242,6 @@
 	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)