diff --git a/test/944-transform-classloaders/classloader.cc b/test/944-transform-classloaders/classloader.cc
deleted file mode 100644
index 766597e..0000000
--- a/test/944-transform-classloaders/classloader.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "android-base/macros.h"
-#include "jni.h"
-#include "jvmti.h"
-#include "mirror/class-inl.h"
-#include "scoped_local_ref.h"
-
-// Test infrastructure
-#include "test_env.h"
-
-namespace art {
-namespace Test944TransformClassloaders {
-
-extern "C" JNIEXPORT jlong JNICALL Java_art_Test944_getDexFilePointer(JNIEnv* env, jclass, jclass klass) {
-  if (Runtime::Current() == nullptr) {
-    env->ThrowNew(env->FindClass("java/lang/Exception"),
-                  "We do not seem to be running in ART! Unable to get dex file.");
-    return 0;
-  }
-  ScopedObjectAccess soa(env);
-  // This sequence of casts must be the same as those done in
-  // runtime/native/dalvik_system_DexFile.cc in order to ensure that we get the same results.
-  return static_cast<jlong>(reinterpret_cast<uintptr_t>(
-      &soa.Decode<mirror::Class>(klass)->GetDexFile()));
-}
-
-}  // namespace Test944TransformClassloaders
-}  // namespace art
diff --git a/test/944-transform-classloaders/src/art/Test944.java b/test/944-transform-classloaders/src/art/Test944.java
index 7aa9131..e7747c2 100644
--- a/test/944-transform-classloaders/src/art/Test944.java
+++ b/test/944-transform-classloaders/src/art/Test944.java
@@ -231,8 +231,6 @@
   }
 
   private static void doTest() throws Exception {
-    art.Main.bindAgentJNIForClass(Test944.class);
-
     Transform t = new Transform();
     Transform2 t2 = new Transform2();
 
@@ -270,7 +268,29 @@
   }
 
   // Gets the 'long' (really a native pointer) that is stored in the ClassLoader representing the
-  // DexFile a class is loaded from. This is converted from the DexFile* in the same way it is done
-  // in runtime/native/dalvik_system_DexFile.cc
-  private static native long getDexFilePointer(Class<?> target);
+  // DexFile a class is loaded from. This is plucked out of the internal DexCache object associated
+  // with the class.
+  private static long getDexFilePointer(Class<?> target) throws Exception {
+    // If all the android BCP classes were available when compiling this test and access checks
+    // weren't a thing this function would be written as follows:
+    //
+    // java.lang.DexCache dexCacheObject = target.dexCache;
+    // if (dexCacheObject == null) {
+    //   return 0;
+    // }
+    // return dexCacheObject.dexFile;
+    Field dexCacheField = Class.class.getDeclaredField("dexCache");
+
+    Class<?> dexCacheClass = Class.forName("java.lang.DexCache");
+    Field dexFileField = dexCacheClass.getDeclaredField("dexFile");
+
+    AccessibleObject.setAccessible(new AccessibleObject[] { dexCacheField, dexFileField }, true);
+
+    Object dexCacheObject = dexCacheField.get(target);
+    if (dexCacheObject == null) {
+      return 0;
+    }
+    checkIsInstance(dexCacheClass, dexCacheObject);
+    return dexFileField.getLong(dexCacheObject);
+  }
 }
diff --git a/test/Android.bp b/test/Android.bp
index 033c4fc..7cf49e2 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -295,7 +295,6 @@
         "909-attach-agent/attach.cc",
         "912-classes/classes.cc",
         "936-search-onload/search_onload.cc",
-        "944-transform-classloaders/classloader.cc",
         "945-obsolete-native/obsolete_native.cc",
         "983-source-transform-verify/source_transform.cc",
         "984-obsolete-invoke/obsolete_invoke.cc",
