diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index e407d6a..1f3f338 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -1152,11 +1152,3 @@
 fun Project.allInternalDependencies(): List<ThirdPartyDependency> {
   return allDependencies().filter { x -> x.type == DependencyType.X20 }
 }
-
-fun extractClassesPaths(prefix: String, vararg paths: String): String {
-  val result: MutableList<String> = ArrayList()
-  paths.forEach { it ->
-    result.addAll(it.split(File.pathSeparator).filter { it.contains("${prefix}build/classes") })
-  }
-  return result.joinToString(File.pathSeparator)
-}
diff --git a/d8_r8/main/build.gradle.kts b/d8_r8/main/build.gradle.kts
index 595726d..989b99a 100644
--- a/d8_r8/main/build.gradle.kts
+++ b/d8_r8/main/build.gradle.kts
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import java.net.URI
+import java.nio.file.Path
 import java.nio.file.Paths
+import kotlin.io.path.exists
 import java.nio.file.Files.readString
 import net.ltgt.gradle.errorprone.errorprone
 import org.gradle.api.artifacts.ModuleVersionIdentifier
@@ -87,9 +89,8 @@
   }
 }
 
-val assistantJarTask = projectTask("assistant", "jar")
 val keepAnnoJarTask = projectTask("keepanno", "jar")
-val keepAnnoAndroidXAnnotationsJar = projectTask("keepanno", "keepAnnoAndroidXAnnotationsJar")
+val assistantJarTask = projectTask("assistant", "jar")
 val resourceShrinkerJarTask = projectTask("resourceshrinker", "jar")
 val resourceShrinkerDepsTask = projectTask("resourceshrinker", "depsJar")
 
@@ -291,10 +292,8 @@
 val r8WithRelocatedDeps by registering(Exec::class) {
     dependsOn(depsJar)
     dependsOn(swissArmyKnifeWithoutLicense)
-    dependsOn(keepAnnoAndroidXAnnotationsJar)
-    val swissArmy = swissArmyKnifeWithoutLicense.get().outputs.files.singleFile
-    val deps = depsJar.get().outputs.files.singleFile
-    val androidXAnnotationsJar = keepAnnoAndroidXAnnotationsJar.outputs.files.singleFile
+    val swissArmy = swissArmyKnifeWithoutLicense.get().outputs.getFiles().getSingleFile()
+    val deps = depsJar.get().outputs.files.getSingleFile()
     inputs.files(listOf(swissArmy, deps))
     val output = getRoot().resolveAll("build", "libs", "r8.jar")
     outputs.file(output)
@@ -306,8 +305,6 @@
              "$swissArmy",
              "--input",
              "$deps",
-             "--input",
-             "$androidXAnnotationsJar",
              "--output",
              "$output",
              // Add identity mapping to enforce no relocation of things already in package
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index 564d0ea..3da29df 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -22,7 +22,6 @@
 dependencies { }
 
 val keepAnnoCompileTask = projectTask("keepanno", "compileJava")
-val keepAnnoCompileKotlinTask = projectTask("keepanno", "compileKotlin")
 val keepAnnoSourcesTask = projectTask("keepanno", "sourcesJar")
 val assistantJarTask = projectTask("assistant", "jar")
 val mainDepsJarTask = projectTask("main", "depsJar")
@@ -432,10 +431,7 @@
 
     systemProperty(
       "BUILD_PROP_KEEPANNO_RUNTIME_PATH",
-      extractClassesPaths(
-        "keepanno/",
-        keepAnnoCompileTask.outputs.files.asPath,
-        keepAnnoCompileKotlinTask.outputs.files.asPath))
+      keepAnnoCompileTask.getOutputs().getFiles().getAsPath().split(File.pathSeparator)[0])
     systemProperty("EXAMPLES_JAVA_11_JAVAC_BUILD_DIR",
             getRoot().resolveAll("build", "test", "examplesJava11", "classes"))
     systemProperty("BUILD_PROP_R8_RUNTIME_PATH", r8LibJar)
diff --git a/d8_r8/test_modules/tests_bootstrap/build.gradle.kts b/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
index 18e0f2b..7b900dc 100644
--- a/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
+++ b/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
@@ -33,7 +33,6 @@
 
 val keepAnnoJarTask = projectTask("keepanno", "jar")
 val keepAnnoCompileTask = projectTask("keepanno", "compileJava")
-val keepAnnoCompileKotlinTask = projectTask("keepanno", "compileKotlin")
 val mainR8RelocatedTask = projectTask("main", "r8WithRelocatedDeps")
 val resourceShrinkerJavaCompileTask = projectTask("resourceshrinker", "compileJava")
 val resourceShrinkerKotlinCompileTask = projectTask("resourceshrinker", "compileKotlin")
@@ -81,10 +80,7 @@
                    testbaseJavaCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
     systemProperty(
       "BUILD_PROP_KEEPANNO_RUNTIME_PATH",
-      extractClassesPaths(
-        "keepanno/",
-        keepAnnoCompileTask.outputs.files.asPath,
-        keepAnnoCompileKotlinTask.outputs.files.asPath))
+      keepAnnoCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
     systemProperty("R8_WITH_RELOCATED_DEPS", mainR8RelocatedTask.outputs.files.singleFile)
     systemProperty("BUILD_PROP_R8_RUNTIME_PATH", mainR8RelocatedTask.outputs.files.singleFile)
   }
diff --git a/d8_r8/test_modules/tests_java_8/build.gradle.kts b/d8_r8/test_modules/tests_java_8/build.gradle.kts
index 7637a41..4dfd63e 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -39,7 +39,6 @@
 val keepAnnoJarTask = projectTask("keepanno", "jar")
 val keepAnnoCompileTask = projectTask("keepanno", "compileJava")
 val assistantCompileTask = projectTask("assistant", "compileJava")
-val keepAnnoCompileKotlinTask = projectTask("keepanno", "compileKotlin")
 val mainCompileTask = projectTask("main", "compileJava")
 val mainDepsJarTask = projectTask("main", "depsJar")
 val resourceShrinkerJavaCompileTask = projectTask("resourceshrinker", "compileJava")
@@ -137,13 +136,11 @@
     systemProperty("TEST_DATA_LOCATION",
                    layout.buildDirectory.dir("classes/java/test").get().toString())
     systemProperty("TESTBASE_DATA_LOCATION",
-                   testbaseJavaCompileTask.outputs.files.asPath.split(File.pathSeparator)[0])
+                   testbaseJavaCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
+
     systemProperty(
       "BUILD_PROP_KEEPANNO_RUNTIME_PATH",
-      extractClassesPaths(
-        "keepanno/",
-        keepAnnoCompileTask.outputs.files.asPath,
-        keepAnnoCompileKotlinTask.outputs.files.asPath))
+      keepAnnoCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
     // This path is set when compiling examples jar task in DependenciesPlugin.
     systemProperty("EXAMPLES_JAVA_11_JAVAC_BUILD_DIR",
                     getRoot().resolveAll("build", "test", "examplesJava11", "classes"))
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestBuilder.java b/src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestBuilder.java
index 1c65221..3598e51 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestBuilder.java
@@ -4,11 +4,8 @@
 
 package com.android.tools.r8.keepanno;
 
-import static com.android.tools.r8.R8TestBuilder.KeepAnnotationLibrary.ANDROIDX;
 
 import com.android.tools.r8.ExternalR8TestBuilder;
-import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
-import com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion;
 import com.android.tools.r8.ProguardTestBuilder;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.R8PartialTestBuilder;
@@ -466,15 +463,8 @@
         TemporaryFolder temp)
         throws IOException {
       super(params);
-      KotlinCompiler kotlinc = new KotlinCompiler(KotlinCompilerVersion.MAX_SUPPORTED_VERSION);
       builder =
           TestBase.testForProguard(KeepAnnoTestUtils.PG_VERSION, temp)
-              .applyIf(
-                  keepAnnotationLibrary == ANDROIDX,
-                  b ->
-                      b.addDefaultRuntimeLibrary(parameters())
-                          .addLibraryFiles(
-                              kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar()))
               .addProgramFiles(KeepAnnoTestUtils.getKeepAnnoLib(temp, keepAnnotationLibrary))
               .setMinApi(parameters());
     }
diff --git a/src/test/testbase/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java b/src/test/testbase/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
index 53f0924..2fc4c98 100644
--- a/src/test/testbase/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
+++ b/src/test/testbase/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
@@ -43,25 +43,23 @@
       TemporaryFolder temp, KeepAnnotationLibrary keepAnnotationLibrary) throws IOException {
     Path archive = temp.newFolder().toPath().resolve("keepanno.jar");
     ArchiveConsumer consumer = new ArchiveConsumer(archive);
-    // TODO(b/397387189): Find a better way to locate the keep annotation classes in tests.
     for (Path root : ToolHelper.getBuildPropKeepAnnoRuntimePath()) {
       String descriptorPrefix =
           (keepAnnotationLibrary == ANDROIDX ? DESCRIPTOR_PREFIX : DESCRIPTOR_LEGACY_PREFIX);
       Path annoDir = root.resolve(descriptorPrefix.substring(1, descriptorPrefix.length() - 1));
       assertTrue(Files.isDirectory(root));
-      if (Files.isDirectory(annoDir)) {
-        try (Stream<Path> paths = Files.list(annoDir)) {
-          paths.forEach(
-              p -> {
-                if (FileUtils.isClassFile(p)) {
-                  byte[] data = FileUtils.uncheckedReadAllBytes(p);
-                  String fileName = p.getFileName().toString();
-                  String className = fileName.substring(0, fileName.lastIndexOf('.'));
-                  String desc = descriptorPrefix + className + ";";
-                  consumer.accept(ByteDataView.of(data), desc, null);
-                }
-              });
-        }
+      assertTrue(Files.isDirectory(annoDir));
+      try (Stream<Path> paths = Files.list(annoDir)) {
+        paths.forEach(
+            p -> {
+              if (FileUtils.isClassFile(p)) {
+                byte[] data = FileUtils.uncheckedReadAllBytes(p);
+                String fileName = p.getFileName().toString();
+                String className = fileName.substring(0, fileName.lastIndexOf('.'));
+                String desc = descriptorPrefix + className + ";";
+                consumer.accept(ByteDataView.of(data), desc, null);
+              }
+            });
       }
     }
     consumer.finished(null);
