diff --git a/buildSrc/src/main/groovy/android/support/SupportLibraryPlugin.groovy b/buildSrc/src/main/groovy/android/support/SupportLibraryPlugin.groovy
index 333a9f4..f1f6a04 100644
--- a/buildSrc/src/main/groovy/android/support/SupportLibraryPlugin.groovy
+++ b/buildSrc/src/main/groovy/android/support/SupportLibraryPlugin.groovy
@@ -46,29 +46,57 @@
         LibraryExtension library =
                 project.getExtensions().findByType(LibraryExtension.class);
 
-        library.setCompileSdkVersion(project.ext.currentSdk)
+        library.compileSdkVersion project.ext.currentSdk
 
-        // Main sourceSet related options
+        // We use a non-standard manifest path.
         AndroidSourceSet mainSet = library.getSourceSets().findByName("main");
-        mainSet.getManifest().srcFile("AndroidManifest.xml");
+        mainSet.manifest.srcFile 'AndroidManifest.xml'
 
-        // Update the version meta-data in each Manifest
-        library.getDefaultConfig().addManifestPlaceholders(
-                ["support-version": project.rootProject.ext.supportVersion])
+        library.defaultConfig {
+            // Update the version meta-data in each Manifest.
+            addManifestPlaceholders(["support-version": project.rootProject.ext.supportVersion])
 
-        // Set test related options
-        library.getDefaultConfig().setTestInstrumentationRunner(INSTRUMENTATION_RUNNER);
-
-        library.sourceSets.androidTest {
-            root "tests"
-            java.srcDir "tests/src"
-            res.srcDir "tests/res"
-            manifest.srcFile "tests/AndroidManifest.xml"
+            // Set test related options.
+            testInstrumentationRunner INSTRUMENTATION_RUNNER
         }
 
-        // Set compile options
-        library.getCompileOptions().setSourceCompatibility(JavaVersion.VERSION_1_7);
-        library.getCompileOptions().setTargetCompatibility(JavaVersion.VERSION_1_7);
+        // We use a non-standard test directory structure.
+        library.sourceSets.androidTest {
+            root 'tests'
+            java.srcDir 'tests/src'
+            res.srcDir 'tests/res'
+            manifest.srcFile 'tests/AndroidManifest.xml'
+        }
+
+        // Always lint check NewApi as fatal.
+        library.lintOptions {
+            abortOnError true
+            ignoreWarnings true
+
+            // Write output directly to the console (and nowhere else).
+            textOutput 'stderr'
+            textReport true
+            htmlReport false
+            xmlReport false
+
+            // Format output for convenience.
+            explainIssues true
+            noLines false
+            quiet true
+
+            // Always fail on NewApi.
+            error 'NewApi'
+        }
+
+        // Library projects don't run lint by default, so set up dependency.
+        project.tasks.release.dependsOn project.tasks.lint
+
+        // Java 8 is only fully supported on API 24+ and not all Java 8 features are binary
+        // compatible with API < 24, so use Java 7 for both source AND target.
+        library.compileOptions {
+            sourceCompatibility JavaVersion.VERSION_1_7
+            targetCompatibility JavaVersion.VERSION_1_7
+        }
 
         // Create sources jar for release builds
         library.getLibraryVariants().all(new Action<LibraryVariant>() {
@@ -85,7 +113,7 @@
             }
         });
 
-        // Set uploadArchives options
+        // Set uploadArchives options.
         Upload uploadTask = (Upload) project.getTasks().getByName("uploadArchives");
         project.afterEvaluate {
             uploadTask.repositories {
diff --git a/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java b/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java
index 8ccbe95..5b14129 100644
--- a/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java
+++ b/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java
@@ -176,7 +176,6 @@
         public void onAnimationRepeat(Animation animation) {
         }
 
-        @SuppressLint("NewApi")
         @Override
         public void onAnimationEnd(Animation animation) {
             if (mRefreshing) {
@@ -223,7 +222,6 @@
         reset();
     }
 
-    @SuppressLint("NewApi")
     private void setColorViewAlpha(int targetAlpha) {
         mCircleView.getBackground().setAlpha(targetAlpha);
         mProgress.setAlpha(targetAlpha);
@@ -417,7 +415,6 @@
         }
     }
 
-    @SuppressLint("NewApi")
     private void startScaleUpAnimation(AnimationListener listener) {
         mCircleView.setVisibility(View.VISIBLE);
         if (android.os.Build.VERSION.SDK_INT >= 11) {
@@ -475,10 +472,12 @@
         mCircleView.startAnimation(mScaleDownAnimation);
     }
 
+    @SuppressLint("NewApi")
     private void startProgressAlphaStartAnimation() {
         mAlphaStartAnimation = startAlphaAnimation(mProgress.getAlpha(), STARTING_PROGRESS_ALPHA);
     }
 
+    @SuppressLint("NewApi")
     private void startProgressAlphaMaxAnimation() {
         mAlphaMaxAnimation = startAlphaAnimation(mProgress.getAlpha(), MAX_ALPHA);
     }
@@ -1060,7 +1059,6 @@
         return true;
     }
 
-    @SuppressLint("NewApi")
     private void startDragging(float y) {
         final float yDiff = y - mInitialDownY;
         if (yDiff > mTouchSlop && !mIsBeingDragged) {
@@ -1130,7 +1128,6 @@
         }
     };
 
-    @SuppressLint("NewApi")
     private void startScaleDownReturnToStartAnimation(int from,
             Animation.AnimationListener listener) {
         mFrom = from;
diff --git a/gradlew b/gradlew
index 30aa96f..014f353 100755
--- a/gradlew
+++ b/gradlew
@@ -6,14 +6,6 @@
 ##
 ##############################################################################
 
-# Pick the correct fullsdk for this OS.
-if [ "$os" = "Darwin" ]; then
-    plat="darwin"
-else
-    plat="linux"
-fi
-DEFAULT_JVM_OPTS="-DLINT_API_DATABASE=../../prebuilts/fullsdk-$plat/platform-tools/api/api-versions.xml"
-
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 
 APP_NAME="Gradle"
@@ -69,6 +61,14 @@
 
 CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 
+# Pick the correct fullsdk for this OS.
+if [ "$os" = "Darwin" ]; then
+    plat="darwin"
+else
+    plat="linux"
+fi
+DEFAULT_JVM_OPTS="-DLINT_API_DATABASE=$APP_HOME/../../prebuilts/fullsdk-$plat/platform-tools/api/api-versions.xml"
+
 # Determine the Java command to use to start the JVM.
 if [ -n "$JAVA_HOME" ] ; then
     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
diff --git a/media-compat/api26/android/support/v4/media/session/MediaControllerCompatApi26.java b/media-compat/api26/android/support/v4/media/session/MediaControllerCompatApi26.java
index b2c4ac0..bf2ca60 100644
--- a/media-compat/api26/android/support/v4/media/session/MediaControllerCompatApi26.java
+++ b/media-compat/api26/android/support/v4/media/session/MediaControllerCompatApi26.java
@@ -16,11 +16,13 @@
 
 package android.support.v4.media.session;
 
+import android.annotation.TargetApi;
 import android.media.session.MediaController;
 
+@TargetApi(26)
 class MediaControllerCompatApi26 {
     public static Object createCallback(Callback callback) {
-        return new CallbackProxy<Callback>(callback);
+        return new CallbackProxy<>(callback);
     }
 
     public static int getRepeatMode(Object controllerObj) {
diff --git a/media-compat/api26/android/support/v4/media/session/MediaSessionCompatApi26.java b/media-compat/api26/android/support/v4/media/session/MediaSessionCompatApi26.java
index 80c5fd0..6d7ba4f 100644
--- a/media-compat/api26/android/support/v4/media/session/MediaSessionCompatApi26.java
+++ b/media-compat/api26/android/support/v4/media/session/MediaSessionCompatApi26.java
@@ -17,7 +17,9 @@
 package android.support.v4.media.session;
 
 import android.media.session.MediaSession;
+import android.support.annotation.RequiresApi;
 
+@RequiresApi(26)
 class MediaSessionCompatApi26 {
 
     public static Object createCallback(Callback callback) {
diff --git a/v17/preference-leanback/src/android/support/v17/preference/LeanbackListPreferenceDialogFragment.java b/v17/preference-leanback/src/android/support/v17/preference/LeanbackListPreferenceDialogFragment.java
index 6ab3999..c9837de 100644
--- a/v17/preference-leanback/src/android/support/v17/preference/LeanbackListPreferenceDialogFragment.java
+++ b/v17/preference-leanback/src/android/support/v17/preference/LeanbackListPreferenceDialogFragment.java
@@ -21,11 +21,11 @@
 import android.support.annotation.Nullable;
 import android.support.v14.preference.MultiSelectListPreference;
 import android.support.v17.leanback.widget.VerticalGridView;
+import android.support.v4.util.ArraySet;
 import android.support.v7.preference.DialogPreference;
 import android.support.v7.preference.ListPreference;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
-import android.util.ArraySet;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java
index 2ccf149..753dbd2 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java
@@ -19,7 +19,6 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.res.Resources;
-import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
@@ -29,7 +28,6 @@
 import android.support.v7.view.SupportMenuInflater;
 import android.support.v7.view.WindowCallbackWrapper;
 import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.widget.AppCompatDrawableManager;
 import android.support.v7.widget.TintTypedArray;
 import android.view.KeyEvent;
 import android.view.Menu;
@@ -37,7 +35,7 @@
 import android.view.View;
 import android.view.Window;
 
-@RequiresApi(9)
+@RequiresApi(14)
 abstract class AppCompatDelegateImplBase extends AppCompatDelegate {
 
     static final boolean DEBUG = false;
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java
index 736b160..3aa7f3f 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java
@@ -22,7 +22,7 @@
 import android.view.View;
 import android.view.Window;
 
-@RequiresApi(11)
+@RequiresApi(14)
 class AppCompatDelegateImplV11 extends AppCompatDelegateImplV9 {
 
     AppCompatDelegateImplV11(Context context, Window window, AppCompatCallback callback) {
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java
index 64aa23b..ccb1c16 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java
@@ -91,7 +91,7 @@
 
 import org.xmlpull.v1.XmlPullParser;
 
-@RequiresApi(9)
+@RequiresApi(14)
 class AppCompatDelegateImplV9 extends AppCompatDelegateImplBase
         implements MenuBuilder.Callback, LayoutInflater.Factory2 {
 
diff --git a/v7/appcompat/src/android/support/v7/app/ResourcesFlusher.java b/v7/appcompat/src/android/support/v7/app/ResourcesFlusher.java
index ad23092..ebfc7cb 100644
--- a/v7/appcompat/src/android/support/v7/app/ResourcesFlusher.java
+++ b/v7/appcompat/src/android/support/v7/app/ResourcesFlusher.java
@@ -16,6 +16,7 @@
 
 package android.support.v7.app;
 
+import android.annotation.TargetApi;
 import android.content.res.Resources;
 import android.os.Build;
 import android.support.annotation.NonNull;
@@ -41,17 +42,17 @@
     private static boolean sResourcesImplFieldFetched;
 
     static boolean flush(@NonNull final Resources resources) {
-        final int sdk = Build.VERSION.SDK_INT;
-        if (sdk >= 24) {
+        if (Build.VERSION.SDK_INT >= 24) {
             return flushNougats(resources);
-        } else if (sdk >= 23) {
+        } else if (Build.VERSION.SDK_INT >= 23) {
             return flushMarshmallows(resources);
-        } else if (sdk >= 21) {
+        } else if (Build.VERSION.SDK_INT >= 21) {
             return flushLollipops(resources);
         }
         return false;
     }
 
+    @TargetApi(21)
     private static boolean flushLollipops(@NonNull final Resources resources) {
         if (!sDrawableCacheFieldFetched) {
             try {
@@ -77,6 +78,7 @@
         return false;
     }
 
+    @TargetApi(23)
     private static boolean flushMarshmallows(@NonNull final Resources resources) {
         if (!sDrawableCacheFieldFetched) {
             try {
@@ -105,6 +107,7 @@
         return drawableCache != null && flushThemedResourcesCache(drawableCache);
     }
 
+    @TargetApi(24)
     private static boolean flushNougats(@NonNull final Resources resources) {
         if (!sResourcesImplFieldFetched) {
             try {
@@ -155,6 +158,7 @@
         return drawableCache != null && flushThemedResourcesCache(drawableCache);
     }
 
+    @TargetApi(16)
     private static boolean flushThemedResourcesCache(@NonNull final Object cache) {
         if (!sThemedResourceCacheClazzFetched) {
             try {
