diff --git a/java/com/android/contacts/common/dialog/CallSubjectDialog.java b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
index 48f292c..bbf31e8 100644
--- a/java/com/android/contacts/common/dialog/CallSubjectDialog.java
+++ b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
@@ -23,8 +23,6 @@
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
 import android.telecom.PhoneAccount;
@@ -519,12 +517,6 @@
    * current phone account.
    */
   private void loadConfiguration() {
-    // Only attempt to load configuration from the phone account extras if the SDK is N or
-    // later.  If we've got a prior SDK the default encoding and message length will suffice.
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return;
-    }
-
     if (mPhoneAccountHandle == null) {
       return;
     }
diff --git a/java/com/android/dialer/app/AndroidManifest.xml b/java/com/android/dialer/app/AndroidManifest.xml
index 0c1a362..e77bbe2 100644
--- a/java/com/android/dialer/app/AndroidManifest.xml
+++ b/java/com/android/dialer/app/AndroidManifest.xml
@@ -55,7 +55,7 @@
   <uses-permission android:name="android.permission.STOP_APP_SWITCHES"/>
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <application android:theme="@style/Theme.AppCompat">
diff --git a/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java b/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
index 08f5585..b306e75 100644
--- a/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
+++ b/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
@@ -34,7 +34,8 @@
 import com.android.dialer.util.PermissionsUtil;
 import com.android.voicemail.VoicemailClient;
 
-@TargetApi(VERSION_CODES.M)
+/** TODO(calderwoodra): documentation */
+@TargetApi(VERSION_CODES.N)
 public class CallLogAsyncTaskUtil {
 
   private static final String TAG = "CallLogAsyncTaskUtil";
@@ -155,6 +156,7 @@
     UPDATE_DURATION,
   }
 
+  /** TODO(calderwoodra): documentation */
   public interface CallLogAsyncTaskListener {
     void onDeleteVoicemail();
   }
diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
index 3afb6bb..ce6e5ba 100644
--- a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
+++ b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
@@ -51,7 +51,7 @@
 import java.util.concurrent.TimeUnit;
 
 /** Helper class operating on call log notifications. */
-@TargetApi(Build.VERSION_CODES.M)
+@TargetApi(Build.VERSION_CODES.N)
 public class CallLogNotificationsQueryHelper {
 
   @VisibleForTesting
@@ -341,14 +341,14 @@
 
     @Override
     @Nullable
-    @TargetApi(Build.VERSION_CODES.M)
+    @TargetApi(Build.VERSION_CODES.N)
     public List<NewCall> query(int type) {
       return query(type, NO_THRESHOLD);
     }
 
     @Override
     @Nullable
-    @TargetApi(Build.VERSION_CODES.M)
+    @TargetApi(Build.VERSION_CODES.N)
     @SuppressWarnings("MissingPermission")
     public List<NewCall> query(int type, long thresholdMillis) {
       if (!PermissionsUtil.hasPermission(context, Manifest.permission.READ_CALL_LOG)) {
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
index 78d3075..cba389c 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
@@ -233,9 +233,6 @@
   @Nullable
   private static Uri getVoicemailRingtoneUri(
       @NonNull Context context, @Nullable PhoneAccountHandle handle) {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return null;
-    }
     if (handle == null) {
       LogUtil.i("VisualVoicemailNotifier.getVoicemailRingtoneUri", "null handle, getting fallback");
       handle = getFallbackAccount(context);
@@ -251,9 +248,6 @@
 
   private static int getNotificationDefaultFlags(
       @NonNull Context context, @Nullable PhoneAccountHandle handle) {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return Notification.DEFAULT_ALL;
-    }
     if (handle == null) {
       LogUtil.i(
           "VisualVoicemailNotifier.getNotificationDefaultFlags", "null handle, getting fallback");
diff --git a/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java b/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
index ba61601..754ab27 100644
--- a/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
+++ b/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
@@ -22,7 +22,6 @@
 import android.app.job.JobService;
 import android.content.ComponentName;
 import android.content.Context;
-import android.os.Build;
 import android.provider.VoicemailContract;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.constants.ScheduledJobIds;
@@ -37,12 +36,8 @@
    * notification is visible.
    */
   public static void scheduleJob(Context context) {
-    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
-      LogUtil.i("VoicemailNotificationJobService.scheduleJob", "not supported");
-    } else {
-      context.getSystemService(JobScheduler.class).schedule(getJobInfo(context));
-      LogUtil.i("VoicemailNotificationJobService.scheduleJob", "job scheduled");
-    }
+    context.getSystemService(JobScheduler.class).schedule(getJobInfo(context));
+    LogUtil.i("VoicemailNotificationJobService.scheduleJob", "job scheduled");
   }
 
   /**
diff --git a/java/com/android/dialer/assisteddialing/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/AndroidManifest.xml
index a19af3b..0a5b613 100644
--- a/java/com/android/dialer/assisteddialing/AndroidManifest.xml
+++ b/java/com/android/dialer/assisteddialing/AndroidManifest.xml
@@ -16,7 +16,7 @@
     package="com.android.dialer.assisteddialing">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
 </manifest>
diff --git a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
index 3e79de3..d59056e 100644
--- a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
+++ b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
@@ -16,7 +16,7 @@
     package="com.android.dialer.assisteddialing.ui">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
   <application>
diff --git a/java/com/android/dialer/binary/google/AndroidManifest.xml b/java/com/android/dialer/binary/google/AndroidManifest.xml
index c1f1a59..f6ac430 100644
--- a/java/com/android/dialer/binary/google/AndroidManifest.xml
+++ b/java/com/android/dialer/binary/google/AndroidManifest.xml
@@ -20,7 +20,7 @@
   android:versionName="19.0">
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <uses-permission android:name="android.permission.CALL_PHONE"/>
diff --git a/java/com/android/dialer/blocking/BlockedNumbersMigrator.java b/java/com/android/dialer/blocking/BlockedNumbersMigrator.java
index 88f474a..61ebf2f 100644
--- a/java/com/android/dialer/blocking/BlockedNumbersMigrator.java
+++ b/java/com/android/dialer/blocking/BlockedNumbersMigrator.java
@@ -35,7 +35,7 @@
  * Class which should be used to migrate numbers from {@link FilteredNumberContract} blocking to
  * {@link android.provider.BlockedNumberContract} blocking.
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class BlockedNumbersMigrator {
 
   private final Context context;
diff --git a/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java b/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
index 09fd5f0..8be479c 100644
--- a/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
+++ b/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
@@ -37,6 +37,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+/** TODO(calderwoodra): documentation */
 public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler {
 
   public static final int INVALID_ID = -1;
@@ -199,7 +200,7 @@
    *
    * @return blocked id.
    */
-  @TargetApi(VERSION_CODES.M)
+  @TargetApi(VERSION_CODES.N)
   @Nullable
   public Integer getBlockedIdSynchronous(@Nullable String number, String countryIso) {
     Assert.isWorkerThread();
@@ -382,6 +383,7 @@
         null);
   }
 
+  /** TODO(calderwoodra): documentation */
   public interface OnCheckBlockedListener {
 
     /**
@@ -392,6 +394,7 @@
     void onCheckComplete(Integer id);
   }
 
+  /** TODO(calderwoodra): documentation */
   public interface OnBlockNumberListener {
 
     /**
@@ -402,6 +405,7 @@
     void onBlockComplete(Uri uri);
   }
 
+  /** TODO(calderwoodra): documentation */
   public interface OnUnblockNumberListener {
 
     /**
@@ -413,6 +417,7 @@
     void onUnblockComplete(int rows, ContentValues values);
   }
 
+  /** TODO(calderwoodra): documentation */
   interface OnHasBlockedNumbersListener {
 
     /**
diff --git a/java/com/android/dialer/blocking/FilteredNumberCompat.java b/java/com/android/dialer/blocking/FilteredNumberCompat.java
index bea84e8..b0af45c 100644
--- a/java/com/android/dialer/blocking/FilteredNumberCompat.java
+++ b/java/com/android/dialer/blocking/FilteredNumberCompat.java
@@ -16,16 +16,12 @@
 
 package com.android.dialer.blocking;
 
-import android.annotation.TargetApi;
 import android.app.FragmentManager;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
-import android.os.UserManager;
 import android.preference.PreferenceManager;
 import android.provider.BlockedNumberContract;
 import android.provider.BlockedNumberContract.BlockedNumbers;
@@ -110,7 +106,7 @@
    *     otherwise.
    */
   public static boolean canUseNewFiltering() {
-    return VERSION.SDK_INT >= VERSION_CODES.N;
+    return true;
   }
 
   /**
@@ -162,16 +158,14 @@
 
   private static Uri getBaseUri(Context context) {
     // Explicit version check to aid static analysis
-    return useNewFiltering(context) && VERSION.SDK_INT >= VERSION_CODES.N
-        ? BlockedNumbers.CONTENT_URI
-        : FilteredNumber.CONTENT_URI;
+    return useNewFiltering(context) ? BlockedNumbers.CONTENT_URI : FilteredNumber.CONTENT_URI;
   }
 
   /**
    * Removes any null column names from the given projection array. This method is intended to be
    * used to strip out any column names that aren't available in every version of number blocking.
    * Example: {@literal getContext().getContentResolver().query( someUri, // Filtering ensures that
-   * no non-existant columns are queried FilteredNumberCompat.filter(new String[]
+   * no non-existent columns are queried FilteredNumberCompat.filter(new String[]
    * {FilteredNumberCompat.getIdColumnName(), FilteredNumberCompat.getTypeColumnName()},
    * FilteredNumberCompat.getE164NumberColumnName() + " = ?", new String[] {e164Number}); }
    *
@@ -249,9 +243,7 @@
    */
   public static Intent createManageBlockedNumbersIntent(Context context) {
     // Explicit version check to aid static analysis
-    if (canUseNewFiltering()
-        && hasMigratedToNewBlocking(context)
-        && VERSION.SDK_INT >= VERSION_CODES.N) {
+    if (canUseNewFiltering() && hasMigratedToNewBlocking(context)) {
       return context.getSystemService(TelecomManager.class).createManageBlockedNumbersIntent();
     }
     Intent intent = new Intent("com.android.dialer.action.BLOCKED_NUMBERS_SETTINGS");
@@ -270,11 +262,6 @@
       return canAttemptBlockOperationsForTest;
     }
 
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      // Dialer blocking, must be primary user
-      return context.getSystemService(UserManager.class).isSystemUser();
-    }
-
     // Great Wall blocking, must be primary user and the default or system dialer
     // TODO(maxwelb): check that we're the system Dialer
     return TelecomUtil.isDefaultDialer(context)
@@ -294,10 +281,6 @@
    *     otherwise.
    */
   public static boolean canCurrentUserOpenBlockSettings(Context context) {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      // Dialer blocking, must be primary user
-      return context.getSystemService(UserManager.class).isSystemUser();
-    }
     // BlockedNumberContract blocking, verify through Contract API
     return TelecomUtil.isDefaultDialer(context)
         && safeBlockedNumbersContractCanCurrentUserBlockNumbers(context);
@@ -312,7 +295,6 @@
    * @return the result of BlockedNumberContract#canCurrentUserBlockNumbers, or {@code false} if an
    *     exception was thrown.
    */
-  @TargetApi(VERSION_CODES.N)
   private static boolean safeBlockedNumbersContractCanCurrentUserBlockNumbers(Context context) {
     try {
       return BlockedNumberContract.canCurrentUserBlockNumbers(context);
diff --git a/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java b/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java
index 725cea7..0f1ab5f 100644
--- a/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java
+++ b/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java
@@ -37,7 +37,7 @@
 import java.io.OutputStream;
 
 /** Task for copying and resizing images to be shared with RCS process. */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 class CopyAndResizeImageWorker implements Worker<Uri, Pair<File, String>> {
   private static final String MIME_TYPE = "image/jpeg";
 
diff --git a/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java b/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
index 69f5469..c18e22d 100644
--- a/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
+++ b/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
@@ -38,7 +38,7 @@
 import java.io.OutputStream;
 
 /** Persisting image routine. */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class ImagePersistWorker implements Worker<Void, Result> {
   private int width;
   private int height;
diff --git a/java/com/android/dialer/calllog/AndroidManifest.xml b/java/com/android/dialer/calllog/AndroidManifest.xml
index 69731fe..7c904d9 100644
--- a/java/com/android/dialer/calllog/AndroidManifest.xml
+++ b/java/com/android/dialer/calllog/AndroidManifest.xml
@@ -17,7 +17,7 @@
     package="com.android.dialer.calllog">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
   <application>
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
index 9a80af2..7fc474a 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
@@ -92,7 +92,7 @@
     return true;
   }
 
-  @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+  @TargetApi(Build.VERSION_CODES.N) // Uses try-with-resources
   @Nullable
   @Override
   public Cursor query(
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 6fd19dd..dce51b7 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -256,7 +256,7 @@
     }
   }
 
-  @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+  @TargetApi(Build.VERSION_CODES.N) // Uses try-with-resources
   private void handleInsertsAndUpdates(
       Context appContext, CallLogMutations mutations, Set<Long> existingAnnotatedCallLogIds) {
     long previousTimestampProcessed = sharedPreferences.getLong(PREF_LAST_TIMESTAMP_PROCESSED, 0L);
@@ -481,7 +481,7 @@
     }
   }
 
-  @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+  @TargetApi(Build.VERSION_CODES.N) // Uses try-with-resources
   private static Set<Long> getAnnotatedCallLogIds(Context appContext) {
     ArraySet<Long> ids = new ArraySet<>();
 
@@ -510,7 +510,7 @@
     return ids;
   }
 
-  @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+  @TargetApi(Build.VERSION_CODES.N) // Uses try-with-resources
   private static Set<Long> getIdsFromSystemCallLogThatMatch(
       Context appContext, Set<Long> matchingIds) {
     ArraySet<Long> ids = new ArraySet<>();
diff --git a/java/com/android/dialer/calllogutils/CallLogDates.java b/java/com/android/dialer/calllogutils/CallLogDates.java
index fe3c0c3..5a63c3c 100644
--- a/java/com/android/dialer/calllogutils/CallLogDates.java
+++ b/java/com/android/dialer/calllogutils/CallLogDates.java
@@ -19,8 +19,6 @@
 import android.content.Context;
 import android.icu.lang.UCharacter;
 import android.icu.text.BreakIterator;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.text.format.DateUtils;
 import java.util.Calendar;
 import java.util.Locale;
@@ -145,12 +143,6 @@
     // of the string is not usually capitalized. For example, "Wednesdsay" in Uzbek is "chorshanba”
     // (not capitalized). To handle this issue we apply title casing to the start of the sentence so
     // that "chorshanba, 2016 may 25,20:02" becomes "Chorshanba, 2016 may 25,20:02".
-    //
-    // The ICU library was not available in Android until N, so we can only do this in N+ devices.
-    // Pre-N devices will still see incorrect capitalization in some languages.
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return value;
-    }
 
     // Using the ICU library is safer than just applying toUpperCase() on the first letter of the
     // word because in some languages, there can be multiple starting characters which should be
diff --git a/java/com/android/dialer/compat/CompatUtils.java b/java/com/android/dialer/compat/CompatUtils.java
index 584f205..d09f8b0 100644
--- a/java/com/android/dialer/compat/CompatUtils.java
+++ b/java/com/android/dialer/compat/CompatUtils.java
@@ -16,17 +16,17 @@
 package com.android.dialer.compat;
 
 import android.content.Context;
-import android.os.Build;
 import android.os.Build.VERSION;
 import android.os.Build.VERSION_CODES;
 import android.os.LocaleList;
 import java.util.Locale;
 
+/** TODO(calderwoodra): documentation */
 public final class CompatUtils {
 
   /** PrioritizedMimeType is added in API level 23. */
   public static boolean hasPrioritizedMimeType() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M;
+    return true;
   }
 
   /**
@@ -36,8 +36,7 @@
    * @return {@code true} if multi-SIM capability is available, {@code false} otherwise.
    */
   public static boolean isMSIMCompatible() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
-        >= Build.VERSION_CODES.LOLLIPOP_MR1;
+    return true;
   }
 
   /**
@@ -47,7 +46,7 @@
    * @return {@code true} if video calling is allowed, {@code false} otherwise.
    */
   public static boolean isVideoCompatible() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP) >= Build.VERSION_CODES.M;
+    return true;
   }
 
   /**
@@ -57,7 +56,7 @@
    * @return {@code true} if video presence checking is allowed, {@code false} otherwise.
    */
   public static boolean isVideoPresenceCompatible() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) > Build.VERSION_CODES.M;
+    return true;
   }
 
   /**
@@ -67,7 +66,7 @@
    * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
    */
   public static boolean isCallSubjectCompatible() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP) >= Build.VERSION_CODES.M;
+    return true;
   }
 
   /** Returns locale of the device. */
diff --git a/java/com/android/dialer/compat/SdkVersionOverride.java b/java/com/android/dialer/compat/SdkVersionOverride.java
deleted file mode 100644
index 1d253a3..0000000
--- a/java/com/android/dialer/compat/SdkVersionOverride.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.dialer.compat;
-
-import android.os.Build.VERSION;
-
-/**
- * Class used to override the current sdk version to test specific branches of compatibility logic.
- * When such branching occurs, use {@link #getSdkVersion(int)} rather than explicitly calling {@link
- * VERSION#SDK_INT}. This allows the sdk version to be forced to a specific value.
- */
-public class SdkVersionOverride {
-
-  /** Flag used to determine if override sdk versions are returned. */
-  private static final boolean ALLOW_OVERRIDE_VERSION = false;
-
-  private SdkVersionOverride() {}
-
-  /**
-   * Gets the sdk version
-   *
-   * @param overrideVersion the version to attempt using
-   * @return overrideVersion if the {@link #ALLOW_OVERRIDE_VERSION} flag is set to {@code true},
-   *     otherwise the current version
-   */
-  public static int getSdkVersion(int overrideVersion) {
-    return ALLOW_OVERRIDE_VERSION ? overrideVersion : VERSION.SDK_INT;
-  }
-}
diff --git a/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java b/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
index c4ed6e6..655540b 100644
--- a/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
+++ b/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
@@ -25,7 +25,6 @@
 import android.support.v4.os.BuildCompat;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
-import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.telecom.TelecomUtil;
 import java.lang.reflect.InvocationTargetException;
@@ -133,9 +132,6 @@
   @Nullable
   public static Uri getVoicemailRingtoneUri(
       TelephonyManager telephonyManager, PhoneAccountHandle accountHandle) {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return null;
-    }
     return telephonyManager.getVoicemailRingtoneUri(accountHandle);
   }
 
@@ -149,8 +145,7 @@
    */
   public static boolean isVoicemailVibrationEnabled(
       TelephonyManager telephonyManager, PhoneAccountHandle accountHandle) {
-    return VERSION.SDK_INT < VERSION_CODES.N
-        || telephonyManager.isVoicemailVibrationEnabled(accountHandle);
+    return telephonyManager.isVoicemailVibrationEnabled(accountHandle);
   }
 
   /**
@@ -159,9 +154,6 @@
    */
   public static void setVisualVoicemailEnabled(
       TelephonyManager telephonyManager, PhoneAccountHandle handle, boolean enabled) {
-    if (VERSION.SDK_INT < VERSION_CODES.N_MR1) {
-      Assert.fail("setVisualVoicemailEnabled called on pre-NMR1");
-    }
     try {
       TelephonyManager.class
           .getMethod("setVisualVoicemailEnabled", PhoneAccountHandle.class, boolean.class)
@@ -177,9 +169,6 @@
    */
   public static boolean isVisualVoicemailEnabled(
       TelephonyManager telephonyManager, PhoneAccountHandle handle) {
-    if (VERSION.SDK_INT < VERSION_CODES.N_MR1) {
-      Assert.fail("isVisualVoicemailEnabled called on pre-NMR1");
-    }
     try {
       return (boolean)
           TelephonyManager.class
diff --git a/java/com/android/dialer/database/CallLogQueryHandler.java b/java/com/android/dialer/database/CallLogQueryHandler.java
index 92c49a0..e974cc4 100644
--- a/java/com/android/dialer/database/CallLogQueryHandler.java
+++ b/java/com/android/dialer/database/CallLogQueryHandler.java
@@ -26,7 +26,6 @@
 import android.database.sqlite.SQLiteException;
 import android.database.sqlite.SQLiteFullException;
 import android.net.Uri;
-import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -36,7 +35,6 @@
 import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.compat.AppCompatConstants;
-import com.android.dialer.compat.SdkVersionOverride;
 import com.android.dialer.phonenumbercache.CallLogQuery;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.PermissionsUtil;
@@ -157,9 +155,7 @@
     selectionArgs.add(Integer.toString(AppCompatConstants.CALLS_BLOCKED_TYPE));
 
     // Ignore voicemails marked as deleted
-    if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-      where.append(" AND (").append(Voicemails.DELETED).append(" = 0)");
-    }
+    where.append(" AND (").append(Voicemails.DELETED).append(" = 0)");
 
     if (newOnly) {
       where.append(" AND (").append(Calls.NEW).append(" = 1)");
diff --git a/java/com/android/dialer/oem/CequintCallerIdManager.java b/java/com/android/dialer/oem/CequintCallerIdManager.java
index 48a5985..ee865bc 100644
--- a/java/com/android/dialer/oem/CequintCallerIdManager.java
+++ b/java/com/android/dialer/oem/CequintCallerIdManager.java
@@ -41,7 +41,7 @@
  * Cequint Caller ID. It also caches any information fetched in static map, which lives through
  * whole application lifecycle.
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class CequintCallerIdManager {
 
   private static final String CONFIG_CALLER_ID_ENABLED = "config_caller_id_enabled";
diff --git a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
index a3d51a7..fe6642e 100644
--- a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
@@ -16,11 +16,8 @@
 
 package com.android.dialer.phonelookup.blockednumber;
 
-import android.annotation.TargetApi;
 import android.content.Context;
 import android.database.Cursor;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.provider.BlockedNumberContract.BlockedNumbers;
 import android.support.annotation.NonNull;
 import android.support.annotation.WorkerThread;
@@ -72,10 +69,7 @@
     if (!FilteredNumberCompat.useNewFiltering(appContext)) {
       return Futures.immediateFuture(SystemBlockedNumberInfo.getDefaultInstance());
     }
-    return executorService.submit(
-        () -> {
-          return queryNumbers(ImmutableSet.of(number)).get(number);
-        });
+    return executorService.submit(() -> queryNumbers(ImmutableSet.of(number)).get(number));
   }
 
   @Override
@@ -96,7 +90,6 @@
   }
 
   @WorkerThread
-  @TargetApi(VERSION_CODES.N)
   private ImmutableMap<DialerPhoneNumber, SystemBlockedNumberInfo> queryNumbers(
       ImmutableSet<DialerPhoneNumber> numbers) {
     Assert.isWorkerThread();
@@ -171,9 +164,6 @@
 
   @Override
   public void registerContentObservers() {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return;
-    }
     appContext
         .getContentResolver()
         .registerContentObserver(
diff --git a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
index 01f9669..d6e378c 100644
--- a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
+++ b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
@@ -14,14 +14,11 @@
 
 package com.android.dialer.phonenumbercache;
 
-import android.annotation.TargetApi;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteFullException;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -53,8 +50,6 @@
 import org.json.JSONObject;
 
 /** Utility class to look up the contact information for a given number. */
-// This class uses Java 7 language features, so it must target M+
-@TargetApi(VERSION_CODES.M)
 public class ContactInfoHelper {
 
   private static final String TAG = ContactInfoHelper.class.getSimpleName();
@@ -153,15 +148,6 @@
     // Get URI for the number in the PhoneLookup table, with a parameter to indicate whether
     // the number is a SIP number.
     Uri uri = PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI;
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      if (directoryId != -1) {
-        // ENTERPRISE_CONTENT_FILTER_URI in M doesn't support directory lookup
-        uri = PhoneLookup.CONTENT_FILTER_URI;
-      } else {
-        // a bug in M. PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, encodes twice.
-        number = Uri.encode(number);
-      }
-    }
     Uri.Builder builder =
         uri.buildUpon()
             .appendPath(number)
@@ -187,8 +173,7 @@
     info.type = c.getInt(CallLogQuery.CACHED_NUMBER_TYPE);
     info.label = c.getString(CallLogQuery.CACHED_NUMBER_LABEL);
     String matchedNumber = c.getString(CallLogQuery.CACHED_MATCHED_NUMBER);
-    String postDialDigits =
-        (VERSION.SDK_INT >= VERSION_CODES.N) ? c.getString(CallLogQuery.POST_DIAL_DIGITS) : "";
+    String postDialDigits = c.getString(CallLogQuery.POST_DIAL_DIGITS);
     info.number =
         (matchedNumber == null) ? c.getString(CallLogQuery.NUMBER) + postDialDigits : matchedNumber;
 
@@ -294,10 +279,7 @@
 
   private List<Long> getRemoteDirectories(Context context) {
     List<Long> remoteDirectories = new ArrayList<>();
-    Uri uri =
-        VERSION.SDK_INT >= VERSION_CODES.N
-            ? Directory.ENTERPRISE_CONTENT_URI
-            : Directory.CONTENT_URI;
+    Uri uri = Directory.ENTERPRISE_CONTENT_URI;
     Cursor cursor =
         context.getContentResolver().query(uri, new String[] {Directory._ID}, null, null, null);
     if (cursor == null) {
diff --git a/java/com/android/dialer/preferredsim/PreferredAccountWorker.java b/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
index bfaaa7c..aa61788 100644
--- a/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
+++ b/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
@@ -24,8 +24,6 @@
 import android.content.pm.ResolveInfo;
 import android.database.Cursor;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.PhoneLookup;
@@ -130,9 +128,6 @@
   private static Optional<String> getDataId(
       @NonNull Context context, @Nullable String phoneNumber) {
     Assert.isWorkerThread();
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return Optional.absent();
-    }
     try (Cursor cursor =
         context
             .getContentResolver()
diff --git a/java/com/android/dialer/shortcuts/AndroidManifest.xml b/java/com/android/dialer/shortcuts/AndroidManifest.xml
index 1170058..36f61fe 100644
--- a/java/com/android/dialer/shortcuts/AndroidManifest.xml
+++ b/java/com/android/dialer/shortcuts/AndroidManifest.xml
@@ -17,7 +17,7 @@
   package="com.android.dialer.shortcuts">
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <application android:theme="@style/Theme.AppCompat">
diff --git a/java/com/android/dialer/spannable/AndroidManifest.xml b/java/com/android/dialer/spannable/AndroidManifest.xml
index e256dc1..5fa6407 100644
--- a/java/com/android/dialer/spannable/AndroidManifest.xml
+++ b/java/com/android/dialer/spannable/AndroidManifest.xml
@@ -17,6 +17,6 @@
     package="com.android.dialer.spannable">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 </manifest>
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
index df58d41..e87dee3 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
@@ -32,7 +32,7 @@
 /**
  * Worker for {@link com.android.dialer.common.concurrent.DialerExecutors} to fetch voicemail status
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class VoicemailStatusWorker implements Worker<Context, List<VoicemailStatus>> {
 
   @Nullable
diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml
index 2417797..9a762fe 100644
--- a/java/com/android/incallui/AndroidManifest.xml
+++ b/java/com/android/incallui/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.android.incallui">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
   <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
diff --git a/java/com/android/incallui/CallerInfoAsyncQuery.java b/java/com/android/incallui/CallerInfoAsyncQuery.java
index 87dcc4f..4170cc3 100644
--- a/java/com/android/incallui/CallerInfoAsyncQuery.java
+++ b/java/com/android/incallui/CallerInfoAsyncQuery.java
@@ -53,7 +53,7 @@
  *
  * @see CallerInfo
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class CallerInfoAsyncQuery {
 
   /** Interface for a CallerInfoAsyncQueryHandler result return. */
diff --git a/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java b/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java
index 31b1711..aef5687 100644
--- a/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java
+++ b/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java
@@ -29,7 +29,7 @@
 import com.android.incallui.answer.impl.hint.PawSecretCodeListener.PawType;
 
 /** Decrypt the event payload to be shown if in a specific time range and the key is received. */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public final class PawImageLoaderImpl implements PawImageLoader {
 
   @Override
diff --git a/java/com/android/incallui/autoresizetext/AndroidManifest.xml b/java/com/android/incallui/autoresizetext/AndroidManifest.xml
index e26670e..1ba8b7c 100644
--- a/java/com/android/incallui/autoresizetext/AndroidManifest.xml
+++ b/java/com/android/incallui/autoresizetext/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.android.incallui.autoresizetext">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
   <application />
diff --git a/java/com/android/incallui/legacyblocking/DeleteBlockedCallTask.java b/java/com/android/incallui/legacyblocking/DeleteBlockedCallTask.java
index a3f2dfa..f9fe6a6 100644
--- a/java/com/android/incallui/legacyblocking/DeleteBlockedCallTask.java
+++ b/java/com/android/incallui/legacyblocking/DeleteBlockedCallTask.java
@@ -34,7 +34,7 @@
  * versions of the OS, call blocking is implemented in the system and there's no need to mess with
  * the call log.
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class DeleteBlockedCallTask extends AsyncTask<Void, Void, Long> {
 
   public static final String IDENTIFIER = "DeleteBlockedCallTask";
diff --git a/java/com/android/incallui/rtt/protocol/AndroidManifest.xml b/java/com/android/incallui/rtt/protocol/AndroidManifest.xml
index 52514a5..c0d39b0 100644
--- a/java/com/android/incallui/rtt/protocol/AndroidManifest.xml
+++ b/java/com/android/incallui/rtt/protocol/AndroidManifest.xml
@@ -17,6 +17,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.incallui.rtt.protocol">
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="26"/>
 </manifest>
\ No newline at end of file
diff --git a/java/com/android/incallui/spam/SpamCallListListener.java b/java/com/android/incallui/spam/SpamCallListListener.java
index 22b3833..9ef65d8 100644
--- a/java/com/android/incallui/spam/SpamCallListListener.java
+++ b/java/com/android/incallui/spam/SpamCallListListener.java
@@ -87,7 +87,7 @@
   }
 
   /** Checks if the number is in the call history. */
-  @TargetApi(VERSION_CODES.M)
+  @TargetApi(VERSION_CODES.N)
   private static final class NumberInCallHistoryWorker implements Worker<Void, Integer> {
 
     private final Context appContext;
diff --git a/java/com/android/incallui/video/protocol/AndroidManifest.xml b/java/com/android/incallui/video/protocol/AndroidManifest.xml
index 6f65582..f059b19 100644
--- a/java/com/android/incallui/video/protocol/AndroidManifest.xml
+++ b/java/com/android/incallui/video/protocol/AndroidManifest.xml
@@ -17,6 +17,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.incallui.video.protocol">
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 </manifest>
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoTech.java b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
index a2fb73b..d9660e1 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoTech.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
@@ -17,7 +17,6 @@
 package com.android.incallui.videotech.ims;
 
 import android.content.Context;
-import android.os.Build;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
@@ -61,10 +60,6 @@
 
   @Override
   public boolean isAvailable(Context context, PhoneAccountHandle phoneAccountHandle) {
-    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
-      return false;
-    }
-
     if (call.getVideoCall() == null) {
       return false;
     }
diff --git a/java/com/android/voicemail/AndroidManifest.xml b/java/com/android/voicemail/AndroidManifest.xml
index d64fb25..23c746a 100644
--- a/java/com/android/voicemail/AndroidManifest.xml
+++ b/java/com/android/voicemail/AndroidManifest.xml
@@ -17,7 +17,7 @@
   package="com.android.voicemail">
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <!-- Applications using this module should merge these permissions using android_manifest_merge -->
diff --git a/java/com/android/voicemail/impl/PackageReplacedReceiver.java b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
index bc56286..9fa9f75 100644
--- a/java/com/android/voicemail/impl/PackageReplacedReceiver.java
+++ b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
@@ -91,7 +91,7 @@
       this.context = context;
     }
 
-    @TargetApi(android.os.Build.VERSION_CODES.M) // used for try with resources
+    @TargetApi(android.os.Build.VERSION_CODES.N) // used for try with resources
     @Override
     public Void doInBackground(Void arg) throws Throwable {
       LogUtil.i("PackageReplacedReceiver.ExistingVoicemailCheck.doInBackground", "");
diff --git a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
index c47b40d..be11c44 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
@@ -256,7 +256,7 @@
   }
 
   /** Find the oldest voicemails that are on the device, and also on the server. */
-  @TargetApi(VERSION_CODES.M) // used for try with resources
+  @TargetApi(VERSION_CODES.N) // used for try with resources
   public List<Voicemail> oldestVoicemailsOnServer(int numVoicemails) {
     if (numVoicemails <= 0) {
       Assert.fail("Query for remote voicemails cannot be <= 0");
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionUtils.java b/java/com/android/voicemail/impl/transcribe/TranscriptionUtils.java
index 3bd1473..d8c00ed 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionUtils.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionUtils.java
@@ -34,7 +34,7 @@
   static final String AMR_PREFIX = "#!AMR\n";
 
   // Uses try-with-resource
-  @TargetApi(android.os.Build.VERSION_CODES.M)
+  @TargetApi(android.os.Build.VERSION_CODES.N)
   static ByteString getAudioData(Context context, Uri voicemailUri) {
     try (InputStream in = context.getContentResolver().openInputStream(voicemailUri)) {
       return ByteString.readFrom(in);
