Revert^3 "Add the mainline framework boot image extension to the default."

This reverts commit 43f9a4abb838afba01815532832c5c1a606771dc.

Reason for revert: Caused various SH regressions.

Bug: 271036161
Change-Id: I6e7e3f0f64abbde22d226aadbbf12efb2dd9e7d7
diff --git a/dexoptanalyzer/dexoptanalyzer.cc b/dexoptanalyzer/dexoptanalyzer.cc
index b182f68..ef43157 100644
--- a/dexoptanalyzer/dexoptanalyzer.cc
+++ b/dexoptanalyzer/dexoptanalyzer.cc
@@ -239,16 +239,11 @@
       // If we don't receive the image, try to use the default one.
       // Tests may specify a different image (e.g. core image).
       std::string error_msg;
-      std::string android_root = GetAndroidRootSafe(&error_msg);
-      if (android_root.empty()) {
-        LOG(ERROR) << error_msg;
-        Usage("--image unspecified and ANDROID_ROOT not set.");
-      }
-      image_ = GetDefaultBootImageLocationSafe(
-          android_root, /*deny_art_apex_data_files=*/false, &error_msg);
+      image_ = GetDefaultBootImageLocation(&error_msg);
+
       if (image_.empty()) {
         LOG(ERROR) << error_msg;
-        Usage("--image unspecified and failed to get default boot image location.");
+        Usage("--image unspecified and ANDROID_ROOT not set or image file does not exist.");
       }
     }
   }
diff --git a/libartbase/base/file_utils.cc b/libartbase/base/file_utils.cc
index bf0422a..2396289 100644
--- a/libartbase/base/file_utils.cc
+++ b/libartbase/base/file_utils.cc
@@ -40,7 +40,6 @@
 
 #include <memory>
 #include <sstream>
-#include <vector>
 
 #include "android-base/file.h"
 #include "android-base/logging.h"
@@ -51,7 +50,6 @@
 #include "base/os.h"
 #include "base/stl_util.h"
 #include "base/unix_file/fd_file.h"
-#include "base/utils.h"
 
 #if defined(__APPLE__)
 #include <crt_externs.h>
@@ -80,7 +78,6 @@
 static constexpr const char* kAndroidI18nRootEnvVar = "ANDROID_I18N_ROOT";
 static constexpr const char* kApexDefaultPath = "/apex/";
 static constexpr const char* kArtApexDataEnvVar = "ART_APEX_DATA";
-static constexpr const char* kBootImageStem = "boot";
 
 // Get the "root" directory containing the "lib" directory where this instance
 // of the libartbase library (which contains `GetRootContainingLibartbase`) is
@@ -301,73 +298,10 @@
   return GetPrebuiltPrimaryBootImageDir(android_root);
 }
 
-static std::string GetFirstMainlineFrameworkLibraryName(std::string* error_msg) {
-  const char* env_bcp = getenv("BOOTCLASSPATH");
-  const char* env_dex2oat_bcp = getenv("DEX2OATBOOTCLASSPATH");
-  if (env_bcp == nullptr || env_dex2oat_bcp == nullptr) {
-    *error_msg = "BOOTCLASSPATH and DEX2OATBOOTCLASSPATH must not be empty";
-    return "";
-  }
-
-  // DEX2OATBOOTCLASSPATH contains core libraries and framework libraries. We used to only compile
-  // those libraries. Now we compile mainline framework libraries as well, and we have repurposed
-  // DEX2OATBOOTCLASSPATH to indicate the separation between mainline framework libraries and other
-  // libraries.
-  std::string_view mainline_bcp(env_bcp);
-  if (!android::base::ConsumePrefix(&mainline_bcp, env_dex2oat_bcp)) {
-    *error_msg = "DEX2OATBOOTCLASSPATH must be a prefix of BOOTCLASSPATH";
-    return "";
-  }
-
-  std::vector<std::string_view> mainline_bcp_jars;
-  Split(mainline_bcp, ':', &mainline_bcp_jars);
-  if (mainline_bcp_jars.empty()) {
-    *error_msg = "No mainline framework library found";
-    return "";
-  }
-
-  std::string jar_name = android::base::Basename(mainline_bcp_jars[0]);
-
-  std::string_view library_name(jar_name);
-  if (!android::base::ConsumeSuffix(&library_name, ".jar")) {
-    *error_msg = "Invalid mainline framework jar: " + jar_name;
-    return "";
-  }
-
-  return std::string(library_name);
-}
-
-// Returns true when no error occurs, even if the extension doesn't exist.
-static bool MaybeAppendBootImageMainlineExtension(const std::string& android_root,
-                                                  /*inout*/ std::string* location,
-                                                  /*out*/ std::string* error_msg) {
-  if (!kIsTargetAndroid) {
-    return true;
-  }
-  // Due to how the runtime determines the mapping between boot images and bootclasspath jars, the
-  // name of the boot image extension must be in the format of
-  // `<primary-boot-image-stem>-<first-library-name>.art`.
-  std::string library_name = GetFirstMainlineFrameworkLibraryName(error_msg);
-  if (library_name.empty()) {
-    return false;
-  }
-  std::string mainline_extension_location = StringPrintf(
-      "%s/framework/%s-%s.art", android_root.c_str(), kBootImageStem, library_name.c_str());
-  std::string mainline_extension_path =
-      GetSystemImageFilename(mainline_extension_location.c_str(), kRuntimeISA);
-  if (!OS::FileExists(mainline_extension_path.c_str(), /*check_file_type=*/true)) {
-    // This is expected when the ART module is preloaded on an old source tree that doesn't
-    // dexpreopt mainline BCP jars, so it shouldn't be considered as an error.
-    return true;
-  }
-  *location += ":" + mainline_extension_location;
-  return true;
-}
-
-std::string GetDefaultBootImageLocationSafe(const std::string& android_root,
-                                            bool deny_art_apex_data_files,
-                                            std::string* error_msg) {
+std::string GetDefaultBootImageLocation(const std::string& android_root,
+                                        bool deny_art_apex_data_files) {
   constexpr static const char* kEtcBootImageProf = "etc/boot-image.prof";
+  constexpr static const char* kBootImageStem = "boot";
   constexpr static const char* kMinimalBootImageStem = "boot_minimal";
 
   // If an update for the ART module has been been installed, a single boot image for the entire
@@ -413,37 +347,28 @@
       PLOG(ERROR) << "Minimal boot image check failed, could not stat: " << boot_image_filename;
     }
   }
-
-  // Boot image consists of three parts:
+  // Boot image consists of two parts:
   //  - the primary boot image (contains the Core Libraries)
-  //  - the boot image framework extension (contains framework libraries)
-  //  - the boot image mainline extension (contains mainline framework libraries)
-  // Typically "/system/framework/boot.art!/apex/com.android.art/etc/boot-image.prof:
-  // /system/framework/boot-framework.art!/system/etc/boot-image.prof:
-  // /system/framework/boot-framework-adservices.art".
-
-  std::string location = StringPrintf("%s/%s.art!%s/%s:%s/framework/%s-framework.art!%s/%s",
-                                      GetPrebuiltPrimaryBootImageDir(android_root).c_str(),
-                                      kBootImageStem,
-                                      kAndroidArtApexDefaultPath,
-                                      kEtcBootImageProf,
-                                      android_root.c_str(),
-                                      kBootImageStem,
-                                      android_root.c_str(),
-                                      kEtcBootImageProf);
-  if (!MaybeAppendBootImageMainlineExtension(android_root, &location, error_msg)) {
-    return "";
-  }
-  return location;
+  //  - the boot image extensions (contains framework libraries)
+  // Typically "/apex/com.android.art/javalib/boot.art!/apex/com.android.art/etc/boot-image.prof:
+  // /system/framework/boot-framework.art!/system/etc/boot-image.prof".
+  return StringPrintf("%s/%s.art!%s/%s:%s/framework/%s-framework.art!%s/%s",
+                      GetPrebuiltPrimaryBootImageDir(android_root).c_str(),
+                      kBootImageStem,
+                      kAndroidArtApexDefaultPath,
+                      kEtcBootImageProf,
+                      android_root.c_str(),
+                      kBootImageStem,
+                      android_root.c_str(),
+                      kEtcBootImageProf);
 }
 
-std::string GetDefaultBootImageLocation(const std::string& android_root,
-                                        bool deny_art_apex_data_files) {
-  std::string error_msg;
-  std::string location =
-      GetDefaultBootImageLocationSafe(android_root, deny_art_apex_data_files, &error_msg);
-  CHECK(!location.empty()) << error_msg;
-  return location;
+std::string GetDefaultBootImageLocation(std::string* error_msg) {
+  std::string android_root = GetAndroidRootSafe(error_msg);
+  if (android_root.empty()) {
+    return "";
+  }
+  return GetDefaultBootImageLocation(android_root, /*deny_art_apex_data_files=*/false);
 }
 
 std::string GetJitZygoteBootImageLocation() {
diff --git a/libartbase/base/file_utils.h b/libartbase/base/file_utils.h
index 408163f..f539f5f 100644
--- a/libartbase/base/file_utils.h
+++ b/libartbase/base/file_utils.h
@@ -78,15 +78,11 @@
 // generated at build time).
 std::string GetPrebuiltPrimaryBootImageDir();
 
-// Returns the default boot image location, based on the passed `android_root`.
-// Returns an empty string if an error occurs.
-// The default boot image location can only be used with the default bootclasspath (the value of the
-// BOOTCLASSPATH environment variable).
-std::string GetDefaultBootImageLocationSafe(const std::string& android_root,
-                                            bool deny_art_apex_data_files,
-                                            std::string* error_msg);
+// Returns the default boot image location (ANDROID_ROOT/framework/boot.art).
+// Returns an empty string if ANDROID_ROOT is not set.
+std::string GetDefaultBootImageLocation(std::string* error_msg);
 
-// Same as above, but fails if an error occurs.
+// Returns the default boot image location, based on the passed `android_root`.
 std::string GetDefaultBootImageLocation(const std::string& android_root,
                                         bool deny_art_apex_data_files);
 
diff --git a/test/dexpreopt/dexpreopt_test.cc b/test/dexpreopt/dexpreopt_test.cc
index 3fb2730..55593ea 100644
--- a/test/dexpreopt/dexpreopt_test.cc
+++ b/test/dexpreopt/dexpreopt_test.cc
@@ -46,7 +46,7 @@
 
 namespace art {
 
-using ::testing::IsSupersetOf;
+using ::testing::IsSubsetOf;
 
 constexpr const char* kZygote32 = "zygote";
 constexpr const char* kZygote64 = "zygote64";
@@ -95,9 +95,9 @@
 }
 
 android::base::Result<std::vector<std::string>> GetZygoteExpectedArtifacts(InstructionSet isa) {
-  std::vector<std::string> jars = GetListFromEnv("BOOTCLASSPATH");
+  std::vector<std::string> jars = GetListFromEnv("DEX2OATBOOTCLASSPATH");
   if (jars.empty()) {
-    return Errorf("Environment variable `BOOTCLASSPATH` is not defined or empty");
+    return Errorf("Environment variable `DEX2OATBOOTCLASSPATH` is not defined or empty");
   }
   std::string art_root = GetArtRoot();
   std::string android_root = GetAndroidRoot();
@@ -218,7 +218,7 @@
         GetZygoteMappedOatFiles(zygote_name);
     ASSERT_RESULT_OK(mapped_oat_files);
 
-    EXPECT_THAT(mapped_oat_files.value(), IsSupersetOf(expected_artifacts.value()));
+    EXPECT_THAT(expected_artifacts.value(), IsSubsetOf(mapped_oat_files.value()));
   }
 }
 
@@ -236,7 +236,7 @@
       GetSystemServerArtifactsMappedOdexes();
   ASSERT_RESULT_OK(mapped_odexes);
 
-  EXPECT_THAT(mapped_odexes.value(), IsSupersetOf(expected_artifacts.value()));
+  EXPECT_THAT(expected_artifacts.value(), IsSubsetOf(mapped_odexes.value()));
 }
 
 }  // namespace art