diff --git a/.gitignore b/.gitignore
index bb6648e..6b66c27 100644
--- a/.gitignore
+++ b/.gitignore
@@ -328,6 +328,8 @@
 tools/*/host/art-13.0.0.tar.gz
 tools/*/host/art-14.0.0-beta3
 tools/*/host/art-14.0.0-beta3.tar.gz
+tools/*/host/art-15.0.0-beta2
+tools/*/host/art-15.0.0-beta2.tar.gz
 tools/*/host/art-master
 tools/*/host/art-master.tar.gz
 tools/*/art.tar.gz
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index bdbd79e..68a50f3 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -704,7 +704,8 @@
     "lib-v31",
     "lib-v32",
     "lib-v33",
-    "lib-v34"
+    "lib-v34",
+    "lib-v35"
   ).map(::getThirdPartyAndroidJar)
 }
 
@@ -718,6 +719,7 @@
 fun getThirdPartyAndroidVms() : List<ThirdPartyDependency> {
   return listOf(
     listOf("host", "art-master"),
+    listOf("host", "art-15.0.0-beta2"),
     listOf("host", "art-14.0.0-beta3"),
     listOf("host", "art-13.0.0"),
     listOf("host", "art-12.0.0-beta4"),
diff --git a/scripts/add-android-jar.sh b/scripts/add-android-jar.sh
index e6ba2c2..e2fe239 100755
--- a/scripts/add-android-jar.sh
+++ b/scripts/add-android-jar.sh
@@ -16,8 +16,8 @@
 SDK_HOME=$HOME/Android/Sdk
 
 # Modify these to match the SDK android.jar to add.
-SDK_DIR_NAME=android-UpsideDownCake
-SDK_VERSION=34
+SDK_DIR_NAME=android-VanillaIceCream
+SDK_VERSION=35
 
 SDK_DIR=$SDK_HOME/platforms/$SDK_DIR_NAME
 THIRD_PARTY_ANDROID_JAR=third_party/android_jar
diff --git a/scripts/update-host-art.sh b/scripts/update-host-art.sh
index ef7670b..a84c946 100755
--- a/scripts/update-host-art.sh
+++ b/scripts/update-host-art.sh
@@ -180,6 +180,7 @@
 if [ -f $DEST/product/$ANDROID_PRODUCT/system/framework/boot.vdex ]; then
   for VDEXFILE in $DEST/product/$ANDROID_PRODUCT/system/framework/*.vdex; do
     VDEXNAME=$(basename ${VDEXFILE});
+    # Maybe remove arm here.
     for ARCH in arm arm64; do
       rm $DEST/product/$ANDROID_PRODUCT/system/framework/$ARCH/${VDEXNAME};
       # This relative link command will create a symbolic link of the form
diff --git a/src/main/java/com/android/tools/r8/androidapi/CovariantReturnTypeMethods.java b/src/main/java/com/android/tools/r8/androidapi/CovariantReturnTypeMethods.java
index 077c1be..ddbe9c5 100644
--- a/src/main/java/com/android/tools/r8/androidapi/CovariantReturnTypeMethods.java
+++ b/src/main/java/com/android/tools/r8/androidapi/CovariantReturnTypeMethods.java
@@ -91,6 +91,11 @@
             "rewind"));
     consumer.accept(
         factory.createMethod(
+            factory.createType("Ljava/nio/DirectByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "compact"));
+    consumer.accept(
+        factory.createMethod(
             factory.createType("Ljava/nio/DoubleBuffer;"),
             factory.createProto(factory.createType("Ljava/nio/DoubleBuffer;")),
             "clear"));
@@ -239,6 +244,105 @@
             "rewind"));
     consumer.accept(
         factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
+            "clear"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "clear"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "compact"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "duplicate"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "duplicate"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
+            "flip"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "flip"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(
+                factory.createType("Ljava/nio/ByteBuffer;"), factory.createType("I")),
+            "limit"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(
+                factory.createType("Ljava/nio/MappedByteBuffer;"), factory.createType("I")),
+            "limit"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
+            "mark"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "mark"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(
+                factory.createType("Ljava/nio/ByteBuffer;"), factory.createType("I")),
+            "position"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(
+                factory.createType("Ljava/nio/MappedByteBuffer;"), factory.createType("I")),
+            "position"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
+            "reset"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "reset"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/ByteBuffer;")),
+            "rewind"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "rewind"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "slice"));
+    consumer.accept(
+        factory.createMethod(
+            factory.createType("Ljava/nio/MappedByteBuffer;"),
+            factory.createProto(factory.createType("Ljava/nio/MappedByteBuffer;")),
+            "slice"));
+    consumer.accept(
+        factory.createMethod(
             factory.createType("Ljava/nio/ShortBuffer;"),
             factory.createProto(factory.createType("Ljava/nio/ShortBuffer;")),
             "clear"));
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
index 05c0b45..411c87e 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
@@ -44,13 +44,14 @@
   Sv2(32),
   T(33),
   U(34),
-  MAIN(35); // API level for main is tentative.
+  V(35),
+  MAIN(36); // API level for main is tentative.
 
   // When updating LATEST and a new version goes public, add a new api-versions.xml to third_party
   // and update the version and generated jar in AndroidApiDatabaseBuilderGeneratorTest. Together
   // with that update third_party/android_jar/libcore_latest/core-oj.jar and run
   // GenerateCovariantReturnTypeMethodsTest.
-  public static final AndroidApiLevel LATEST = U;
+  public static final AndroidApiLevel LATEST = V;
 
   public static final AndroidApiLevel API_DATABASE_LEVEL = LATEST;
 
@@ -114,7 +115,7 @@
 
   public static AndroidApiLevel getAndroidApiLevel(int apiLevel) {
     assert apiLevel > 0;
-    assert U == LATEST; // This has to be updated when we add new api levels.
+    assert V == LATEST; // This has to be updated when we add new api levels.
     assert UNKNOWN.isGreaterThan(LATEST);
     switch (apiLevel) {
       case 1:
@@ -185,6 +186,8 @@
         return T;
       case 34:
         return U;
+      case 35:
+        return V;
       default:
         return MAIN;
     }
diff --git a/src/main/java/com/android/tools/r8/utils/DexVersion.java b/src/main/java/com/android/tools/r8/utils/DexVersion.java
index dc62cf4..f3e1670 100644
--- a/src/main/java/com/android/tools/r8/utils/DexVersion.java
+++ b/src/main/java/com/android/tools/r8/utils/DexVersion.java
@@ -68,6 +68,7 @@
     switch (androidApiLevel) {
         // MAIN is an unknown higher api version we therefore choose the highest known version.
       case MAIN:
+      case V:
       case U:
       case T:
       case Sv2:
diff --git a/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java b/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
index 228536e..17e87f0 100644
--- a/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
@@ -168,7 +168,19 @@
                   StringUtils.lines(
                       "java.lang.NullPointerException: Attempt to read from field 'byte[]"
                           + " Test.a' on a null object reference in method 'int"
-                          + " TestObject.a(Test, Test)'")));
+                          + " TestObject.a(Test, Test)'")),
+          Version.V15_0_0,
+          ImmutableMap.of(
+              "bad-codegen",
+              StringUtils.lines(
+                  "java.lang.NullPointerException: Attempt to read from field 'Test Test.a'"
+                      + " on a null object reference in method 'Test TestObject.a(Test,"
+                      + " Test, Test, Test, boolean)'"),
+              "type-confusion-regression3",
+              StringUtils.lines(
+                  "java.lang.NullPointerException: Attempt to read from field 'byte[]"
+                      + " Test.a' on a null object reference in method 'int"
+                      + " TestObject.a(Test, Test)'")));
 
   // Tests where the input fails with a verification error on Dalvik instead of the
   // expected runtime exception.
diff --git a/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java b/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
index 5826a9a..7c062bd 100644
--- a/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
@@ -22,7 +22,11 @@
 import com.android.tools.r8.cfmethodgeneration.MethodGenerationBase;
 import com.android.tools.r8.graph.DexAnnotation;
 import com.android.tools.r8.graph.DexAnnotationElement;
+import com.android.tools.r8.graph.DexEncodedAnnotation;
 import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexValue;
+import com.android.tools.r8.graph.DexValue.DexValueAnnotation;
+import com.android.tools.r8.graph.DexValue.DexValueArray;
 import com.android.tools.r8.graph.DexValue.DexValueType;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.MethodReference;
@@ -68,7 +72,7 @@
       Paths.get(ToolHelper.MAIN_SOURCE_DIR)
           .resolve(PACKAGE_NAME.replace('.', '/'))
           .resolve(CLASS_NAME + ".java");
-  private static final AndroidApiLevel GENERATED_FOR_API_LEVEL = AndroidApiLevel.U;
+  private static final AndroidApiLevel GENERATED_FOR_API_LEVEL = AndroidApiLevel.V;
 
   @Parameter public TestParameters parameters;
 
@@ -207,15 +211,9 @@
                           isCovariantReturnTypeAnnotation(annotation.annotation, factory));
               if (!covariantAnnotations.isEmpty()) {
                 MethodReference methodReference = method.asMethodReference();
-                ClassReference holder = clazz.getOriginalReference();
                 for (DexAnnotation covariantAnnotation : covariantAnnotations) {
-                  if (covariantAnnotation.annotation.type
-                      == factory.annotationCovariantReturnType) {
-                    createCovariantMethodReference(
-                        methodReference, covariantAnnotation, methodReferenceMap);
-                  } else {
-                    fail("There are no such annotations present in libcore");
-                  }
+                  createCovariantMethodReference(
+                      factory, methodReference, covariantAnnotation.annotation, methodReferenceMap);
                 }
               }
             });
@@ -224,25 +222,51 @@
     }
 
     private static void createCovariantMethodReference(
+        DexItemFactory factory,
         MethodReference methodReference,
-        DexAnnotation covariantAnnotation,
+        DexEncodedAnnotation covariantAnnotation,
         Map<ClassReference, List<MethodReferenceWithApiLevel>> methodReferenceMap) {
-      DexValueType newReturnType =
-          covariantAnnotation.annotation.getElement(0).getValue().asDexValueType();
-      DexAnnotationElement element = covariantAnnotation.annotation.getElement(1);
-      assert element.name.toString().equals("presentAfter");
-      AndroidApiLevel apiLevel =
-          AndroidApiLevel.getAndroidApiLevel(element.getValue().asDexValueInt().value);
-      methodReferenceMap
-          .computeIfAbsent(methodReference.getHolderClass(), ignoreKey(ArrayList::new))
-          .add(
-              new MethodReferenceWithApiLevel(
-                  Reference.method(
-                      methodReference.getHolderClass(),
-                      methodReference.getMethodName(),
-                      methodReference.getFormalTypes(),
-                      newReturnType.value.asClassReference()),
-                  apiLevel));
+      if (covariantAnnotation.type == factory.annotationCovariantReturnType) {
+        DexAnnotationElement returnTypeElement = covariantAnnotation.getElement(0);
+        assert returnTypeElement.name.toString().equals("returnType");
+        DexValueType newReturnType = returnTypeElement.getValue().asDexValueType();
+        DexAnnotationElement presentAfterElement = covariantAnnotation.getElement(1);
+        assert presentAfterElement.name.toString().equals("presentAfter");
+        AndroidApiLevel apiLevel =
+            AndroidApiLevel.getAndroidApiLevel(
+                presentAfterElement.getValue().asDexValueInt().value);
+        methodReferenceMap
+            .computeIfAbsent(methodReference.getHolderClass(), ignoreKey(ArrayList::new))
+            .add(
+                new MethodReferenceWithApiLevel(
+                    Reference.method(
+                        methodReference.getHolderClass(),
+                        methodReference.getMethodName(),
+                        methodReference.getFormalTypes(),
+                        newReturnType.value.asClassReference()),
+                    apiLevel));
+      } else {
+        assert covariantAnnotation.type == factory.annotationCovariantReturnTypes;
+        DexAnnotationElement valuesElement = covariantAnnotation.getElement(0);
+        assert valuesElement.name.toString().equals("value");
+        DexValueArray array = valuesElement.value.asDexValueArray();
+        if (array == null) {
+          fail(
+              String.format(
+                  "Expected element \"value\" of CovariantReturnTypes annotation to "
+                      + "be an array (method: \"%s\", was: %s)",
+                  methodReference.toSourceString(),
+                  valuesElement.value.getClass().getCanonicalName()));
+        }
+
+        // Handle the inner dalvik.annotation.codegen.CovariantReturnType annotations recursively.
+        for (DexValue value : array.getValues()) {
+          assert value.isDexValueAnnotation();
+          DexValueAnnotation innerAnnotation = value.asDexValueAnnotation();
+          createCovariantMethodReference(
+              factory, methodReference, innerAnnotation.value, methodReferenceMap);
+        }
+      }
     }
 
     public void visitCovariantMethodsForHolder(
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
index 8605db0..ef3db54 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
@@ -110,9 +110,9 @@
                   methodReferences.forEach(field -> numberOfMethods.increment())));
         });
     // These numbers will change when updating api-versions.xml
-    assertEquals(5716, parsedApiClasses.size());
-    assertEquals(29609, numberOfFields.get());
-    assertEquals(44827, numberOfMethods.get());
+    assertEquals(5904, parsedApiClasses.size());
+    assertEquals(30073, numberOfFields.get());
+    assertEquals(46091, numberOfMethods.get());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
index 019a579..7617ca1 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
@@ -56,6 +56,10 @@
       removedTypeNames.add("com.android.internal.util.Predicate");
       removedTypeNames.add("android.adservices.AdServicesVersion");
     }
+    if (maxApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.V)) {
+      removedTypeNames.add("android.media.MediaDrm$HdcpLevel");
+      removedTypeNames.add("android.media.MediaDrm$SecurityLevel");
+    }
     return removedTypeNames;
   }
 
@@ -74,8 +78,9 @@
       if (!clazz.isPresent()) {
         if (!clazz.getOriginalTypeName().startsWith("android.test")
             && !clazz.getOriginalTypeName().startsWith("junit")) {
-          assert exemptionList.contains(type) || hasRemoved(node);
-          assert exemptionList.contains(type) || getRemoved(node).isLessThanOrEqualTo(maxApiLevel);
+          assert exemptionList.contains(type) || hasRemoved(node) : type;
+          assert exemptionList.contains(type) || getRemoved(node).isLessThanOrEqualTo(maxApiLevel)
+              : type;
           if (!hasRemoved(node)) {
             exemptionList.remove(type);
           }
diff --git a/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java b/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
index fbbadb0..a3fba21 100644
--- a/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
+++ b/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
@@ -130,7 +130,7 @@
       } else if (parameters.isDexRuntime()
           && parameters.asDexRuntime().getVersion().isNewerThan(Version.V9_0_0)) {
         // VMs between 9 and 13 segfault.
-        if (parameters.asDexRuntime().getVersion().isEqualTo(Version.V14_0_0)) {
+        if (parameters.asDexRuntime().getVersion().isNewerThanOrEqual(Version.V14_0_0)) {
           result.assertFailureWithOutputThatMatches(
               containsString("reverting to SIG_DFL handler for signal 11"));
         } else {
diff --git a/src/test/java/com/android/tools/r8/debuginfo/LocalVariableTableForParameterWithSignatureTest.java b/src/test/java/com/android/tools/r8/debuginfo/LocalVariableTableForParameterWithSignatureTest.java
index ecbe2e4..bf59b3b 100644
--- a/src/test/java/com/android/tools/r8/debuginfo/LocalVariableTableForParameterWithSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/debuginfo/LocalVariableTableForParameterWithSignatureTest.java
@@ -119,13 +119,14 @@
               assertTrue(hasParamValue);
               assertTrue(hasParamStringsWithSignature);
               if (parameters.isCfRuntime()
-                  || parameters.isDexRuntimeVersionOlderThanOrEqual(Version.V6_0_1)) {
-                // CF runtimes and the old DEX runtimes report the correct local variable table.
+                  || parameters.isDexRuntimeVersionOlderThanOrEqual(Version.V6_0_1)
+                  || parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V15_0_0)) {
+                // CF runtimes and some DEX runtimes report the correct local variable table.
                 // The variable table should be just the two parameters.
                 assertEquals(2, variableTable.size());
                 assertFalse(hasEmptyRange);
               } else {
-                // Newer ART runtimes report a variable with an empty range. That variable is the
+                // Some ART runtimes report a variable with an empty range. That variable is the
                 // parameter without a signature, e.g., List, and is ended immediately as a variable
                 // is started that also includes the signature, e.g., List<String>.
                 assertEquals(variableTable.toString(), 3, variableTable.size());
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeInterfaceTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeInterfaceTest.java
index 9c36e69..762d1df 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeInterfaceTest.java
@@ -77,7 +77,7 @@
   public void testD8() throws Exception {
     parameters.assumeDexRuntime();
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForD8()
         .addProgramClassFileData(
             dumpHost(),
@@ -112,7 +112,7 @@
   public void testD8WithClasspathAndMerge() throws Exception {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     Path host =
         testForD8()
@@ -200,7 +200,7 @@
   public void testD8WithoutMembersOnClasspath() {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     assertThrows(
         CompilationFailedException.class,
@@ -221,7 +221,7 @@
   public void testD8WithoutHostOnClasspath() {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     assertThrows(
         CompilationFailedException.class,
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSpecialTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSpecialTest.java
index b50b2f9..220f6c0 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSpecialTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSpecialTest.java
@@ -170,9 +170,9 @@
   @Test
   public void testD8DexWithNestSupport() throws Exception {
     parameters.assumeDexRuntime();
-    assumeTrue(parameters.getApiLevel().getLevel() >= 34);
+    assumeTrue(parameters.getApiLevel().getLevel() >= 35);
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForD8()
         .addProgramFiles(JDK17_JAR)
         .setMinApi(AndroidApiLevel.U)
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSuperTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSuperTest.java
index 36290f2..279b975 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSuperTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSuperTest.java
@@ -69,7 +69,7 @@
   public void testD8() throws Exception {
     parameters.assumeDexRuntime();
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForD8()
         .addProgramClassFileData(dumpHost(), dumpMember(), dumpSubMember())
         .setMinApi(parameters)
@@ -102,7 +102,7 @@
   public void testD8WithClasspathAndMerge() throws Exception {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     Path host =
         testForD8()
@@ -189,7 +189,7 @@
   public void testD8WithoutMembersOnClasspath() {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     assertThrows(
         CompilationFailedException.class,
@@ -210,7 +210,7 @@
   public void testD8WithoutHostOnClasspath() {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     assertThrows(
         CompilationFailedException.class,
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeVirtualTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeVirtualTest.java
index 9e2d0c0..8de9a22 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeVirtualTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeVirtualTest.java
@@ -69,7 +69,7 @@
   public void testD8() throws Exception {
     parameters.assumeDexRuntime();
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForD8()
         .addProgramClassFileData(dumpHost(), dumpMember1(), dumpMember2())
         .setMinApi(parameters)
@@ -102,7 +102,7 @@
   public void testD8WithClasspathAndMerge() throws Exception {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     Path host =
         testForD8()
@@ -189,7 +189,7 @@
   public void testD8WithoutMembersOnClasspath() {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     assertThrows(
         CompilationFailedException.class,
@@ -210,7 +210,7 @@
   public void testD8WithoutHostOnClasspath() {
     assumeTrue(parameters.isDexRuntime());
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
 
     assertThrows(
         CompilationFailedException.class,
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingFieldsTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingFieldsTest.java
index 4a1e82c..790498d 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingFieldsTest.java
@@ -81,7 +81,7 @@
     parameters.assumeR8TestParameters();
     assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForR8(parameters.getBackend())
         .addProgramClassFileData(
             dumpHost(ACC_PRIVATE), dumpMember1(ACC_PRIVATE), dumpMember2(ACC_PRIVATE))
@@ -99,7 +99,7 @@
     parameters.assumeR8TestParameters();
     assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForR8(parameters.getBackend())
         .addProgramClassFileData(
             dumpHost(ACC_PRIVATE), dumpMember1(ACC_PRIVATE), dumpMember2(ACC_PRIVATE))
@@ -121,7 +121,7 @@
     parameters.assumeR8TestParameters();
     assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForR8(parameters.getBackend())
         .addProgramClassFileData(
             dumpHost(ACC_PUBLIC), dumpMember1(ACC_PUBLIC), dumpMember2(ACC_PUBLIC))
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingMethodsTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingMethodsTest.java
index eca6260..677e553 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingMethodsTest.java
@@ -80,7 +80,7 @@
     parameters.assumeR8TestParameters();
     assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForR8(parameters.getBackend())
         .addProgramClassFileData(
             dumpHost(ACC_PRIVATE), dumpMember1(ACC_PRIVATE), dumpMember2(ACC_PRIVATE))
@@ -98,7 +98,7 @@
     parameters.assumeR8TestParameters();
     assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForR8(parameters.getBackend())
         .addProgramClassFileData(
             dumpHost(ACC_PRIVATE), dumpMember1(ACC_PRIVATE), dumpMember2(ACC_PRIVATE))
@@ -120,7 +120,7 @@
     parameters.assumeR8TestParameters();
     assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
     // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
-    assertFalse(parameters.getApiLevel().getLevel() > 34);
+    assertFalse(parameters.getApiLevel().getLevel() > 35);
     testForR8(parameters.getBackend())
         .addProgramClassFileData(
             dumpHost(ACC_PUBLIC), dumpMember1(ACC_PUBLIC), dumpMember2(ACC_PUBLIC))
diff --git a/src/test/java/com/android/tools/r8/examples/floating_point_annotations/FloatingPointValuedAnnotationTestRunner.java b/src/test/java/com/android/tools/r8/examples/floating_point_annotations/FloatingPointValuedAnnotationTestRunner.java
index fb097c0..a02faab 100644
--- a/src/test/java/com/android/tools/r8/examples/floating_point_annotations/FloatingPointValuedAnnotationTestRunner.java
+++ b/src/test/java/com/android/tools/r8/examples/floating_point_annotations/FloatingPointValuedAnnotationTestRunner.java
@@ -70,9 +70,8 @@
   @Test
   public void testDebug() throws Exception {
     Assume.assumeFalse(
-        "VMs 13 and 14 step-out to the continuation (line 28) and not the call-site (line 25).",
-        parameters.isDexRuntimeVersion(Version.V13_0_0)
-            || parameters.isDexRuntimeVersion(Version.V14_0_0));
+        "VMs from 13 step-out to the continuation (line 28) and not the call-site (line 25).",
+        parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V13_0_0));
     runTestDebugComparator();
   }
 }
diff --git a/src/test/java/com/android/tools/r8/graph/InvokeSuperTest.java b/src/test/java/com/android/tools/r8/graph/InvokeSuperTest.java
index fda115e..4c09231 100644
--- a/src/test/java/com/android/tools/r8/graph/InvokeSuperTest.java
+++ b/src/test/java/com/android/tools/r8/graph/InvokeSuperTest.java
@@ -132,6 +132,8 @@
       result.assertFailureWithErrorThatThrows(VerifyError.class);
     } else if (version == Version.V5_1_1 || version == Version.V6_0_1) {
       result.assertFailure();
+    } else if (version == Version.V15_0_0) {
+      result.assertFailureWithErrorThatThrows(VerifyError.class);
     } else {
       result.assertSuccessWithOutputThatMatches(containsString(NoSuchMethodError.class.getName()));
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java b/src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
index 3d3ed7f..9289f8e 100644
--- a/src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
@@ -88,6 +88,7 @@
               case V7_0_0:
               case V13_0_0:
               case V14_0_0:
+              case V15_0_0:
                 return StringUtils.joinLines(
                     "Hello!",
                     "Unexpected outcome of checkcast",
diff --git a/src/test/java/com/android/tools/r8/workaround/FilledNewArrayFromSubtypeWithMissingInterfaceWorkaroundTest.java b/src/test/java/com/android/tools/r8/workaround/FilledNewArrayFromSubtypeWithMissingInterfaceWorkaroundTest.java
index 53794e3..b8d0e8b 100644
--- a/src/test/java/com/android/tools/r8/workaround/FilledNewArrayFromSubtypeWithMissingInterfaceWorkaroundTest.java
+++ b/src/test/java/com/android/tools/r8/workaround/FilledNewArrayFromSubtypeWithMissingInterfaceWorkaroundTest.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
@@ -62,7 +63,10 @@
         .setMinApi(parameters)
         .compile()
         .applyIf(
-            parameters.isDexRuntime(),
+            // Only run dex2oat where the host build actually supports it to not get false negatives
+            // for fixes to b/283715197 and b/269228249.
+            parameters.isDexRuntime()
+                && ToolHelper.isDex2OatSupportedForVM(parameters.getRuntime().asDex().getVm()),
             compileResult ->
                 compileResult
                     .inspect(this::inspect)
diff --git a/src/test/testbase/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/testbase/java/com/android/tools/r8/R8RunArtTestsTest.java
index 0dbe829..3cfbd85 100644
--- a/src/test/testbase/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/testbase/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -104,7 +104,26 @@
           DexVm.Version.V10_0_0,
           DexVm.Version.V12_0_0,
           DexVm.Version.V13_0_0,
-          DexVm.Version.V14_0_0);
+          DexVm.Version.V14_0_0,
+          DexVm.Version.V15_0_0);
+
+  private static final TestCondition beforeAndroidN =
+      TestCondition.match(
+          TestCondition.runtimes(
+              DexVm.Version.V4_0_4,
+              DexVm.Version.V4_4_4,
+              DexVm.Version.V5_1_1,
+              DexVm.Version.V6_0_1));
+  // O is 8.0.0, but we don't have that for testing, only O_MR1 which is 8.1.0.
+  private static final TestCondition beforeAndroidO =
+      TestCondition.match(TestCondition.runtimesUpTo(DexVm.Version.V7_0_0));
+  // TODO(b/343124019): Change to V8_0_0 once we have a new art VM.
+  private static final TestCondition beforeAndroidP =
+      TestCondition.match(TestCondition.runtimesUpTo(DexVm.Version.V7_0_0));
+  private static final TestCondition fromAndroidS =
+      TestCondition.match(TestCondition.runtimesFrom(DexVm.Version.V12_0_0));
+  private static final TestCondition fromAndroidV =
+      TestCondition.match(TestCondition.runtimesFrom(DexVm.Version.V15_0_0));
 
   // Test that required to set min-api to a specific value.
   private static Map<String, AndroidApiLevel> needMinSdkVersion =
@@ -172,18 +191,10 @@
               TestCondition.match(TestCondition.runtimesUpTo(DexVm.Version.V4_4_4)))
           // TODO(b/197078746): Triage - fails with "java.lang.NoSuchMethodException:
           //  org.apache.harmony.dalvik.ddmc.DdmVmInternal.enableRecentAllocations [boolean]"
-          .put(
-              "098-ddmc",
-              TestCondition.match(
-                  TestCondition.runtimes(
-                      DexVm.Version.V12_0_0, DexVm.Version.V13_0_0, DexVm.Version.V14_0_0)))
+          .put("098-ddmc", fromAndroidS)
           // TODO(b/197079442): Triage - fails with "java.lang.NoSuchMethodException:
           //  org.apache.harmony.dalvik.ddmc.DdmVmInternal.enableRecentAllocations [boolean]"
-          .put(
-              "145-alloc-tracking-stress",
-              TestCondition.match(
-                  TestCondition.runtimes(
-                      DexVm.Version.V12_0_0, DexVm.Version.V13_0_0, DexVm.Version.V14_0_0)))
+          .put("145-alloc-tracking-stress", fromAndroidS)
           .build();
 
   // Tests that are flaky with the Art version we currently use.
@@ -490,6 +501,7 @@
   static {
     ImmutableMap.Builder<DexVm.Version, List<String>> builder = ImmutableMap.builder();
     builder
+        .put(DexVm.Version.V15_0_0, ImmutableList.of("543-env-long-ref", "518-null-array-get"))
         .put(DexVm.Version.V14_0_0, ImmutableList.of("543-env-long-ref", "518-null-array-get"))
         .put(DexVm.Version.V13_0_0, ImmutableList.of("543-env-long-ref", "518-null-array-get"))
         .put(DexVm.Version.V12_0_0, ImmutableList.of("543-env-long-ref", "518-null-array-get"))
@@ -799,18 +811,6 @@
               TestCondition.anyDexVm())
           .build();
 
-  private static final TestCondition beforeAndroidN =
-      TestCondition
-          .match(TestCondition
-              .runtimes(DexVm.Version.V4_0_4, DexVm.Version.V4_4_4, DexVm.Version.V5_1_1,
-                  DexVm.Version.V6_0_1));
-  // TODO(herhut): Change to V8_0_0 once we have a new art VM.
-  private static final TestCondition beforeAndroidO =
-      TestCondition.match(TestCondition.runtimesUpTo(DexVm.Version.V7_0_0));
-  // TODO(herhut): Change to V8_0_0 once we have a new art VM.
-  private static final TestCondition beforeAndroidP =
-      TestCondition.match(TestCondition.runtimesUpTo(DexVm.Version.V7_0_0));
-
   // TODO(ager): Could we test that these fail in the way that we expect?
   private static final Multimap<String, TestCondition> expectedToFailRunWithArt =
       new ImmutableListMultimap.Builder<String, TestCondition>()
@@ -845,7 +845,8 @@
                           DexVm.Version.V6_0_1,
                           DexVm.Version.V7_0_0,
                           DexVm.Version.V13_0_0,
-                          DexVm.Version.V14_0_0)),
+                          DexVm.Version.V14_0_0,
+                          DexVm.Version.V15_0_0)),
                   TestCondition.match(
                       compilers(
                           CompilerUnderTest.R8,
@@ -874,7 +875,8 @@
                       DexVm.Version.V10_0_0,
                       DexVm.Version.V12_0_0,
                       DexVm.Version.V13_0_0,
-                      DexVm.Version.V14_0_0)))
+                      DexVm.Version.V14_0_0,
+                      DexVm.Version.V15_0_0)))
           .put("454-get-vreg", TestCondition.match(TestCondition.R8DEX_COMPILER))
           // Fails: regs_jni.cc:42] Check failed: GetVReg(m, 0, kIntVReg, &value)
           // The R8/D8 code does not put values in the same registers as the tests expects.
@@ -892,7 +894,8 @@
                       DexVm.Version.V10_0_0,
                       DexVm.Version.V12_0_0,
                       DexVm.Version.V13_0_0,
-                      DexVm.Version.V14_0_0)))
+                      DexVm.Version.V14_0_0,
+                      DexVm.Version.V15_0_0)))
           .put("457-regs", TestCondition.match(TestCondition.R8DEX_COMPILER))
           // Class not found.
           .put("529-checker-unresolved", TestCondition.any())
@@ -951,6 +954,10 @@
           .put("974-verify-interface-super", beforeAndroidN) // --min-sdk = 24
           .put("975-iface-private", beforeAndroidN) // --min-sdk = 24
           .put("979-const-method-handle", beforeAndroidP)
+          .put(
+              "021-string2",
+              fromAndroidV) // Test use com.android.org.bouncycastle.util.Strings.fromUTF8ByteArray
+          // - no longer present.
           // Missing class junit.framework.Assert (see JunitAvailabilityInHostArtTest).
           // TODO(120884788): Add this again.
           /*
diff --git a/src/test/testbase/java/com/android/tools/r8/TestCondition.java b/src/test/testbase/java/com/android/tools/r8/TestCondition.java
index aec73f4..a4eca96 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestCondition.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestCondition.java
@@ -27,13 +27,11 @@
     ART_V12_0_0,
     ART_V13_0_0,
     ART_V14_0_0,
+    ART_V15_0_0,
     ART_DEFAULT,
     ART_MASTER,
     JAVA;
 
-    static final Runtime LOWEST_ART_VERSION = ART_V4_0_4;
-    static final Runtime HIGHEST_ART_VERSION = ART_DEFAULT;
-
     static Runtime fromDexVmVersion(DexVm.Version version) {
       switch (version) {
         case V4_0_4:
@@ -58,6 +56,8 @@
           return ART_V13_0_0;
         case V14_0_0:
           return ART_V14_0_0;
+        case V15_0_0:
+          return ART_V15_0_0;
         case DEFAULT:
           return ART_DEFAULT;
         case MASTER:
@@ -189,6 +189,10 @@
     return RuntimeSet.fromDexVmVersionSet(EnumSet.range(DexVm.Version.first(), upto));
   }
 
+  public static RuntimeSet runtimesFrom(DexVm.Version from) {
+    return RuntimeSet.fromDexVmVersionSet(EnumSet.range(from, DexVm.Version.last()));
+  }
+
   public static RuntimeSet and(RuntimeSet... sets) {
     return new RuntimeSet(
         EnumSet.copyOf(
diff --git a/src/test/testbase/java/com/android/tools/r8/ToolHelper.java b/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
index 745b3dd..3cb3bde 100644
--- a/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
@@ -352,6 +352,8 @@
     ART_13_0_0_HOST(Version.V13_0_0, Kind.HOST),
     ART_14_0_0_TARGET(Version.V14_0_0, Kind.TARGET),
     ART_14_0_0_HOST(Version.V14_0_0, Kind.HOST),
+    ART_15_0_0_TARGET(Version.V15_0_0, Kind.TARGET),
+    ART_15_0_0_HOST(Version.V15_0_0, Kind.HOST),
     ART_MASTER_TARGET(Version.MASTER, Kind.TARGET),
     ART_MASTER_HOST(Version.MASTER, Kind.HOST);
 
@@ -373,6 +375,7 @@
       V12_0_0("12.0.0"),
       V13_0_0("13.0.0"),
       V14_0_0("14.0.0"),
+      V15_0_0("15.0.0"),
       MASTER("master");
 
       /** This should generally be the latest DEX VM fully supported. */
@@ -440,7 +443,7 @@
       }
 
       public static Version last() {
-        return V14_0_0;
+        return V15_0_0;
       }
 
       public static Version master() {
@@ -959,6 +962,7 @@
       ImmutableMap.<DexVm, String>builder()
           .put(DexVm.ART_DEFAULT, "art")
           .put(DexVm.ART_MASTER_HOST, "host/art-master")
+          .put(DexVm.ART_15_0_0_HOST, "host/art-15.0.0-beta2")
           .put(DexVm.ART_14_0_0_HOST, "host/art-14.0.0-beta3")
           .put(DexVm.ART_13_0_0_HOST, "host/art-13.0.0")
           .put(DexVm.ART_12_0_0_HOST, "host/art-12.0.0-beta4")
@@ -975,6 +979,7 @@
       ImmutableMap.<DexVm, String>builder()
           .put(DexVm.ART_DEFAULT, "bin/art")
           .put(DexVm.ART_MASTER_HOST, "bin/art")
+          .put(DexVm.ART_15_0_0_HOST, "bin/art")
           .put(DexVm.ART_14_0_0_HOST, "bin/art")
           .put(DexVm.ART_13_0_0_HOST, "bin/art")
           .put(DexVm.ART_12_0_0_HOST, "bin/art")
@@ -991,6 +996,7 @@
   private static final Map<DexVm, String> ART_BINARY_VERSIONS_X64 =
       ImmutableMap.<DexVm, String>builder()
           .put(DexVm.ART_DEFAULT, "bin/art")
+          .put(DexVm.ART_15_0_0_HOST, "bin/art")
           .put(DexVm.ART_14_0_0_HOST, "bin/art")
           .put(DexVm.ART_13_0_0_HOST, "bin/art")
           .put(DexVm.ART_12_0_0_HOST, "bin/art")
@@ -1026,6 +1032,7 @@
     ImmutableMap.Builder<DexVm, List<String>> builder = ImmutableMap.builder();
     builder
         .put(DexVm.ART_DEFAULT, ART_7_TO_10_BOOT_LIBS)
+        .put(DexVm.ART_15_0_0_HOST, ART_12_PLUS_BOOT_LIBS)
         .put(DexVm.ART_14_0_0_HOST, ART_12_PLUS_BOOT_LIBS)
         .put(DexVm.ART_13_0_0_HOST, ART_12_PLUS_BOOT_LIBS)
         .put(DexVm.ART_12_0_0_HOST, ART_12_PLUS_BOOT_LIBS)
@@ -1046,6 +1053,7 @@
     ImmutableMap.Builder<DexVm, String> builder = ImmutableMap.builder();
     builder
         .put(DexVm.ART_DEFAULT, "angler")
+        .put(DexVm.ART_15_0_0_HOST, "akita")
         .put(DexVm.ART_14_0_0_HOST, "redfin")
         .put(DexVm.ART_13_0_0_HOST, "redfin")
         .put(DexVm.ART_12_0_0_HOST, "redfin")
@@ -1079,6 +1087,7 @@
         return base.resolve("host").resolve("art-12.0.0-beta4");
       case V13_0_0:
       case V14_0_0:
+      case V15_0_0:
       case MASTER:
         return base.resolve("host").resolve("art-" + version);
       default:
@@ -1114,6 +1123,7 @@
       case V12_0_0:
       case V13_0_0:
       case V14_0_0:
+      case V15_0_0:
       case MASTER:
         return "x86_64";
       default:
@@ -1399,6 +1409,8 @@
     switch (dexVm.version) {
       case MASTER:
         return AndroidApiLevel.MAIN;
+      case V15_0_0:
+        return AndroidApiLevel.V;
       case V14_0_0:
         return AndroidApiLevel.U;
       case V13_0_0:
@@ -1432,6 +1444,8 @@
     switch (apiLevel) {
       case MAIN:
         return DexVm.Version.MASTER;
+      case V:
+        return DexVm.Version.V15_0_0;
       case U:
         return DexVm.Version.V14_0_0;
       case T:
@@ -2397,6 +2411,10 @@
   private static final List<DexVm> SUPPORTED_DEX2OAT_VMS =
       ImmutableList.of(DexVm.ART_12_0_0_HOST, DexVm.ART_6_0_1_HOST);
 
+  public static boolean isDex2OatSupportedForVM(DexVm vm) {
+    return SUPPORTED_DEX2OAT_VMS.contains(vm);
+  }
+
   public static ProcessResult runDex2OatRaw(Path file, Path outFile, DexVm targetVm)
       throws IOException {
     Assume.assumeTrue(ToolHelper.isDex2OatSupported());
diff --git a/third_party/android_jar/lib-v35.tar.gz.sha1 b/third_party/android_jar/lib-v35.tar.gz.sha1
new file mode 100644
index 0000000..f1f5b61
--- /dev/null
+++ b/third_party/android_jar/lib-v35.tar.gz.sha1
@@ -0,0 +1 @@
+c9ad2358cc165f07fd68ef2151741ba12b26dcbc
\ No newline at end of file
diff --git a/third_party/android_jar/libcore_latest.tar.gz.sha1 b/third_party/android_jar/libcore_latest.tar.gz.sha1
index a4bef52..8200e76 100644
--- a/third_party/android_jar/libcore_latest.tar.gz.sha1
+++ b/third_party/android_jar/libcore_latest.tar.gz.sha1
@@ -1 +1 @@
-a82e05e08874d8b869d7f614c24ef8981888c702
\ No newline at end of file
+96a23da90f1b9412821cef769f3524ef6b05436b
\ No newline at end of file
diff --git a/third_party/api_database/api_database.tar.gz.sha1 b/third_party/api_database/api_database.tar.gz.sha1
index 7717064..a3e3b5e 100644
--- a/third_party/api_database/api_database.tar.gz.sha1
+++ b/third_party/api_database/api_database.tar.gz.sha1
@@ -1 +1 @@
-f1d87fa568ba769b5bf72b9f5a45a376c7465dda
\ No newline at end of file
+6fcae4d91999ef50dfbd2367c02270bc0ab9d2de
\ No newline at end of file
diff --git a/tools/linux/README.art-versions b/tools/linux/README.art-versions
index f813085..19d9248 100644
--- a/tools/linux/README.art-versions
+++ b/tools/linux/README.art-versions
@@ -67,6 +67,36 @@
 
 repo init -b udc-preview1-release
 
+
+art-15 (Android V)
+------------------
+Build branch 24Q3-release. Art at 5b498ae35e41f63dddb36d1c22c05165f4bb815d
+
+export BRANCH=24Q3-release
+mkdir ${BRANCH}
+cd ${BRANCH}
+export ANDROID_CHECKOUT=$(pwd)
+repo init -u https://android.googlesource.com/platform/manifest -b ${BRANCH}
+repo sync -cq -j48
+source build/envsetup.sh
+lunch aosp_akita-trunk_staging-userdebug
+m -j
+m -j build-art
+m -j test-art-host
+repo manifest -r -o build_spec.xml
+
+Collected into tools/linux/host/art-15.0.0-beta2. The "host" path element is checked
+by the script for running Art.
+
+  cd <r8 checkout>
+  scripts/update-host-art.sh \
+     --android-checkout $ANDROID_CHECKOUT \
+     --art-dir host/art-15.0.0-beta2 \
+     --android-product akita
+
+  (cd tools/linux/host; upload_to_google_storage.py -a --bucket r8-deps art-15.0.0-beta2)
+
+
 art-14 (Android U)
 ------------------
 Build branch udc-beta3-release. Art at 1f3514c28caf4537fe0fdf14559991ca23cf9e30.
diff --git a/tools/linux/host/art-15.0.0-beta2.tar.gz.sha1 b/tools/linux/host/art-15.0.0-beta2.tar.gz.sha1
new file mode 100644
index 0000000..f83cb4d
--- /dev/null
+++ b/tools/linux/host/art-15.0.0-beta2.tar.gz.sha1
@@ -0,0 +1 @@
+b793914b82da4e1b94ec14750788981063b8c57f
\ No newline at end of file
diff --git a/tools/test.py b/tools/test.py
index 2d358cb..9aee64a 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -28,8 +28,8 @@
     import thread
 
 ALL_ART_VMS = [
-    "default", "14.0.0", "13.0.0", "12.0.0", "10.0.0", "9.0.0", "8.1.0",
-    "7.0.0", "6.0.1", "5.1.1", "4.4.4", "4.0.4"
+    "default", "15.0.0", "14.0.0", "13.0.0", "12.0.0", "10.0.0", "9.0.0",
+    "8.1.0", "7.0.0", "6.0.1", "5.1.1", "4.4.4", "4.0.4"
 ]
 
 # How often do we check for progress on the bots:
