diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index 7645242..e659231 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8;
 
 import com.android.tools.r8.dex.Constants;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.OutputMode;
@@ -67,7 +68,7 @@
     private Path outputPath = null;
     private OutputMode outputMode = OutputMode.Indexed;
     private CompilationMode mode;
-    private int minApiLevel = Constants.DEFAULT_ANDROID_API;
+    private int minApiLevel = AndroidApiLevel.getDefault().getLevel();
 
     protected Builder(CompilationMode mode) {
       this(AndroidApp.builder(), mode, false);
diff --git a/src/main/java/com/android/tools/r8/compatdx/CompatDx.java b/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
index fdd5964..c0d4bbb 100644
--- a/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
+++ b/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
@@ -22,6 +22,7 @@
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.errors.Unimplemented;
 import com.android.tools.r8.logging.Log;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.google.common.collect.ImmutableList;
@@ -298,7 +299,7 @@
         List<Integer> allMinApiLevels = options.valuesOf(spec.minApiLevel);
         minApiLevel = allMinApiLevels.get(allMinApiLevels.size() - 1);
       } else {
-        minApiLevel = Constants.DEFAULT_ANDROID_API;
+        minApiLevel = AndroidApiLevel.getDefault().getLevel();
       }
       inputList = options.valueOf(spec.inputList);
       inputs = ImmutableList.copyOf(options.valuesOf(spec.inputs));
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
index 9aa712a..6169178 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -3,11 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex;
 
-import static com.android.tools.r8.dex.Constants.ANDROID_N_API;
 import static com.android.tools.r8.dex.Constants.ANDROID_N_DEX_VERSION;
-import static com.android.tools.r8.dex.Constants.ANDROID_O_API;
 import static com.android.tools.r8.dex.Constants.ANDROID_O_DEX_VERSION;
-import static com.android.tools.r8.dex.Constants.DEFAULT_ANDROID_API;
 import static com.android.tools.r8.graph.ClassKind.CLASSPATH;
 import static com.android.tools.r8.graph.ClassKind.LIBRARY;
 import static com.android.tools.r8.graph.ClassKind.PROGRAM;
@@ -27,6 +24,7 @@
 import com.android.tools.r8.graph.JarClassFileReader;
 import com.android.tools.r8.graph.LazyLoadedDexApplication;
 import com.android.tools.r8.naming.ProguardMapReader;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.ClassProvider;
 import com.android.tools.r8.utils.ClasspathClassCollection;
@@ -98,7 +96,7 @@
 
   private int verifyOrComputeMinApiLevel(int computedMinApiLevel, DexFile file) {
     int version = file.getDexVersion();
-    if (options.minApiLevel == DEFAULT_ANDROID_API) {
+    if (options.minApiLevel == AndroidApiLevel.getDefault().getLevel()) {
       computedMinApiLevel = Math.max(computedMinApiLevel, dexVersionToMinSdk(version));
     } else if (!minApiMatchesDexVersion(version)) {
       throw new CompilationError("Dex file with version '" + version +
@@ -110,9 +108,9 @@
   private boolean minApiMatchesDexVersion(int version) {
     switch (version) {
       case ANDROID_O_DEX_VERSION:
-        return options.minApiLevel >= ANDROID_O_API;
+        return options.minApiLevel >= AndroidApiLevel.O.getLevel();
       case ANDROID_N_DEX_VERSION:
-        return options.minApiLevel >= ANDROID_N_API;
+        return options.minApiLevel >= AndroidApiLevel.N.getLevel();
       default:
         return true;
     }
@@ -121,11 +119,11 @@
   private int dexVersionToMinSdk(int version) {
     switch (version) {
       case ANDROID_O_DEX_VERSION:
-        return ANDROID_O_API;
+        return AndroidApiLevel.O.getLevel();
       case ANDROID_N_DEX_VERSION:
-        return ANDROID_N_API;
+        return AndroidApiLevel.N.getLevel();
       default:
-        return DEFAULT_ANDROID_API;
+        return AndroidApiLevel.getDefault().getLevel();
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/dex/Constants.java b/src/main/java/com/android/tools/r8/dex/Constants.java
index d2e457b..58ff5d7 100644
--- a/src/main/java/com/android/tools/r8/dex/Constants.java
+++ b/src/main/java/com/android/tools/r8/dex/Constants.java
@@ -11,13 +11,6 @@
   public static final byte[] VDEX_FILE_MAGIC_PREFIX = {'v', 'd', 'e', 'x'};
   public static final byte[] VDEX_FILE_VERSION = {'0', '1', '0', '\0'};
 
-  public static final int ANDROID_O_API = 26;
-  public static final int ANDROID_N_API = 24;
-  public static final int ANDROID_L_API = 21;
-  public static final int ANDROID_K_API = 19;
-  public static final int ANDROID_I_API = 14;
-  public static final int DEFAULT_ANDROID_API = 1;
-
   /** dex file version number for Android O (API level 26) */
   public static final int ANDROID_O_DEX_VERSION = 38;
   public static final byte[] ANDROID_O_DEX_VERSION_BYTES = {'0', '3', '8'};
diff --git a/src/main/java/com/android/tools/r8/dex/FileWriter.java b/src/main/java/com/android/tools/r8/dex/FileWriter.java
index 826aaba..afa7105 100644
--- a/src/main/java/com/android/tools/r8/dex/FileWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/FileWriter.java
@@ -734,10 +734,10 @@
   }
 
   private static byte[] convertApiLevelToDexVersion(int apiLevel) {
-    if (apiLevel >= Constants.ANDROID_O_API) {
+    if (apiLevel >= AndroidApiLevel.O.getLevel()) {
       return Constants.ANDROID_O_DEX_VERSION_BYTES;
     }
-    if (apiLevel >= Constants.ANDROID_N_API) {
+    if (apiLevel >= AndroidApiLevel.N.getLevel()) {
       return Constants.ANDROID_N_DEX_VERSION_BYTES;
     }
     return Constants.ANDROID_PRE_N_DEX_VERSION_BYTES;
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 d72fb2b..04ab202 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
@@ -47,4 +47,8 @@
   public String getName() {
     return "Android " + name();
   }
+
+  public static AndroidApiLevel getDefault() {
+    return AndroidApiLevel.B;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 90597ca..f497ce5 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -81,7 +81,7 @@
   }
 
   public List<String> methodsFilter = ImmutableList.of();
-  public int minApiLevel = Constants.DEFAULT_ANDROID_API;
+  public int minApiLevel = AndroidApiLevel.getDefault().getLevel();
   // Skipping min_api check and compiling an intermediate result intended for later merging.
   public boolean intermediate = false;
   public List<String> logArgumentsFilter = ImmutableList.of();
diff --git a/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
index c39dc31..94fadf1 100644
--- a/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
@@ -4,12 +4,12 @@
 
 package com.android.tools.r8;
 
-import static com.android.tools.r8.dex.Constants.ANDROID_K_API;
 import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.D8Command.Builder;
 import com.android.tools.r8.shaking.FilteredClassPath;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.DirectoryClassFileProvider;
 import com.android.tools.r8.utils.FileUtils;
@@ -70,7 +70,7 @@
 
   @Test
   public void dexPerClassFileWithDesugaringAndFolderClasspath() throws Throwable {
-    int minAPILevel = ANDROID_K_API;
+    int minAPILevel = AndroidApiLevel.K.getLevel();
     Path inputFile =
         Paths.get(ToolHelper.EXAMPLES_ANDROID_N_BUILD_DIR, "interfacemethods" + JAR_EXTENSION);
     Path tmpClassesDir = temp.newFolder().toPath();
diff --git a/src/test/java/com/android/tools/r8/D8RunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/D8RunExamplesAndroidOTest.java
index a2e64e1..fa8fd25 100644
--- a/src/test/java/com/android/tools/r8/D8RunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/D8RunExamplesAndroidOTest.java
@@ -4,14 +4,13 @@
 
 package com.android.tools.r8;
 
-import static com.android.tools.r8.dex.Constants.ANDROID_K_API;
-import static com.android.tools.r8.dex.Constants.ANDROID_O_API;
 import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
 import static com.android.tools.r8.utils.FileUtils.ZIP_EXTENSION;
 
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.errors.InternalCompilerError;
 import com.android.tools.r8.errors.Unimplemented;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.DexInspector;
 import com.android.tools.r8.utils.OffOrAuto;
 import com.android.tools.r8.utils.OutputMode;
@@ -88,7 +87,7 @@
     D8TestRunner lib1 =
         test("testDefaultInInterfaceWithoutDesugaring", "desugaringwithmissingclasslib1", "N/A")
             .withInterfaceMethodDesugaring(OffOrAuto.Off)
-            .withMinApiLevel(ANDROID_K_API);
+            .withMinApiLevel(AndroidApiLevel.K.getLevel());
     try  {
       lib1.build();
 
@@ -105,7 +104,7 @@
     D8TestRunner lib1 =
         test("desugaringwithmissingclasslib1", "desugaringwithmissingclasslib1", "N/A")
             .withInterfaceMethodDesugaring(OffOrAuto.Auto)
-            .withMinApiLevel(ANDROID_K_API);
+            .withMinApiLevel(AndroidApiLevel.K.getLevel());
     lib1.build();
 
     // lib2: interface B extends A { default String foo() { return "B"; } }
@@ -114,7 +113,7 @@
         test("desugaringwithmissingclasslib2", "desugaringwithmissingclasslib2", "N/A")
             .withInterfaceMethodDesugaring(OffOrAuto.Auto)
             .withClasspath(lib1.getInputJar())
-            .withMinApiLevel(ANDROID_K_API);
+            .withMinApiLevel(AndroidApiLevel.K.getLevel());
     lib2.build();
 
     // test: class ImplementMethodsWithDefault implements A, B {} should get its foo implementation
@@ -125,7 +124,7 @@
         test("desugaringwithmissingclasstest1", "desugaringwithmissingclasstest1", "N/A")
             .withInterfaceMethodDesugaring(OffOrAuto.Auto)
             .withClasspath(lib1.getInputJar())
-            .withMinApiLevel(ANDROID_K_API);
+            .withMinApiLevel(AndroidApiLevel.K.getLevel());
     test.build();
 
     // TODO check compilation warnings are correctly reported
@@ -134,7 +133,7 @@
 
   @Test
   public void testMissingInterfaceDesugared2AndroidK() throws Throwable {
-    int minApi = ANDROID_K_API;
+    int minApi = AndroidApiLevel.K.getLevel();
 
     // lib1: interface A { default String foo() { return "A"; } }
     D8TestRunner lib1 =
@@ -188,7 +187,7 @@
 
   @Test
   public void testMissingInterfaceDesugared2AndroidO() throws Throwable {
-    int minApi = ANDROID_O_API;
+    int minApi = AndroidApiLevel.O.getLevel();
     // lib1: interface A { default String foo() { return "A"; } }
     D8TestRunner lib1 =
         test("desugaringwithmissingclasslib1", "desugaringwithmissingclasslib1", "N/A")
@@ -236,7 +235,7 @@
   @Test
   public void testCallToMissingSuperInterfaceDesugaredAndroidK() throws Throwable {
 
-    int minApi = ANDROID_K_API;
+    int minApi = AndroidApiLevel.K.getLevel();
     // lib1: interface A { default String foo() { return "A"; } }
     D8TestRunner lib1 =
         test("desugaringwithmissingclasslib1", "desugaringwithmissingclasslib1", "N/A")
@@ -289,7 +288,7 @@
 
   @Test
   public void testCallToMissingSuperInterfaceDesugaredAndroidO() throws Throwable {
-    int minApi = ANDROID_O_API;
+    int minApi = AndroidApiLevel.O.getLevel();
     // lib1: interface A { default String foo() { return "A"; } }
     D8TestRunner lib1 =
         test("desugaringwithmissingclasslib1", "desugaringwithmissingclasslib1", "N/A")
@@ -336,7 +335,7 @@
 
   @Test
   public void testMissingSuperDesugaredAndroidK() throws Throwable {
-    int minApi = ANDROID_K_API;
+    int minApi = AndroidApiLevel.K.getLevel();
 
     // lib1: interface A { default String foo() { return "A"; } }
     D8TestRunner lib1 =
@@ -384,7 +383,7 @@
 
   @Test
   public void testMissingSuperDesugaredAndroidO() throws Throwable {
-    int minApi = ANDROID_O_API;
+    int minApi = AndroidApiLevel.O.getLevel();
 
     // lib1: interface A { default String foo() { return "A"; } }
     D8TestRunner lib1 =
@@ -434,7 +433,7 @@
 
   @Test
   public void testMissingSuperDesugaredWithProgramCrossImplementationAndroidK() throws Throwable {
-    int minApi = ANDROID_K_API;
+    int minApi = AndroidApiLevel.K.getLevel();
 
     // lib1: interface A { default String foo() { return "A"; } }
     //       interface A2 { default String foo2() { return "A2"; } }
@@ -479,7 +478,7 @@
 
   @Test
   public void testMissingSuperDesugaredWithClasspathCrossImplementationAndroidK() throws Throwable {
-    int minApi = ANDROID_K_API;
+    int minApi = AndroidApiLevel.K.getLevel();
 
     // lib1: interface A { default String foo() { return "A"; } }
     //       interface A2 { default String foo2() { return "A2"; } }
@@ -586,7 +585,7 @@
         int expectedMainDexListSize,
         String... mainDexClasses)
         throws Throwable {
-    int minApi = ANDROID_K_API;
+    int minApi = AndroidApiLevel.K.getLevel();
 
     // Full build, will be used as reference.
     TestRunner<?> full =
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 0b6e3c3..c379193 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.ArtErrorParser;
 import com.android.tools.r8.utils.ArtErrorParser.ArtErrorInfo;
 import com.android.tools.r8.utils.DexInspector;
@@ -103,42 +104,42 @@
   private static Map<String, Integer> needMinSdkVersion =
       new ImmutableMap.Builder<String, Integer>()
           // Android O
-          .put("952-invoke-custom", Constants.ANDROID_O_API)
-          .put("952-invoke-custom-kinds", Constants.ANDROID_O_API)
-          .put("953-invoke-polymorphic-compiler", Constants.ANDROID_O_API)
-          .put("957-methodhandle-transforms", Constants.ANDROID_O_API)
-          .put("958-methodhandle-stackframe", Constants.ANDROID_O_API)
-          .put("959-invoke-polymorphic-accessors", Constants.ANDROID_O_API)
-          .put("990-method-handle-and-mr", Constants.ANDROID_O_API)
+          .put("952-invoke-custom", AndroidApiLevel.O.getLevel())
+          .put("952-invoke-custom-kinds", AndroidApiLevel.O.getLevel())
+          .put("953-invoke-polymorphic-compiler", AndroidApiLevel.O.getLevel())
+          .put("957-methodhandle-transforms", AndroidApiLevel.O.getLevel())
+          .put("958-methodhandle-stackframe", AndroidApiLevel.O.getLevel())
+          .put("959-invoke-polymorphic-accessors", AndroidApiLevel.O.getLevel())
+          .put("990-method-handle-and-mr", AndroidApiLevel.O.getLevel())
           // Test intentionally asserts presence of bridge default methods desugar removes.
-          .put("044-proxy", Constants.ANDROID_N_API)
+          .put("044-proxy", AndroidApiLevel.N.getLevel())
           // Test intentionally asserts absence of default interface method in a class.
-          .put("048-reflect-v8", Constants.ANDROID_N_API)
+          .put("048-reflect-v8", AndroidApiLevel.N.getLevel())
           // Uses default interface methods.
-          .put("162-method-resolution", Constants.ANDROID_N_API)
-          .put("616-cha-interface-default", Constants.ANDROID_N_API)
-          .put("1910-transform-with-default", Constants.ANDROID_N_API)
+          .put("162-method-resolution", AndroidApiLevel.N.getLevel())
+          .put("616-cha-interface-default", AndroidApiLevel.N.getLevel())
+          .put("1910-transform-with-default", AndroidApiLevel.N.getLevel())
           // Interface initializer is not triggered after desugaring.
-          .put("962-iface-static", Constants.ANDROID_N_API)
+          .put("962-iface-static", AndroidApiLevel.N.getLevel())
           // Interface initializer is not triggered after desugaring.
-          .put("964-default-iface-init-gen", Constants.ANDROID_N_API)
+          .put("964-default-iface-init-gen",AndroidApiLevel.N.getLevel())
           // AbstractMethodError (for method not implemented in class) instead of
           // IncompatibleClassChangeError (for conflict of default interface methods).
-          .put("968-default-partial-compile-gen", Constants.ANDROID_N_API)
+          .put("968-default-partial-compile-gen",AndroidApiLevel.N.getLevel())
           // NoClassDefFoundError (for companion class) instead of NoSuchMethodError.
-          .put("970-iface-super-resolution-gen", Constants.ANDROID_N_API)
+          .put("970-iface-super-resolution-gen", AndroidApiLevel.N.getLevel())
           // NoClassDefFoundError (for companion class) instead of AbstractMethodError.
-          .put("971-iface-super", Constants.ANDROID_N_API)
+          .put("971-iface-super", AndroidApiLevel.N.getLevel())
           // Test for miranda methods is not relevant for desugaring scenario.
-          .put("972-default-imt-collision", Constants.ANDROID_N_API)
+          .put("972-default-imt-collision", AndroidApiLevel.N.getLevel())
           // Uses default interface methods.
-          .put("972-iface-super-multidex", Constants.ANDROID_N_API)
+          .put("972-iface-super-multidex", AndroidApiLevel.N.getLevel())
           // java.util.Objects is missing and test has default methods.
-          .put("973-default-multidex", Constants.ANDROID_N_API)
+          .put("973-default-multidex", AndroidApiLevel.N.getLevel())
           // a.klass.that.does.not.Exist is missing and test has default methods.
-          .put("974-verify-interface-super", Constants.ANDROID_N_API)
+          .put("974-verify-interface-super", AndroidApiLevel.N.getLevel())
           // Desugaring of interface private methods is not yet supported.
-          .put("975-iface-private", Constants.ANDROID_N_API)
+          .put("975-iface-private", AndroidApiLevel.N.getLevel())
           .build();
 
   // Tests that timeout when run with Art.
@@ -1227,7 +1228,7 @@
           builder.addLibraryFiles(Paths.get(ToolHelper.getAndroidJar(minSdkVersion)));
         } else {
           builder.addLibraryFiles(Paths.get(
-              ToolHelper.getAndroidJar(Constants.DEFAULT_ANDROID_API)));
+              ToolHelper.getAndroidJar(AndroidApiLevel.getDefault().getLevel())));
         }
 
         D8Output output = D8.run(builder.build());
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
index e63b155..b43b041 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.ToolHelper.DexVm;
 import com.android.tools.r8.dex.Constants;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import java.nio.file.Path;
@@ -39,7 +40,7 @@
   @Test
   public void invokeCustomWithShrinking() throws Throwable {
     test("invokecustom-with-shrinking", "invokecustom", "InvokeCustom")
-        .withMinApiLevel(Constants.ANDROID_O_API)
+        .withMinApiLevel(AndroidApiLevel.O.getLevel())
         .withBuilderTransformation(builder ->
             builder.addProguardConfigurationFiles(
                 Paths.get(ToolHelper.EXAMPLES_ANDROID_O_DIR, "invokecustom/keep-rules.txt")))
diff --git a/src/test/java/com/android/tools/r8/RunExamplesAndroidNTest.java b/src/test/java/com/android/tools/r8/RunExamplesAndroidNTest.java
index 9d745f6..03093df 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesAndroidNTest.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesAndroidNTest.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.OffOrAuto;
 import com.google.common.collect.ImmutableList;
@@ -123,7 +124,7 @@
   @Test
   public void staticInterfaceMethods() throws Throwable {
     test("staticinterfacemethods", "interfacemethods", "StaticInterfaceMethods")
-        .withMinApiLevel(Constants.ANDROID_K_API)
+        .withMinApiLevel(AndroidApiLevel.K.getLevel())
         .withInterfaceMethodDesugaring(OffOrAuto.Auto)
         .run();
   }
@@ -140,7 +141,7 @@
   @Test
   public void defaultMethods() throws Throwable {
     test("defaultmethods", "interfacemethods", "DefaultMethods")
-        .withMinApiLevel(Constants.ANDROID_K_API)
+        .withMinApiLevel(AndroidApiLevel.K.getLevel())
         .withInterfaceMethodDesugaring(OffOrAuto.Auto)
         .run();
   }
diff --git a/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
index 0e0fd9d..84f2768 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
@@ -4,14 +4,13 @@
 
 package com.android.tools.r8;
 
-import static com.android.tools.r8.dex.Constants.ANDROID_K_API;
-import static com.android.tools.r8.dex.Constants.ANDROID_O_API;
 import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
 import static com.android.tools.r8.utils.FileUtils.ZIP_EXTENSION;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.DexInspector;
 import com.android.tools.r8.utils.DexInspector.FoundClassSubject;
@@ -256,14 +255,14 @@
   @Test
   public void invokeCustom() throws Throwable {
     test("invokecustom", "invokecustom", "InvokeCustom")
-        .withMinApiLevel(ANDROID_O_API)
+        .withMinApiLevel(AndroidApiLevel.O.getLevel())
         .run();
   }
 
   @Test
   public void invokeCustom2() throws Throwable {
     test("invokecustom2", "invokecustom2", "InvokeCustom")
-        .withMinApiLevel(ANDROID_O_API)
+        .withMinApiLevel(AndroidApiLevel.O.getLevel())
         .run();
   }
 
@@ -277,7 +276,7 @@
   @Test
   public void invokePolymorphic() throws Throwable {
     test("invokepolymorphic", "invokepolymorphic", "InvokePolymorphic")
-        .withMinApiLevel(ANDROID_O_API)
+        .withMinApiLevel(AndroidApiLevel.O.getLevel())
         .run();
   }
 
@@ -291,14 +290,14 @@
   @Test
   public void lambdaDesugaring() throws Throwable {
     test("lambdadesugaring", "lambdadesugaring", "LambdaDesugaring")
-        .withMinApiLevel(ANDROID_K_API)
+        .withMinApiLevel(AndroidApiLevel.K.getLevel())
         .run();
   }
 
   @Test
   public void lambdaDesugaringNPlus() throws Throwable {
     test("lambdadesugaringnplus", "lambdadesugaringnplus", "LambdasWithStaticAndDefaultMethods")
-        .withMinApiLevel(ANDROID_K_API)
+        .withMinApiLevel(AndroidApiLevel.K.getLevel())
         .withInterfaceMethodDesugaring(OffOrAuto.Auto)
         .run();
   }
@@ -306,8 +305,8 @@
   @Test
   public void desugarDefaultMethodInAndroidJar25() throws Throwable {
     test("DefaultMethodInAndroidJar25", "desugaringwithandroidjar25", "DefaultMethodInAndroidJar25")
-        .withMinApiLevel(ANDROID_K_API)
-        .withAndroidJar(ANDROID_O_API)
+        .withMinApiLevel(AndroidApiLevel.K.getLevel())
+        .withAndroidJar(AndroidApiLevel.O.getLevel())
         .withInterfaceMethodDesugaring(OffOrAuto.Auto)
         .run();
   }
@@ -315,8 +314,8 @@
   @Test
   public void desugarStaticMethodInAndroidJar25() throws Throwable {
     test("StaticMethodInAndroidJar25", "desugaringwithandroidjar25", "StaticMethodInAndroidJar25")
-        .withMinApiLevel(ANDROID_K_API)
-        .withAndroidJar(ANDROID_O_API)
+        .withMinApiLevel(AndroidApiLevel.K.getLevel())
+        .withAndroidJar(AndroidApiLevel.O.getLevel())
         .withInterfaceMethodDesugaring(OffOrAuto.Auto)
         .run();
   }
@@ -324,14 +323,14 @@
   @Test
   public void lambdaDesugaringValueAdjustments() throws Throwable {
     test("lambdadesugaring-value-adjustments", "lambdadesugaring", "ValueAdjustments")
-        .withMinApiLevel(ANDROID_K_API)
+        .withMinApiLevel(AndroidApiLevel.K.getLevel())
         .run();
   }
 
   @Test
   public void paramNames() throws Throwable {
     test("paramnames", "paramnames", "ParameterNames")
-        .withMinApiLevel(ANDROID_O_API)
+        .withMinApiLevel(AndroidApiLevel.O.getLevel())
         .withOptionConsumer((internalOptions) -> internalOptions.allowParameterName = true)
         .run();
   }
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index e69de5b..f5fe0f9 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.shaking.ProguardConfiguration;
 import com.android.tools.r8.shaking.ProguardConfigurationParser;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.ListUtils;
@@ -64,7 +65,7 @@
   public final static String PATH_SEPARATOR = File.pathSeparator;
 
   private static final String ANDROID_JAR_PATTERN = "third_party/android_jar/lib-v%d/android.jar";
-  private static final int DEFAULT_MIN_SDK = Constants.ANDROID_I_API;
+  private static final int DEFAULT_MIN_SDK = AndroidApiLevel.I.getLevel();
 
   public enum DexVm {
     ART_4_4_4("4.4.4"),
@@ -329,17 +330,17 @@
   }
 
   public static String getDefaultAndroidJar() {
-    return getAndroidJar(Constants.DEFAULT_ANDROID_API);
+    return getAndroidJar(AndroidApiLevel.getDefault().getLevel());
   }
 
   public static String getAndroidJar(int minSdkVersion) {
     return String.format(
         ANDROID_JAR_PATTERN,
-        minSdkVersion == Constants.DEFAULT_ANDROID_API ? DEFAULT_MIN_SDK : minSdkVersion);
+        minSdkVersion == AndroidApiLevel.getDefault().getLevel() ? DEFAULT_MIN_SDK : minSdkVersion);
   }
 
   public static Path getJdwpTestsJarPath(int minSdk) {
-    if (minSdk >= Constants.ANDROID_N_API) {
+    if (minSdk >= AndroidApiLevel.N.getLevel()) {
       return Paths.get("third_party", "jdwp-tests", "apache-harmony-jdwp-tests-host.jar");
     } else {
       return Paths.get(ToolHelper.BUILD_DIR, "libs", "jdwp-tests-preN.jar");
@@ -417,11 +418,11 @@
   public static int getMinApiLevelForDexVm(DexVm dexVm) {
     switch (dexVm) {
       case ART_DEFAULT:
-        return Constants.ANDROID_O_API;
+        return AndroidApiLevel.O.getLevel();
       case ART_7_0_0:
-        return Constants.ANDROID_N_API;
+        return AndroidApiLevel.N.getLevel();
       default:
-        return Constants.DEFAULT_ANDROID_API;
+        return AndroidApiLevel.getDefault().getLevel();
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/d8/D8FrameworkDexPassthroughMarkerTest.java b/src/test/java/com/android/tools/r8/d8/D8FrameworkDexPassthroughMarkerTest.java
index 3aadc15..9b538b0 100644
--- a/src/test/java/com/android/tools/r8/d8/D8FrameworkDexPassthroughMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/d8/D8FrameworkDexPassthroughMarkerTest.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.dex.Marker;
 import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.graph.DexApplication;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.Timing;
@@ -56,7 +57,7 @@
   @Test
   public void compile() throws CompilationException, IOException, ExecutionException {
     D8Command command = D8Command.builder()
-        .setMinApiLevel(Constants.ANDROID_N_API)
+        .setMinApiLevel(AndroidApiLevel.N.getLevel())
         .addProgramFiles(FRAMEWORK_JAR)
         .build();
     Marker marker = new Marker(Tool.D8)
diff --git a/src/test/java/com/android/tools/r8/d8/DexVersionTests.java b/src/test/java/com/android/tools/r8/d8/DexVersionTests.java
index 0d72a52..ebf75f2 100644
--- a/src/test/java/com/android/tools/r8/d8/DexVersionTests.java
+++ b/src/test/java/com/android/tools/r8/d8/DexVersionTests.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -39,15 +40,15 @@
     D8Command.Builder arrayAccessBuilder = D8Command.builder().addProgramFiles(ARRAYACCESS_JAR);
     D8Output output = D8.run(arrayAccessBuilder.build());
     output.write(defaultApiFolder1.getRoot().toPath());
-    output = D8.run(arrayAccessBuilder.setMinApiLevel(Constants.ANDROID_O_API).build());
+    output = D8.run(arrayAccessBuilder.setMinApiLevel(AndroidApiLevel.O.getLevel()).build());
     output.write(androidOApiFolder1.getRoot().toPath());
-    output = D8.run(arrayAccessBuilder.setMinApiLevel(Constants.ANDROID_N_API).build());
+    output = D8.run(arrayAccessBuilder.setMinApiLevel(AndroidApiLevel.N.getLevel()).build());
     output.write(androidNApiFolder1.getRoot().toPath());
     output = D8.run(arithmeticBuilder.build());
     output.write(defaultApiFolder2.getRoot().toPath());
-    output = D8.run(arithmeticBuilder.setMinApiLevel(Constants.ANDROID_O_API).build());
+    output = D8.run(arithmeticBuilder.setMinApiLevel(AndroidApiLevel.O.getLevel()).build());
     output.write(androidOApiFolder2.getRoot().toPath());
-    output = D8.run(arithmeticBuilder.setMinApiLevel(Constants.ANDROID_N_API).build());
+    output = D8.run(arithmeticBuilder.setMinApiLevel(AndroidApiLevel.N.getLevel()).build());
     output.write(androidNApiFolder2.getRoot().toPath());
   }
 
@@ -88,37 +89,37 @@
     // set to Android O.
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_O_API)
+            .setMinApiLevel(AndroidApiLevel.O.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(default2())
             .build());
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_O_API)
+            .setMinApiLevel(AndroidApiLevel.O.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(androidO2())
             .build());
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_O_API)
+            .setMinApiLevel(AndroidApiLevel.O.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(androidN2())
             .build());
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_O_API)
+            .setMinApiLevel(AndroidApiLevel.O.getLevel())
             .addProgramFiles(androidO1())
             .addProgramFiles(androidN2())
             .build());
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_O_API)
+            .setMinApiLevel(AndroidApiLevel.O.getLevel())
             .addProgramFiles(androidO1())
             .addProgramFiles(androidO2())
             .build());
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_O_API)
+            .setMinApiLevel(AndroidApiLevel.O.getLevel())
             .addProgramFiles(androidN1())
             .addProgramFiles(androidN2())
             .build());
@@ -126,19 +127,19 @@
     // Android N.
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_N_API)
+            .setMinApiLevel(AndroidApiLevel.N.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(default2())
             .build());
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_N_API)
+            .setMinApiLevel(AndroidApiLevel.N.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(androidN2())
             .build());
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_N_API)
+            .setMinApiLevel(AndroidApiLevel.N.getLevel())
             .addProgramFiles(androidN1())
             .addProgramFiles(androidN2())
             .build());
@@ -146,7 +147,7 @@
     // Android K.
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_K_API)
+            .setMinApiLevel(AndroidApiLevel.K.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(default2())
             .build());
@@ -156,7 +157,7 @@
   public void mergeErrorVersionNWithVersionOInput() throws CompilationException, IOException {
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_N_API)
+            .setMinApiLevel(AndroidApiLevel.N.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(androidO2())
             .build());
@@ -166,7 +167,7 @@
   public void mergeErrorVersionKWithVersionOInput() throws CompilationException, IOException {
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_K_API)
+            .setMinApiLevel(AndroidApiLevel.K.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(androidO2())
             .build());
@@ -176,7 +177,7 @@
   public void mergeErrorVersionKWithVersionNInput() throws CompilationException, IOException {
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_K_API)
+            .setMinApiLevel(AndroidApiLevel.K.getLevel())
             .addProgramFiles(default1())
             .addProgramFiles(androidN2())
             .build());
diff --git a/src/test/java/com/android/tools/r8/debug/DebugTestBase.java b/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
index cc01eab..34c1181 100644
--- a/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
+++ b/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.shaking.ProguardConfiguration;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.OffOrAuto;
@@ -182,7 +183,7 @@
 
   protected final boolean supportsDefaultMethod() {
     return RUNTIME_KIND == RuntimeKind.JAVA ||
-        ToolHelper.getMinApiLevelForDexVm(ToolHelper.getDexVm()) >= Constants.ANDROID_N_API;
+        ToolHelper.getMinApiLevelForDexVm(ToolHelper.getDexVm()) >= AndroidApiLevel.N.getLevel();
   }
 
   protected static boolean isRunningJava() {
diff --git a/src/test/java/com/android/tools/r8/desugar/BasicTestDependenciesDesugaringTest.java b/src/test/java/com/android/tools/r8/desugar/BasicTestDependenciesDesugaringTest.java
index 39d90d6..59da13f 100644
--- a/src/test/java/com/android/tools/r8/desugar/BasicTestDependenciesDesugaringTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/BasicTestDependenciesDesugaringTest.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.OffOrAuto;
 import com.google.common.collect.Sets;
 import java.io.File;
@@ -85,8 +86,8 @@
     ToolHelper.runD8(
         D8Command.builder().addClasspathFiles(classpath)
         .addProgramFiles(toCompile)
-        .addLibraryFiles(Paths.get(ToolHelper.getAndroidJar(Constants.ANDROID_K_API)))
-        .setMinApiLevel(Constants.ANDROID_K_API)
+        .addLibraryFiles(Paths.get(ToolHelper.getAndroidJar(AndroidApiLevel.K.getLevel())))
+        .setMinApiLevel(AndroidApiLevel.K.getLevel())
         .build(),
         options -> options.interfaceMethodDesugaring = OffOrAuto.Auto);
   }
@@ -99,8 +100,8 @@
     ToolHelper.runD8(
         D8Command.builder().addClasspathFiles(classpath)
         .addProgramFiles(toCompile)
-        .addLibraryFiles(Paths.get(ToolHelper.getAndroidJar(Constants.ANDROID_K_API)))
-        .setMinApiLevel(Constants.ANDROID_K_API)
+        .addLibraryFiles(Paths.get(ToolHelper.getAndroidJar(AndroidApiLevel.K.getLevel())))
+        .setMinApiLevel(AndroidApiLevel.K.getLevel())
         .build(),
         options -> options.interfaceMethodDesugaring = OffOrAuto.Off);
   }
diff --git a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
index 91ecb4f..3e4d129 100644
--- a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
+++ b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.ArtErrorParser;
 import com.android.tools.r8.utils.ArtErrorParser.ArtErrorInfo;
@@ -82,7 +83,7 @@
         builder.addProguardConfigurationFiles(Paths.get(pgConf));
       }
       builder.setMode(mode);
-      builder.setMinApiLevel(Constants.ANDROID_L_API);
+      builder.setMinApiLevel(AndroidApiLevel.L.getLevel());
       builder.addProguardConfigurationConsumer(b -> {
         b.setPrintSeeds(false);
       });
@@ -94,7 +95,7 @@
               D8Command.builder()
                   .addProgramFiles(ListUtils.map(inputs, Paths::get))
                   .setMode(mode)
-                  .setMinApiLevel(Constants.ANDROID_L_API)
+                  .setMinApiLevel(AndroidApiLevel.L.getLevel())
                   .build());
     }
     return checkVerification(outputApp, referenceApk);
diff --git a/src/test/java/com/android/tools/r8/internal/R8GMSCoreDeterministicTest.java b/src/test/java/com/android/tools/r8/internal/R8GMSCoreDeterministicTest.java
index 75a0275..02e301e 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreDeterministicTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreDeterministicTest.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.OutputMode;
 import com.beust.jcommander.internal.Lists;
@@ -40,7 +41,7 @@
           options.testing.irOrdering = this::shuffle;
           // Only use one thread to process to process in the order decided by the callback.
           options.numberOfThreads = 1;
-          options.minApiLevel = Constants.ANDROID_L_API;
+          options.minApiLevel = AndroidApiLevel.L.getLevel();
         });
   }
 
diff --git a/src/test/java/com/android/tools/r8/internal/R8GMSCoreFixedPointTest.java b/src/test/java/com/android/tools/r8/internal/R8GMSCoreFixedPointTest.java
index 376ccf3..0b0151c 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreFixedPointTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreFixedPointTest.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import java.io.IOException;
 import java.nio.file.Paths;
@@ -23,7 +24,7 @@
     // First compilation.
     AndroidApp app = AndroidApp.fromProgramDirectory(Paths.get(GMSCORE_V7_DIR));
     AndroidApp app1 =
-        ToolHelper.runR8(app, options -> options.minApiLevel = Constants.ANDROID_L_API);
+        ToolHelper.runR8(app, options -> options.minApiLevel = AndroidApiLevel.L.getLevel());
 
     // Second compilation.
     // Add option --skip-outline-opt for second compilation. The second compilation can find
@@ -32,7 +33,7 @@
     // See b/33410508 and b/33475705.
     AndroidApp app2 = ToolHelper.runR8(app1, options -> {
       options.outline.enabled = false;
-      options.minApiLevel = Constants.ANDROID_L_API;
+      options.minApiLevel = AndroidApiLevel.L.getLevel();
     });
 
     // TODO: Require that the results of the two compilations are the same.
diff --git a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
index ab88a99..b260304 100644
--- a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
+++ b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.graph.DexAnnotationElement;
 import com.android.tools.r8.graph.DexValue.DexValueString;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.DexInspector;
 import com.android.tools.r8.utils.DexInspector.AnnotationSubject;
@@ -52,7 +53,7 @@
   void compileWithD8(Path intputPath, Path outputPath) throws IOException, CompilationException {
     D8.run(
         D8Command.builder()
-            .setMinApiLevel(Constants.ANDROID_O_API)
+            .setMinApiLevel(AndroidApiLevel.O.getLevel())
             .addProgramFiles(intputPath)
             .setOutputPath(outputPath)
             .build());
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
index ed19b8e..15cd3b6 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -47,6 +47,7 @@
 import com.android.tools.r8.jasmin.JasminBuilder;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.DexInspector;
@@ -105,17 +106,19 @@
     // Generates an application with many classes, every even in one package and every odd in
     // another. Keep the number of methods low enough for single dex application.
     AndroidApp generated = generateApplication(
-        MANY_CLASSES, Constants.DEFAULT_ANDROID_API, MANY_CLASSES_SINGLE_DEX_METHODS_PER_CLASS);
+        MANY_CLASSES, AndroidApiLevel.getDefault().getLevel(),
+        MANY_CLASSES_SINGLE_DEX_METHODS_PER_CLASS);
     generated.write(getManyClassesSingleDexAppPath(), OutputMode.Indexed);
 
     // Generates an application with many classes, every even in one package and every odd in
     // another. Add enough methods so the application cannot fit into one dex file.
     generated = generateApplication(
-        MANY_CLASSES, Constants.ANDROID_L_API, MANY_CLASSES_MULTI_DEX_METHODS_PER_CLASS);
+        MANY_CLASSES, AndroidApiLevel.L.getLevel(), MANY_CLASSES_MULTI_DEX_METHODS_PER_CLASS);
     generated.write(getManyClassesMultiDexAppPath(), OutputMode.Indexed);
 
     // Generates an application with two classes, each with the maximum possible number of methods.
-    generated = generateApplication(TWO_LARGE_CLASSES, Constants.ANDROID_N_API, MAX_METHOD_COUNT);
+    generated = generateApplication(TWO_LARGE_CLASSES, AndroidApiLevel.N.getLevel(),
+        MAX_METHOD_COUNT);
     generated.write(getTwoLargeClassesAppPath(), OutputMode.Indexed);
   }
 
@@ -403,7 +406,7 @@
     // another. Add enough methods so the application cannot fit into one dex file.
     // Notice that this one allows multidex while using lower API.
     AndroidApp generated = generateApplication(
-        MANY_CLASSES, Constants.ANDROID_K_API, true, MANY_CLASSES_MULTI_DEX_METHODS_PER_CLASS);
+        MANY_CLASSES, AndroidApiLevel.K.getLevel(), true, MANY_CLASSES_MULTI_DEX_METHODS_PER_CLASS);
     generated.write(getManyClassesForceMultiDexAppPath(), OutputMode.Indexed);
     // Make sure the generated app indeed has multiple dex files.
     assertTrue(generated.getDexProgramResources().size() > 1);
@@ -416,7 +419,8 @@
     // Notice that this one fails due to the min API.
     try {
       generateApplication(
-          MANY_CLASSES, Constants.ANDROID_K_API, false, MANY_CLASSES_MULTI_DEX_METHODS_PER_CLASS);
+          MANY_CLASSES, AndroidApiLevel.K.getLevel(), false,
+          MANY_CLASSES_MULTI_DEX_METHODS_PER_CLASS);
       fail("Expect to fail, for there are many classes while multidex is not enabled.");
     } catch (DexOverflowException e) {
       // Make sure {@link MonoDexDistributor} was used.
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
index cc56417..e8d8ee7 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.maindexlist;
 
-import static com.android.tools.r8.dex.Constants.ANDROID_I_API;
 import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
 import static com.android.tools.r8.utils.FileUtils.ZIP_EXTENSION;
 
@@ -16,6 +15,7 @@
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.desugar.LambdaRewriter;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.InternalOptions;
 import java.nio.charset.StandardCharsets;
@@ -48,7 +48,7 @@
         EXAMPLE_BUILD_DIR,
         Paths.get(EXAMPLE_SRC_DIR, "multidex", "main-dex-rules.txt"),
         Paths.get(EXAMPLE_SRC_DIR, "multidex001", "ref-list-1.txt"),
-        ANDROID_I_API);
+        AndroidApiLevel.I.getLevel());
   }
 
   @Test
@@ -59,7 +59,7 @@
         EXAMPLE_BUILD_DIR,
         Paths.get(EXAMPLE_SRC_DIR, "multidex001", "main-dex-rules-2.txt"),
         Paths.get(EXAMPLE_SRC_DIR, "multidex001", "ref-list-2.txt"),
-        ANDROID_I_API);
+        AndroidApiLevel.I.getLevel());
   }
 
   @Test
@@ -70,7 +70,7 @@
         EXAMPLE_BUILD_DIR,
         Paths.get(EXAMPLE_SRC_DIR, "multidex", "main-dex-rules.txt"),
         Paths.get(EXAMPLE_SRC_DIR, "multidex002", "ref-list-1.txt"),
-        ANDROID_I_API);
+        AndroidApiLevel.I.getLevel());
   }
 
   @Test
@@ -81,7 +81,7 @@
         EXAMPLE_BUILD_DIR,
         Paths.get(EXAMPLE_SRC_DIR, "multidex", "main-dex-rules.txt"),
         Paths.get(EXAMPLE_SRC_DIR, "multidex003", "ref-list-1.txt"),
-        ANDROID_I_API);
+        AndroidApiLevel.I.getLevel());
   }
 
   @Test
@@ -92,7 +92,7 @@
         EXAMPLE_O_BUILD_DIR,
         Paths.get(EXAMPLE_SRC_DIR, "multidex", "main-dex-rules.txt"),
         Paths.get(EXAMPLE_O_SRC_DIR, "multidex004", "ref-list-1.txt"),
-        ANDROID_I_API);
+        AndroidApiLevel.I.getLevel());
   }
 
   private void doTest(
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
index a80f46d..22876ff 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.DexInspector;
 import com.android.tools.r8.utils.DexInspector.FieldAccessInstructionSubject;
 import com.android.tools.r8.utils.DexInspector.InstructionSubject;
@@ -294,9 +295,9 @@
     public int getMinApiLevel() {
       switch (version) {
         case PRE_N:
-          return Constants.DEFAULT_ANDROID_API;
+          return AndroidApiLevel.getDefault().getLevel();
         case N:
-          return Constants.ANDROID_N_API;
+          return AndroidApiLevel.N.getLevel();
         default:
           Assert.fail();
           return -1;
diff --git a/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java b/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
index 8d0e667..01b0a17 100644
--- a/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
+++ b/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.dex.Constants;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.OffOrAuto;
 import java.nio.file.Path;
@@ -22,7 +23,7 @@
     R8Command command =
         ToolHelper.prepareR8CommandBuilder(app)
             .addProguardConfigurationFiles(proguardConfig)
-            .setMinApiLevel(Constants.ANDROID_L_API)
+            .setMinApiLevel(AndroidApiLevel.L.getLevel())
             .build();
     String resultFromJava = runOnJava(mainClass);
     app = ToolHelper.runR8(command, options -> options.interfaceMethodDesugaring = OffOrAuto.Auto);
