diff --git a/xsd/halManifest/vts/ValidateHalManifest.cpp b/xsd/halManifest/vts/ValidateHalManifest.cpp
index 96472c7..6254b44 100644
--- a/xsd/halManifest/vts/ValidateHalManifest.cpp
+++ b/xsd/halManifest/vts/ValidateHalManifest.cpp
@@ -15,15 +15,14 @@
  */
 
 #include <dirent.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <unistd.h>
 #include <string>
 
 #include <android-base/properties.h>
+#include <android-base/strings.h>
 #include "utility/ValidateXml.h"
 
+using std::string_literals::operator""s;
+
 static void get_files_in_dirs(const char* dir_path, std::vector<std::string>& files) {
     DIR* d;
     struct dirent* de;
@@ -43,7 +42,7 @@
 }
 
 TEST(CheckConfig, halManifestValidation) {
-    if (android::base::GetIntProperty("ro.product.first_api_level", 0) <= 28) {
+    if (android::base::GetIntProperty("ro.product.first_api_level", INT64_MAX) <= 28) {
         GTEST_SKIP();
     }
 
@@ -51,17 +50,30 @@
                    "Verify that the hal manifest file "
                    "is valid according to the schema");
 
-    EXPECT_ONE_VALID_XML_MULTIPLE_LOCATIONS("manifest.xml", {"/vendor/etc/vintf/"},
-                                            "/data/local/tmp/hal_manifest.xsd");
+    constexpr const char* xsd = "/data/local/tmp/hal_manifest.xsd";
 
-    std::vector<const char*> locations = {"/vendor/etc/vintf/manifest", "/odm/etc/vintf"};
-
-    for (const char* dir_path : locations) {
+    // There may be compatibility matrices in .../etc/vintf. Manifests are only loaded from
+    // manifest.xml and manifest_*.xml, so only check those.
+    std::vector<const char*> vintf_locations = {"/vendor/etc/vintf", "/odm/etc/vintf"};
+    for (const char* dir_path : vintf_locations) {
         std::vector<std::string> files;
         get_files_in_dirs(dir_path, files);
         for (std::string file_name : files) {
-            EXPECT_ONE_VALID_XML_MULTIPLE_LOCATIONS(file_name.c_str(), {dir_path},
-                                                    "/data/local/tmp/hal_manifest.xsd");
+            if (android::base::StartsWith(file_name, "manifest")) {
+                EXPECT_VALID_XML((dir_path + "/"s + file_name).c_str(), xsd);
+            }
+        }
+    }
+
+    // .../etc/vintf/manifest should only contain manifest fragments, so all of them must match the
+    // schema.
+    std::vector<const char*> fragment_locations = {"/vendor/etc/vintf/manifest",
+                                                   "/odm/etc/vintf/manifest"};
+    for (const char* dir_path : fragment_locations) {
+        std::vector<std::string> files;
+        get_files_in_dirs(dir_path, files);
+        for (std::string file_name : files) {
+            EXPECT_VALID_XML((dir_path + "/"s + file_name).c_str(), xsd);
         }
     }
 }
