diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index 98a2963..27b5cf4 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -267,14 +267,6 @@
       return False, '%s is a directory'
     return True, ''
 
-  def is_dir(self, path):
-    fs_object = self._provider.get(path)
-    if fs_object is None:
-      return False, 'Could not find %s'
-    if not fs_object.is_dir:
-      return False, '%s is not a directory'
-    return True, ''
-
   def check_file(self, path):
     ok, msg = self.is_file(path)
     if not ok:
@@ -302,30 +294,27 @@
       self.fail('%s is not a symlink', path)
     self._expected_file_globs.add(path)
 
-  def arch_dirs_for_path(self, path):
-    # Look for target-specific subdirectories for the given directory path.
-    # This is needed because the list of build targets is not propagated
-    # to this script.
-    #
-    # TODO: Pass build target information to this script and fix all places
-    # where this function in used (or similar workarounds).
-    dirs = []
-    for arch in ARCHS:
-      dir = '%s/%s' % (path, arch)
-      found, _ = self.is_dir(dir)
-      if found:
-        dirs.append(dir)
-    return dirs
-
   def check_art_test_executable(self, filename):
-    dirs = self.arch_dirs_for_path(ART_TEST_DIR)
-    if not dirs:
+    # This is a simplistic implementation, as we declare victory as soon as the
+    # test binary is found for one of the supported (not built) architectures.
+    # Ideally we would propagate the built architectures from the build system
+    # to this script and require test binaries for all of them to be present.
+    # Note that this behavior is not specific to this method: there are other
+    # places in this script where we rely on this simplified strategy.
+    #
+    # TODO: Implement the suggestion above (here and in other places in this
+    # script).
+    test_found = False
+    for arch in ARCHS:
+      test_path = '%s/%s/%s' % (ART_TEST_DIR, arch, filename)
+      test_is_file, _ = self.is_file(test_path)
+      if test_is_file:
+        test_found = True
+        self._expected_file_globs.add(test_path)
+        if not self._provider.get(test_path).is_exec:
+          self.fail('%s is not executable', test_path)
+    if not test_found:
       self.fail('ART test binary missing: %s', filename)
-    for dir in dirs:
-      test_path = '%s/%s' % (dir, filename)
-      self._expected_file_globs.add(test_path)
-      if not self._provider.get(test_path).is_exec:
-        self.fail('%s is not executable', test_path)
 
   def check_single_library(self, filename):
     lib_path = 'lib/%s' % filename
@@ -339,14 +328,6 @@
     if not lib_is_file and not lib64_is_file:
       self.fail('Library missing: %s', filename)
 
-  def check_dexpreopt(self, basename):
-    dirs = self.arch_dirs_for_path('javalib')
-    if not dirs:
-      self.fail('Could not find javalib directory for any arch.')
-    for dir in dirs:
-      for ext in ['art', 'oat', 'vdex']:
-        self.check_file('%s/%s.%s' % (dir, basename, ext))
-
   def check_java_library(self, basename):
     return self.check_file('javalib/%s.jar' % basename)
 
@@ -542,13 +523,6 @@
     self._checker.check_optional_native_library('libclang_rt.hwasan*')
     self._checker.check_optional_native_library('libclang_rt.ubsan*')
 
-    # Check dexpreopt files for libcore bootclasspath jars
-    self._checker.check_dexpreopt('boot')
-    self._checker.check_dexpreopt('boot-apache-xml')
-    self._checker.check_dexpreopt('boot-bouncycastle')
-    self._checker.check_dexpreopt('boot-core-icu4j')
-    self._checker.check_dexpreopt('boot-core-libart')
-    self._checker.check_dexpreopt('boot-okhttp')
 
 class ReleaseTargetChecker:
   def __init__(self, checker):
