diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp
index de32dd9..513a083 100644
--- a/core/jni/android/graphics/Shader.cpp
+++ b/core/jni/android/graphics/Shader.cpp
@@ -1,5 +1,6 @@
 #include "GraphicsJNI.h"
 #include "SkGradientShader.h"
+#include "SkImagePriv.h"
 #include "SkShader.h"
 #include "SkXfermode.h"
 #include "core_jni_helpers.h"
@@ -94,12 +95,15 @@
         // we'll pass an empty SkBitmap to avoid crashing/excepting for compatibility.
         GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     }
-    SkShader* s = SkShader::CreateBitmapShader(bitmap,
-                                        (SkShader::TileMode)tileModeX,
-                                        (SkShader::TileMode)tileModeY);
+    sk_sp<SkShader> s = SkMakeBitmapShader(bitmap,
+                                           (SkShader::TileMode)tileModeX,
+                                           (SkShader::TileMode)tileModeY,
+                                           nullptr,
+                                           kNever_SkCopyPixelsMode,
+                                           nullptr);
 
-    ThrowIAE_IfNull(env, s);
-    return reinterpret_cast<jlong>(s);
+    ThrowIAE_IfNull(env, s.get());
+    return reinterpret_cast<jlong>(s.release());
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 09775496..89af090 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -26,6 +26,7 @@
 #include <SkDrawFilter.h>
 #include <SkGraphics.h>
 #include <SkImage.h>
+#include <SkImagePriv.h>
 #include <SkRSXform.h>
 #include <SkShader.h>
 #include <SkTemplates.h>
@@ -593,10 +594,13 @@
     if (paint) {
         tmpPaint = *paint;
     }
-    SkShader* shader = SkShader::CreateBitmapShader(bitmap,
-                                                    SkShader::kClamp_TileMode,
-                                                    SkShader::kClamp_TileMode);
-    SkSafeUnref(tmpPaint.setShader(shader));
+    sk_sp<SkShader> shader = SkMakeBitmapShader(bitmap,
+                                                SkShader::kClamp_TileMode,
+                                                SkShader::kClamp_TileMode,
+                                                nullptr,
+                                                kNever_SkCopyPixelsMode,
+                                                nullptr);
+    tmpPaint.setShader(std::move(shader));
 
     mCanvas->drawVertices(SkCanvas::kTriangles_VertexMode, ptCount, (SkPoint*)vertices,
                          texs, (const SkColor*)colors, NULL, indices,
diff --git a/libs/hwui/tests/unit/RecordingCanvasTests.cpp b/libs/hwui/tests/unit/RecordingCanvasTests.cpp
index fdf0b54..edc7191 100644
--- a/libs/hwui/tests/unit/RecordingCanvasTests.cpp
+++ b/libs/hwui/tests/unit/RecordingCanvasTests.cpp
@@ -740,10 +740,13 @@
     SkBitmap bitmap = TestUtils::createSkBitmap(100, 100);
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 100, [&bitmap](RecordingCanvas& canvas) {
         SkPaint paint;
-        SkAutoTUnref<SkShader> shader(SkShader::CreateBitmapShader(bitmap,
+        sk_sp<SkShader> shader = SkMakeBitmapShader(bitmap,
                 SkShader::TileMode::kClamp_TileMode,
-                SkShader::TileMode::kClamp_TileMode));
-        paint.setShader(shader);
+                SkShader::TileMode::kClamp_TileMode,
+                nullptr,
+                kNever_SkCopyPixelsMode,
+                nullptr);
+        paint.setShader(std::move(shader));
         canvas.drawRoundRect(0, 0, 100, 100, 20.0f, 20.0f, paint);
     });
     auto& bitmaps = dl->getBitmapResources();
@@ -754,21 +757,24 @@
     SkBitmap bitmap = TestUtils::createSkBitmap(100, 100);
     auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 100, [&bitmap](RecordingCanvas& canvas) {
         SkPaint paint;
-        SkAutoTUnref<SkShader> shader1(SkShader::CreateBitmapShader(bitmap,
+        sk_sp<SkShader> shader1 = SkMakeBitmapShader(bitmap,
                 SkShader::TileMode::kClamp_TileMode,
-                SkShader::TileMode::kClamp_TileMode));
+                SkShader::TileMode::kClamp_TileMode,
+                nullptr,
+                kNever_SkCopyPixelsMode,
+                nullptr);
 
         SkPoint center;
         center.set(50, 50);
         SkColor colors[2];
         colors[0] = Color::Black;
         colors[1] = Color::White;
-        SkAutoTUnref<SkShader> shader2(SkGradientShader::CreateRadial(center, 50, colors, nullptr, 2,
-                SkShader::TileMode::kRepeat_TileMode));
+        sk_sp<SkShader> shader2 = SkGradientShader::MakeRadial(center, 50, colors, nullptr, 2,
+                SkShader::TileMode::kRepeat_TileMode);
 
-        SkAutoTUnref<SkShader> composeShader(SkShader::CreateComposeShader(shader1, shader2,
-                SkXfermode::Mode::kMultiply_Mode));
-        paint.setShader(composeShader);
+        sk_sp<SkShader> composeShader = SkShader::MakeComposeShader(std::move(shader1), std::move(shader2),
+                SkXfermode::Mode::kMultiply_Mode);
+        paint.setShader(std::move(composeShader));
         canvas.drawRoundRect(0, 0, 100, 100, 20.0f, 20.0f, paint);
     });
     auto& bitmaps = dl->getBitmapResources();
diff --git a/libs/hwui/tests/unit/SkiaBehaviorTests.cpp b/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
index cd759cb..e6689a3 100644
--- a/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
+++ b/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
@@ -17,8 +17,9 @@
 #include "tests/common/TestUtils.h"
 
 #include <gtest/gtest.h>
-#include <SkShader.h>
 #include <SkColorMatrixFilter.h>
+#include <SkImagePriv.h>
+#include <SkShader.h>
 
 using namespace android;
 using namespace android::uirenderer;
@@ -29,10 +30,13 @@
  */
 TEST(SkiaBehavior, CreateBitmapShader1x1) {
     SkBitmap origBitmap = TestUtils::createSkBitmap(1, 1);
-    SkAutoTUnref<SkShader> s(SkShader::CreateBitmapShader(
+    sk_sp<SkShader> s = SkMakeBitmapShader(
             origBitmap,
             SkShader::kClamp_TileMode,
-            SkShader::kRepeat_TileMode));
+            SkShader::kRepeat_TileMode,
+            nullptr,
+            kNever_SkCopyPixelsMode,
+            nullptr);
 
     SkBitmap bitmap;
     SkShader::TileMode xy[2];
