diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index 6c9025d..68b9354 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -158,6 +158,7 @@
               .setGenericSignature(MethodTypeSignature.noSignature())
               .setCode(code)
               .setClassFileVersion(CfVersion.V1_6)
+              .disableAndroidApiLevelCheck()
               .build();
       if (method.isStatic() || method.isDirectMethod()) {
         directMethods.add(throwingMethod);
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 2ab471a..462c008 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -48,7 +48,7 @@
 import com.android.tools.r8.ir.desugar.BackportedMethodRewriter;
 import com.android.tools.r8.ir.desugar.CfClassSynthesizerDesugaringCollection;
 import com.android.tools.r8.ir.desugar.CfClassSynthesizerDesugaringEventConsumer;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryRetargeterLibraryTypeSynthesizor;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryRetargeterLibraryTypeSynthesizer;
 import com.android.tools.r8.ir.desugar.itf.InterfaceMethodRewriter;
 import com.android.tools.r8.ir.desugar.records.RecordRewriter;
 import com.android.tools.r8.ir.optimize.AssertionsRewriter;
@@ -310,8 +310,8 @@
         MainDexListBuilder.checkForAssumedLibraryTypes(appView.appInfo());
       }
       if (!options.desugaredLibraryConfiguration.getRetargetCoreLibMember().isEmpty()) {
-        DesugaredLibraryRetargeterLibraryTypeSynthesizor.checkForAssumedLibraryTypes(appView);
-        DesugaredLibraryRetargeterLibraryTypeSynthesizor.amendLibraryWithRetargetedMembers(appView);
+        DesugaredLibraryRetargeterLibraryTypeSynthesizer.checkForAssumedLibraryTypes(appView);
+        DesugaredLibraryRetargeterLibraryTypeSynthesizer.amendLibraryWithRetargetedMembers(appView);
       }
       InterfaceMethodRewriter.checkForAssumedLibraryTypes(appView.appInfo(), options);
       BackportedMethodRewriter.registerAssumedLibraryTypes(options);
@@ -438,6 +438,8 @@
           annotationRemover.ensureValid().run(executorService);
           new GenericSignatureRewriter(appView, NamingLens.getIdentityLens(), genericContextBuilder)
               .run(appView.appInfo().classes(), executorService);
+
+          assert appView.checkForTesting(() -> allReferencesAssignedApiLevel(appViewWithLiveness));
         }
       } finally {
         timing.end();
@@ -888,7 +890,8 @@
   }
 
   private static boolean allReferencesAssignedApiLevel(AppView<?> appView) {
-    if (!appView.options().apiModelingOptions().checkAllApiReferencesAreSet) {
+    if (!appView.options().apiModelingOptions().checkAllApiReferencesAreSet
+        || appView.options().configurationDebugging) {
       return true;
     }
     // This will return false if we find anything in the library which is not modeled.
@@ -897,12 +900,11 @@
         .classes()
         .forEach(
             clazz -> {
-              if (appView.options().apiModelingOptions().enableApiCallerIdentification) {
-                assert clazz.getMembersApiReferenceLevel(appView) != AndroidApiLevel.UNKNOWN
-                    : "Every member should have been analyzed";
-              } else {
+              assert clazz.getMembersApiReferenceLevel(appView) != AndroidApiLevel.NOT_SET
+                  : "Every member should have been analyzed";
+              if (!appView.options().apiModelingOptions().enableApiCallerIdentification) {
                 assert clazz.getMembersApiReferenceLevel(appView) == AndroidApiLevel.UNKNOWN
-                    : "Every member should have level UNKNOWN";
+                    : "Every member should have level NOT_SET";
               }
             });
     return true;
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index 9336265..03c50c0 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -657,6 +657,7 @@
               .setGenericSignature(fieldTypeSignature)
               .setAnnotations(fieldAnnotations)
               .setStaticValue(staticValue)
+              .disableAndroidApiLevelCheck()
               .build();
     }
     return fields;
@@ -708,6 +709,7 @@
               .setAnnotations(methodAnnotations)
               .setParameterAnnotations(parameterAnnotationsIterator.getNextFor(method))
               .setCode(code)
+              .disableAndroidApiLevelCheck()
               .build();
     }
     return methods;
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
index c89d8ed..5cfbeeb 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
@@ -59,9 +59,9 @@
       FieldTypeSignature genericSignature,
       DexAnnotationSet annotations,
       DexValue staticValue,
+      AndroidApiLevel apiLevel,
       boolean deprecated,
-      boolean d8R8Synthesized,
-      AndroidApiLevel apiLevel) {
+      boolean d8R8Synthesized) {
     super(field, annotations, d8R8Synthesized, apiLevel);
     this.accessFlags = accessFlags;
     this.staticValue = staticValue;
@@ -365,6 +365,10 @@
     private final boolean d8R8Synthesized;
     private Consumer<DexEncodedField> buildConsumer = ConsumerUtils.emptyConsumer();
 
+    // Checks to impose on the built method. They should always be active to start with and be
+    // lowered on the use site.
+    private boolean checkAndroidApiLevel = true;
+
     private Builder(boolean d8R8Synthesized) {
       this.d8R8Synthesized = d8R8Synthesized;
     }
@@ -448,11 +452,17 @@
       return this;
     }
 
+    public Builder disableAndroidApiLevelCheck() {
+      checkAndroidApiLevel = false;
+      return this;
+    }
+
     public DexEncodedField build() {
       assert field != null;
       assert accessFlags != null;
       assert genericSignature != null;
       assert annotations != null;
+      assert !checkAndroidApiLevel || apiLevel != AndroidApiLevel.NOT_SET;
       DexEncodedField dexEncodedField =
           new DexEncodedField(
               field,
@@ -460,9 +470,9 @@
               genericSignature,
               annotations,
               staticValue,
+              apiLevel,
               deprecated,
-              d8R8Synthesized,
-              apiLevel);
+              d8R8Synthesized);
       dexEncodedField.optimizationInfo = optimizationInfo;
       buildConsumer.accept(dexEncodedField);
       return dexEncodedField;
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index b6c7d02..a153a6a 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -11,6 +11,7 @@
 import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_NOT_INLINING_CANDIDATE;
 import static com.android.tools.r8.graph.DexProgramClass.asProgramClassOrNull;
 import static com.android.tools.r8.kotlin.KotlinMetadataUtils.getNoKotlinInfo;
+import static com.android.tools.r8.utils.AndroidApiLevel.NOT_SET;
 import static com.android.tools.r8.utils.ConsumerUtils.emptyConsumer;
 
 import com.android.tools.r8.cf.CfVersion;
@@ -45,6 +46,7 @@
 import com.android.tools.r8.errors.InternalCompilerError;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.DexAnnotation.AnnotatedKind;
+import com.android.tools.r8.graph.DexEncodedMethod.CompilationState;
 import com.android.tools.r8.graph.GenericSignature.MethodTypeSignature;
 import com.android.tools.r8.ir.analysis.inlining.SimpleInliningConstraint;
 import com.android.tools.r8.ir.code.IRCode;
@@ -146,9 +148,9 @@
           ParameterAnnotationsList.empty(),
           null,
           false,
+          NOT_SET,
+          NOT_SET,
           null,
-          AndroidApiLevel.UNKNOWN,
-          AndroidApiLevel.UNKNOWN,
           false);
   public static final Int2ReferenceMap<DebugLocalInfo> NO_PARAMETER_INFO =
       new Int2ReferenceArrayMap<>(0);
@@ -238,9 +240,9 @@
       ParameterAnnotationsList parameterAnnotationsList,
       Code code,
       boolean d8R8Synthesized,
-      CfVersion classFileVersion,
       AndroidApiLevel apiLevelForDefinition,
       AndroidApiLevel apiLevelForCode,
+      CfVersion classFileVersion,
       boolean deprecated) {
     super(method, annotations, d8R8Synthesized, apiLevelForDefinition);
     this.accessFlags = accessFlags;
@@ -253,7 +255,8 @@
     assert accessFlags != null;
     assert code == null || !shouldNotHaveCode();
     assert parameterAnnotationsList != null;
-    assert apiLevelForCode != null && apiLevelForDefinition != null;
+    assert apiLevelForDefinition != null;
+    assert apiLevelForCode != null;
   }
 
   public static DexEncodedMethod toMethodDefinitionOrNull(DexClassAndMethod method) {
@@ -1270,6 +1273,8 @@
                 // Holder is companion class, or retarget method, not an interface.
                 .setStaticTarget(forwardMethod, false)
                 .build())
+        .setApiLevelForDefinition(target.getDefinition().getApiLevelForDefinition())
+        .setApiLevelForCode(target.getDefinition().getApiLevelForCode())
         .build();
   }
 
@@ -1358,7 +1363,7 @@
 
   @Override
   public AndroidApiLevel getApiLevel() {
-    return (isAbstract() ? AndroidApiLevel.B : getApiLevelForCode())
+    return (shouldNotHaveCode() ? AndroidApiLevel.B : getApiLevelForCode())
         .max(getApiLevelForDefinition());
   }
 
@@ -1441,8 +1446,8 @@
     private MethodOptimizationInfo optimizationInfo = DefaultMethodOptimizationInfo.getInstance();
     private KotlinMethodLevelInfo kotlinInfo = getNoKotlinInfo();
     private CfVersion classFileVersion = null;
-    private AndroidApiLevel apiLevelForDefinition = AndroidApiLevel.UNKNOWN;
-    private AndroidApiLevel apiLevelForCode = AndroidApiLevel.UNKNOWN;
+    private AndroidApiLevel apiLevelForDefinition = NOT_SET;
+    private AndroidApiLevel apiLevelForCode = NOT_SET;
     private final boolean d8R8Synthesized;
     private boolean deprecated = false;
 
@@ -1450,6 +1455,7 @@
     // lowered on the use site.
     private boolean checkMethodNotNull = true;
     private boolean checkParameterAnnotationList = true;
+    private boolean checkAndroidApiLevels = true;
 
     private Consumer<DexEncodedMethod> buildConsumer = ConsumerUtils.emptyConsumer();
 
@@ -1687,6 +1693,11 @@
       return this;
     }
 
+    public Builder disableAndroidApiLevelCheck() {
+      checkAndroidApiLevels = false;
+      return this;
+    }
+
     public DexEncodedMethod build() {
       assert !checkMethodNotNull || method != null;
       assert accessFlags != null;
@@ -1695,8 +1706,8 @@
       assert !checkParameterAnnotationList
           || parameterAnnotations.isEmpty()
           || parameterAnnotations.size() == method.proto.parameters.size();
-      assert apiLevelForDefinition != null;
-      assert apiLevelForCode != null;
+      assert !checkAndroidApiLevels || apiLevelForDefinition != null;
+      assert !checkAndroidApiLevels || apiLevelForCode != null;
       DexEncodedMethod result =
           new DexEncodedMethod(
               method,
@@ -1706,9 +1717,9 @@
               parameterAnnotations,
               code,
               d8R8Synthesized,
-              classFileVersion,
               apiLevelForDefinition,
               apiLevelForCode,
+              classFileVersion,
               deprecated);
       result.setKotlinMemberInfo(kotlinInfo);
       result.compilationState = compilationState;
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 2164d54..4c6c165 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -38,7 +38,6 @@
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.shaking.ProguardKeepAttributes;
 import com.android.tools.r8.synthesis.SyntheticMarker;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AsmUtils;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.ExceptionUtils;
@@ -675,6 +674,7 @@
                 .setAnnotations(annotationSet)
                 .setStaticValue(staticValue)
                 .setDeprecated(AsmUtils.isDeprecated(access))
+                .disableAndroidApiLevelCheck()
                 .build();
         if (flags.isStatic()) {
           parent.staticFields.add(field);
@@ -911,10 +911,9 @@
               .setParameterAnnotations(parameterAnnotationsList)
               .setCode(code)
               .setClassFileVersion(parent.version)
-              .setApiLevelForDefinition(AndroidApiLevel.UNKNOWN)
-              .setApiLevelForCode(AndroidApiLevel.UNKNOWN)
               .setDeprecated(deprecated)
               .disableParameterAnnotationListCheck()
+              .disableAndroidApiLevelCheck()
               .build();
       Wrapper<DexMethod> signature = MethodSignatureEquivalence.get().wrap(method);
       if (parent.methodSignatures.add(signature)) {
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/ApiModelAnalysis.java b/src/main/java/com/android/tools/r8/graph/analysis/ApiModelAnalysis.java
index 9da5368..85c63ad 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/ApiModelAnalysis.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/ApiModelAnalysis.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.androidapi.AndroidApiReferenceLevelCache;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClassAndMember;
+import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.LookupTarget;
 import com.android.tools.r8.graph.ProgramDefinition;
 import com.android.tools.r8.graph.ProgramField;
@@ -47,7 +48,12 @@
           .accept(method.getMethodReference(), registry.getMaxApiReferenceLevel());
     }
     computeApiLevelForDefinition(method);
-    method.getDefinition().setApiLevelForCode(registry.getMaxApiReferenceLevel());
+    method
+        .getDefinition()
+        .setApiLevelForCode(
+            appView.options().apiModelingOptions().enableApiCallerIdentification
+                ? registry.getMaxApiReferenceLevel()
+                : AndroidApiLevel.UNKNOWN);
   }
 
   @Override
@@ -69,7 +75,17 @@
         });
   }
 
+  @Override
+  public void notifyFailedMethodResolutionTarget(DexEncodedMethod method) {
+    // We may not trace into failed resolution targets.
+    method.setApiLevelForCode(AndroidApiLevel.UNKNOWN);
+  }
+
   private void computeApiLevelForDefinition(DexClassAndMember<?, ?> member) {
+    if (!appView.options().apiModelingOptions().enableApiCallerIdentification) {
+      member.getDefinition().setApiLevelForDefinition(AndroidApiLevel.UNKNOWN);
+      return;
+    }
     member
         .getDefinition()
         .setApiLevelForDefinition(
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/EnqueuerAnalysis.java b/src/main/java/com/android/tools/r8/graph/analysis/EnqueuerAnalysis.java
index 0610c55..ceb7e92 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/EnqueuerAnalysis.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/EnqueuerAnalysis.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.graph.analysis;
 
+import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.LookupTarget;
 import com.android.tools.r8.graph.ProgramDefinition;
@@ -37,6 +38,8 @@
 
   public void notifyMarkVirtualDispatchTargetAsLive(LookupTarget target) {}
 
+  public void notifyFailedMethodResolutionTarget(DexEncodedMethod method) {}
+
   /**
    * Called when the Enqueuer reaches a fixpoint. This may happen multiple times, since each
    * analysis may enqueue items into the worklist upon the fixpoint using {@param worklist}.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CfPostProcessingDesugaringCollection.java b/src/main/java/com/android/tools/r8/ir/desugar/CfPostProcessingDesugaringCollection.java
index a0d130d..1e393aa 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CfPostProcessingDesugaringCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CfPostProcessingDesugaringCollection.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryAPICallbackSynthesizor;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryAPICallbackSynthesizer;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryRetargeterPostProcessor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.RetargetingInfo;
 import com.android.tools.r8.ir.desugar.itf.InterfaceMethodProcessorFacade;
@@ -64,9 +64,9 @@
       if (interfaceMethodProcessorFacade != null) {
         desugarings.add(interfaceMethodProcessorFacade);
       }
-      DesugaredLibraryAPICallbackSynthesizor apiCallbackSynthesizor =
+      DesugaredLibraryAPICallbackSynthesizer apiCallbackSynthesizor =
           appView.rewritePrefix.isRewriting()
-              ? new DesugaredLibraryAPICallbackSynthesizor(appView)
+              ? new DesugaredLibraryAPICallbackSynthesizer(appView)
               : null;
       // At this point the desugaredLibraryAPIConverter is required to be last to generate
       // call-backs on the forwarding methods.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
index a18d9b9..0d0dd97 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
@@ -175,6 +175,8 @@
             .setParameterAnnotations(
                 methodDefinition.parameterAnnotationsList.keepIf(Predicates.alwaysTrue()))
             .setCode(forwardMethodBuilder.build())
+            .setApiLevelForDefinition(methodDefinition.getApiLevelForDefinition())
+            .setApiLevelForCode(methodDefinition.getApiLevelForCode())
             .build();
     // Optimize to generate DexCode instead of CfCode.
     ProgramMethod programMethod = new ProgramMethod(methodHolder, newVirtualMethod);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index c7f5ec8..c2d95ca 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -36,7 +36,6 @@
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
 import com.android.tools.r8.synthesis.SyntheticProgramClassBuilder;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -161,6 +160,8 @@
                 MethodAccessFlags.fromSharedAccessFlags(
                     Constants.ACC_PUBLIC | Constants.ACC_FINAL, false))
             .setCode(LambdaMainMethodSourceCode.build(this, mainMethod))
+            // The api level is computed when tracing.
+            .disableAndroidApiLevelCheck()
             .build());
 
     // Synthesize bridge methods.
@@ -178,6 +179,8 @@
                           | Constants.ACC_BRIDGE,
                       false))
               .setCode(LambdaBridgeMethodSourceCode.build(this, bridgeMethod, mainMethod))
+              // The api level is computed when tracing.
+              .disableAndroidApiLevelCheck()
               .build());
     }
     builder.setVirtualMethods(methods);
@@ -198,6 +201,8 @@
             .setMethod(constructor)
             .setAccessFlags(accessFlags)
             .setCode(LambdaConstructorSourceCode.build(this))
+            // The api level is computed when tracing.
+            .disableAndroidApiLevelCheck()
             .build());
 
     // Class constructor for stateless lambda classes.
@@ -209,6 +214,8 @@
                   MethodAccessFlags.fromSharedAccessFlags(
                       Constants.ACC_SYNTHETIC | Constants.ACC_STATIC, true))
               .setCode(LambdaClassConstructorSourceCode.build(this))
+              // The api level is computed when tracing.
+              .disableAndroidApiLevelCheck()
               .build());
       feedback.classInitializerMayBePostponed(methods.get(1));
     }
@@ -226,7 +233,7 @@
               .setField(getCaptureField(i))
               .setAccessFlags(FieldAccessFlags.createPublicFinalSynthetic())
               // The api level is computed when tracing.
-              .setApiLevel(AndroidApiLevel.UNKNOWN)
+              .disableAndroidApiLevelCheck()
               .build());
     }
     builder.setInstanceFields(fields);
@@ -249,7 +256,7 @@
                               | Constants.ACC_STATIC))
                   .setStaticValue(DexValueNull.NULL)
                   // The api level is computed when tracing.
-                  .setApiLevel(AndroidApiLevel.UNKNOWN)
+                  .disableAndroidApiLevelCheck()
                   .build()));
     }
   }
@@ -564,6 +571,8 @@
                             .setAnnotations(encodedMethod.annotations())
                             .setParameterAnnotations(encodedMethod.parameterAnnotationsList)
                             .setCode(encodedMethod.getCode())
+                            .setApiLevelForDefinition(encodedMethod.getApiLevelForDefinition())
+                            .setApiLevelForCode(encodedMethod.getApiLevelForCode())
                             .build();
                     newMethod.copyMetadata(encodedMethod);
                     forcefullyMovedLambdaMethodConsumer.acceptForcefullyMovedLambdaMethod(
@@ -647,6 +656,8 @@
                             .setAnnotations(encodedMethod.annotations())
                             .setParameterAnnotations(encodedMethod.parameterAnnotationsList)
                             .setCode(encodedMethod.getCode())
+                            .setApiLevelForDefinition(encodedMethod.getApiLevelForDefinition())
+                            .setApiLevelForCode(encodedMethod.getApiLevelForCode())
                             .build();
                     newMethod.copyMetadata(encodedMethod);
                     forcefullyMovedLambdaMethodConsumer.acceptForcefullyMovedLambdaMethod(
@@ -708,6 +719,8 @@
                   .setMethod(callTarget)
                   .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
                   .setCode(AccessorMethodSourceCode.build(LambdaClass.this, callTarget))
+                  // The api level is computed when tracing.
+                  .disableAndroidApiLevelCheck()
                   .build());
       accessorClass.addDirectMethod(accessorMethod.getDefinition());
       if (appView.options().isDesugaredLibraryCompilation()
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
index 22654d6..4015912 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.ir.desugar.constantdynamic;
 
+import static com.android.tools.r8.utils.AndroidApiLevel.minApiLevelIfEnabledOrUnknown;
 import static org.objectweb.asm.Opcodes.GETSTATIC;
 import static org.objectweb.asm.Opcodes.INVOKESTATIC;
 import static org.objectweb.asm.Opcodes.PUTSTATIC;
@@ -127,12 +128,12 @@
             DexEncodedField.syntheticBuilder()
                 .setField(this.initializedValueField)
                 .setAccessFlags(FieldAccessFlags.createPrivateStaticSynthetic())
-                .setApiLevel(AndroidApiLevel.minApiLevelIfEnabledOrUnknown(appView))
+                .setApiLevel(minApiLevelIfEnabledOrUnknown(appView))
                 .build(),
             DexEncodedField.syntheticBuilder()
                 .setField(this.constantValueField)
                 .setAccessFlags(FieldAccessFlags.createPrivateStaticSynthetic())
-                .setApiLevel(AndroidApiLevel.minApiLevelIfEnabledOrUnknown(appView))
+                .setApiLevel(minApiLevelIfEnabledOrUnknown(appView))
                 .build()));
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPICallbackSynthesizor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPICallbackSynthesizer.java
similarity index 98%
rename from src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPICallbackSynthesizor.java
rename to src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPICallbackSynthesizer.java
index 3e0143a..92d7b92 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPICallbackSynthesizor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPICallbackSynthesizer.java
@@ -30,7 +30,7 @@
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
 
-public class DesugaredLibraryAPICallbackSynthesizor implements CfPostProcessingDesugaring {
+public class DesugaredLibraryAPICallbackSynthesizer implements CfPostProcessingDesugaring {
 
   private final AppView<?> appView;
   private final DexItemFactory factory;
@@ -38,7 +38,7 @@
   private final DesugaredLibraryWrapperSynthesizer wrapperSynthesizor;
   private final Set<DexMethod> trackedCallBackAPIs;
 
-  public DesugaredLibraryAPICallbackSynthesizor(AppView<?> appView) {
+  public DesugaredLibraryAPICallbackSynthesizer(AppView<?> appView) {
     this.appView = appView;
     this.factory = appView.dexItemFactory();
     this.wrapperSynthesizor = new DesugaredLibraryWrapperSynthesizer(appView);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizer.java
similarity index 97%
rename from src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java
rename to src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizer.java
index 9e50613..faa5857 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizer.java
@@ -36,7 +36,7 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-public class DesugaredLibraryRetargeterLibraryTypeSynthesizor {
+public class DesugaredLibraryRetargeterLibraryTypeSynthesizer {
 
   public static void checkForAssumedLibraryTypes(AppView<?> appView) {
     Map<DexString, Map<DexType, DexType>> retargetCoreLibMember =
@@ -144,6 +144,7 @@
                               MethodAccessFlags.fromCfAccessFlags(
                                   Constants.ACC_PUBLIC | Constants.ACC_STATIC, false))
                           .setCode(null)
+                          .setApiLevelForDefinition(method.getApiLevelForDefinition())
                           .build());
             }
           });
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterPostProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterPostProcessor.java
index b6200cb..c268bfd 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterPostProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterPostProcessor.java
@@ -133,8 +133,7 @@
   }
 
   private DexEncodedMethod createForwardingMethod(DexClassAndMethod target, DexClass clazz) {
-    // NOTE: Never add a forwarding method to methods of classes unknown or coming from
-    // android.jar
+    // NOTE: Never add a forwarding method to methods of classes unknown or coming from android.jar
     // even if this results in invalid code, these classes are never desugared.
     // In desugared library, emulated interface methods can be overridden by retarget lib members.
     DexMethod forwardMethod =
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
index 9bc1a8e..4feafe3 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8.ir.desugar.desugaredlibrary;
 
+import static com.android.tools.r8.utils.AndroidApiLevel.NOT_SET;
+
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.CfCode;
@@ -561,6 +563,8 @@
         .setMethod(methodToInstall)
         .setAccessFlags(newFlags)
         .setCode(code)
+        .setApiLevelForDefinition(template.getApiLevelForDefinition())
+        .setApiLevelForCode(code == null ? NOT_SET : template.getApiLevelForCode())
         .build();
   }
 
@@ -620,6 +624,8 @@
     return DexEncodedField.syntheticBuilder()
         .setField(field)
         .setAccessFlags(fieldAccessFlags)
+        // The api level is computed when tracing.
+        .disableAndroidApiLevelCheck()
         .build();
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
index 2b8e3c7..d32b3d3 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8.ir.desugar.itf;
 
+import static com.android.tools.r8.utils.AndroidApiLevel.minApiLevelIfEnabledOrUnknown;
+
 import com.android.tools.r8.cf.code.CfInvoke;
 import com.android.tools.r8.cf.code.CfNew;
 import com.android.tools.r8.cf.code.CfStackInstruction;
@@ -802,6 +804,8 @@
             .setAccessFlags(accessFlags)
             .setCode(
                 createExceptionThrowingCfCode(newMethod, accessFlags, errorType, dexItemFactory))
+            .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+            .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
             .build();
     addSyntheticMethod(clazz.asProgramClass(), newEncodedMethod);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
index a2a2bf9..bb1a427 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.ir.desugar.itf;
 
+
 import com.android.tools.r8.cf.CfVersion;
 import com.android.tools.r8.cf.code.CfFieldInstruction;
 import com.android.tools.r8.cf.code.CfInitClass;
@@ -459,6 +460,8 @@
         .setAccessFlags(
             FieldAccessFlags.builder().setPackagePrivate().setStatic().setSynthetic().build())
         .setStaticValue(DexValueInt.DEFAULT)
+        // The api level is computed when tracing.
+        .disableAndroidApiLevelCheck()
         .build();
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
index 627f8af..294dbb8 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
@@ -290,6 +290,8 @@
             .setMethod(method)
             .setAccessFlags(methodAccessFlags)
             .setCode(null)
+            // Will be traced by the enqueuer.
+            .disableAndroidApiLevelCheck()
             .build();
     encodedMethod.setCode(provider.generateCfCode(), appView);
     return new ProgramMethod(clazz, encodedMethod);
@@ -587,6 +589,8 @@
             .setMethod(factory.recordMembers.init)
             .setAccessFlags(methodAccessFlags)
             .setCode(null)
+            // Will be traced by the enqueuer.
+            .disableAndroidApiLevelCheck()
             .build();
     init.setCode(
         new CallObjectInitCfCodeProvider(appView, factory.recordTagType).generateCfCode(), appView);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java b/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
index 2b15739..71f01da 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8.ir.optimize;
 
+import static com.android.tools.r8.utils.AndroidApiLevel.minApiLevelIfEnabledOrUnknown;
+
 import com.android.tools.r8.cf.CfVersion;
 import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
 import com.android.tools.r8.contexts.CompilationContext.UniqueContext;
@@ -70,6 +72,8 @@
                 builder
                     .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
                     .setClassFileVersion(CfVersion.V1_8)
+                    .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+                    .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
                     .setCode(
                         method -> getThrowClassCastExceptionIfNotNullCodeTemplate(method, options))
                     .setProto(proto));
@@ -98,6 +102,8 @@
                 builder
                     .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
                     .setClassFileVersion(CfVersion.V1_8)
+                    .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+                    .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
                     .setCode(method -> getThrowIllegalAccessErrorCodeTemplate(method, options))
                     .setProto(proto));
     return new UtilityMethodForCodeOptimizations(syntheticMethod);
@@ -124,6 +130,8 @@
                 builder
                     .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
                     .setClassFileVersion(CfVersion.V1_8)
+                    .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+                    .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
                     .setCode(
                         method -> getThrowIncompatibleClassChangeErrorCodeTemplate(method, options))
                     .setProto(proto));
@@ -152,6 +160,8 @@
                 builder
                     .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
                     .setClassFileVersion(CfVersion.V1_8)
+                    .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+                    .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
                     .setCode(method -> getThrowNoSuchMethodErrorCodeTemplate(method, options))
                     .setProto(proto));
     return new UtilityMethodForCodeOptimizations(syntheticMethod);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryFieldSynthesis.java b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryFieldSynthesis.java
index 2c012f0..27fa69a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryFieldSynthesis.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryFieldSynthesis.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.ir.optimize.library;
 
 import static com.android.tools.r8.graph.DexLibraryClass.asLibraryClassOrNull;
+import static com.android.tools.r8.utils.AndroidApiLevel.minApiLevelIfEnabledOrUnknown;
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.graph.AppView;
@@ -38,6 +39,9 @@
                       .setAccessFlags(
                           FieldAccessFlags.fromCfAccessFlags(
                               Constants.ACC_PRIVATE | Constants.ACC_FINAL))
+                      .setApiLevel(minApiLevelIfEnabledOrUnknown(appView))
+                      // Will be traced by the enqueuer.
+                      .disableAndroidApiLevelCheck()
                       .build());
             }
           });
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 895e610..a12eff1 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -3051,6 +3051,8 @@
     DexClassAndMethod target = resolution.lookupInvokeSuperTarget(from.getHolder(), appInfo);
     if (target == null) {
       failedMethodResolutionTargets.add(resolution.getResolvedMethod().getReference());
+      analyses.forEach(
+          analyses -> analyses.notifyFailedMethodResolutionTarget(resolution.getResolvedMethod()));
       return;
     }
 
@@ -3117,9 +3119,7 @@
         && appView.options().getProguardConfiguration().getKeepAttributes().signature) {
       registerAnalysis(new GenericSignatureEnqueuerAnalysis(enqueuerDefinitionSupplier));
     }
-    if (appView.options().apiModelingOptions().enableApiCallerIdentification) {
-      registerAnalysis(new ApiModelAnalysis(appView, apiReferenceLevelCache));
-    }
+    registerAnalysis(new ApiModelAnalysis(appView, apiReferenceLevelCache));
 
     // Transfer the minimum keep info from the root set into the Enqueuer state.
     includeMinimumKeepInfo(rootSet);
diff --git a/src/main/java/com/android/tools/r8/shaking/TreePruner.java b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
index 276d737..43d2d16 100644
--- a/src/main/java/com/android/tools/r8/shaking/TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
@@ -23,6 +23,7 @@
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback.OptimizationInfoFixer;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
 import com.android.tools.r8.logging.Log;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.ExceptionUtils;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.IterableUtils;
@@ -333,6 +334,11 @@
         // Private methods and static methods can only be targeted yet non-live as the result of
         // an invalid invoke. They will not actually be called at runtime but we have to keep them
         // as non-abstract (see above) to produce the same failure mode.
+        if (!allowAbstract) {
+          // If the method was not marked as live and we cannot make it abstract, set the api level
+          // to be min or unknown.
+          method.setApiLevelForCode(AndroidApiLevel.minApiLevelIfEnabledOrUnknown(appView));
+        }
         reachableMethods.add(
             allowAbstract ? method.toAbstractMethod() : method.toEmptyThrowingMethod(options));
       } else {
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 6e06948..8128db2 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -1449,8 +1449,8 @@
               .setClassFileVersion(classFileVersion)
               .setApiLevelForDefinition(method.getApiLevelForDefinition())
               .setApiLevelForCode(method.getApiLevelForDefinition())
+              .setIsLibraryMethodOverride(method.isLibraryMethodOverride())
               .build();
-      bridge.setLibraryMethodOverride(method.isLibraryMethodOverride());
       if (method.accessFlags.isPromotedToPublic()) {
         // The bridge is now the public method serving the role of the original method, and should
         // reflect that this method was publicized.
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
index 0e45bd8..e867c59 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
@@ -16,7 +16,6 @@
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.graph.ParameterAnnotationsList;
 import com.android.tools.r8.synthesis.SyntheticNaming.SyntheticKind;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import java.util.function.Consumer;
 
 public class SyntheticMethodBuilder {
@@ -116,8 +115,8 @@
             .setParameterAnnotations(parameterAnnotationsList)
             .setCode(code)
             .setClassFileVersion(classFileVersion)
-            .setApiLevelForDefinition(AndroidApiLevel.UNKNOWN)
-            .setApiLevelForCode(AndroidApiLevel.UNKNOWN)
+            // TODO(b/188388130): This should pass in api level directly.
+            .disableAndroidApiLevelCheck()
             .build();
     assert isValidSyntheticMethod(method, syntheticKind);
     if (onBuildConsumer != null) {
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 e127d6c..c2f78cf 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
@@ -42,7 +42,8 @@
   Q(29),
   R(30),
   S(31),
-  UNKNOWN(10000);
+  UNKNOWN(10000),
+  NOT_SET(10001);
 
   // When updating LATEST and a new version goes stable, add a new api-versions.xml to third_party
   // and update the version and generated jar in AndroidApiDatabaseBuilderGeneratorTest.
@@ -77,8 +78,9 @@
   }
 
   public static AndroidApiLevel minApiLevelIfEnabledOrUnknown(AppView<?> appView) {
-    return appView.options().apiModelingOptions().enableApiCallerIdentification
-        ? appView.options().minApiLevel
+    InternalOptions options = appView.options();
+    return options.apiModelingOptions().enableApiCallerIdentification
+        ? options.minApiLevel
         : UNKNOWN;
   }
 
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index a457e50..ec57f95 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -869,6 +869,7 @@
       case J_MR2:
       case K_WATCH:
       case UNKNOWN:
+      case NOT_SET:
         return false;
       default:
         return true;
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
index 5e1b8c0..905529a 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
@@ -126,7 +126,7 @@
             .parse(StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()));
 
     for (AndroidApiLevel apiLevel : AndroidApiLevel.values()) {
-      if (apiLevel == AndroidApiLevel.UNKNOWN) {
+      if (apiLevel == AndroidApiLevel.UNKNOWN || apiLevel == AndroidApiLevel.NOT_SET) {
         continue;
       }
       Path compileApiLevelDirectory = directory.resolve("compile_api_level_" + apiLevel.getLevel());
diff --git a/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java b/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
index afc7a62..ce5a517 100644
--- a/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
+++ b/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
@@ -156,6 +156,7 @@
             .setAccessFlags(flags)
             .setCode(code)
             .disableMethodNotNullCheck()
+            .disableAndroidApiLevelCheck()
             .build();
     return new JumboStringRewriter(method, string, factory).rewrite();
   }
diff --git a/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java b/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
index d8e2db4..a24f51f 100644
--- a/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
@@ -55,6 +55,7 @@
                 .setMethod(signature)
                 .setAccessFlags(MethodAccessFlags.fromDexAccessFlags(0))
                 .setCode(null)
+                .disableAndroidApiLevelCheck()
                 .build());
     return new Node(method);
   }
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 be4f6de..04921e2 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -864,6 +864,7 @@
                 .setMethod(voidReturnMethod)
                 .setAccessFlags(access)
                 .setCode(code)
+                .disableAndroidApiLevelCheck()
                 .build();
         ProgramMethod programMethod = new ProgramMethod(programClass, method);
         IRCode ir = code.buildIR(programMethod, appView, Origin.unknown());
diff --git a/src/test/java/com/android/tools/r8/shaking/addconfigurationdebugging/ConfigurationDebuggingTest.java b/src/test/java/com/android/tools/r8/shaking/addconfigurationdebugging/ConfigurationDebuggingTest.java
index 7cb0d57..c7630ba 100644
--- a/src/test/java/com/android/tools/r8/shaking/addconfigurationdebugging/ConfigurationDebuggingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/addconfigurationdebugging/ConfigurationDebuggingTest.java
@@ -15,7 +15,6 @@
 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.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
@@ -96,7 +95,7 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().build();
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
   public ConfigurationDebuggingTest(TestParameters parameters) {
@@ -111,7 +110,7 @@
             .addKeepRules("-addconfigurationdebugging")
             .addKeepRules("-keep class **.TestClass { <init>(); }")
             .noMinification()
-            .setMinApi(parameters.getRuntime())
+            .setMinApi(parameters.getApiLevel())
             .compile()
             .inspect(this::inspect)
             .writeToZip();
@@ -119,10 +118,10 @@
     R8FullTestBuilder builder =
         testForR8(parameters.getBackend())
             .addLibraryClasses(BaseClass.class, UninstantiatedClass.class, TestClass.class)
-            .addLibraryFiles(ToolHelper.getDefaultAndroidJar())
+            .addDefaultRuntimeLibrary(parameters)
             .addProgramClasses(Caller.class)
             .addKeepMainRule(Caller.class)
-            .setMinApi(parameters.getRuntime());
+            .setMinApi(parameters.getApiLevel());
     R8TestRunResult result =
         builder
             .compile()
