diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java
index ca37917..4cac7fb 100644
--- a/graphics/java/android/graphics/ImageDecoder.java
+++ b/graphics/java/android/graphics/ImageDecoder.java
@@ -301,7 +301,7 @@
 
         ImageDecoder decoder = null;
         try {
-            decoder = nCreate(fd, preferAnimation, source);
+            decoder = nCreate(fd, AssetFileDescriptor.UNKNOWN_LENGTH, preferAnimation, source);
         } finally {
             if (decoder == null) {
                 IoUtils.closeQuietly(stream);
@@ -349,7 +349,7 @@
         try {
             try {
                 Os.lseek(fd, offset, SEEK_SET);
-                decoder = nCreate(fd, preferAnimation, source);
+                decoder = nCreate(fd, assetFd.getDeclaredLength(), preferAnimation, source);
             } catch (ErrnoException e) {
                 decoder = createFromStream(new FileInputStream(fd), true, preferAnimation, source);
             }
@@ -2008,7 +2008,7 @@
     private static native ImageDecoder nCreate(InputStream is, byte[] storage,
             boolean preferAnimation, Source src) throws IOException;
     // The fd must be seekable.
-    private static native ImageDecoder nCreate(FileDescriptor fd,
+    private static native ImageDecoder nCreate(FileDescriptor fd, long length,
             boolean preferAnimation, Source src) throws IOException;
     @NonNull
     private static native Bitmap nDecodeBitmap(long nativePtr,
diff --git a/libs/hwui/jni/ImageDecoder.cpp b/libs/hwui/jni/ImageDecoder.cpp
index 1f4fd23..da91d46 100644
--- a/libs/hwui/jni/ImageDecoder.cpp
+++ b/libs/hwui/jni/ImageDecoder.cpp
@@ -152,7 +152,7 @@
 }
 
 static jobject ImageDecoder_nCreateFd(JNIEnv* env, jobject /*clazz*/,
-        jobject fileDescriptor, jboolean preferAnimation, jobject source) {
+        jobject fileDescriptor, jlong length, jboolean preferAnimation, jobject source) {
 #ifndef __ANDROID__ // LayoutLib for Windows does not support F_DUPFD_CLOEXEC
     return throw_exception(env, kSourceException, "Only supported on Android", nullptr, source);
 #else
@@ -172,7 +172,14 @@
                                nullptr, source);
     }
 
-    std::unique_ptr<SkFILEStream> fileStream(new SkFILEStream(file));
+    std::unique_ptr<SkFILEStream> fileStream;
+    if (length == -1) {
+        // -1 corresponds to AssetFileDescriptor.UNKNOWN_LENGTH. Pass no length
+        // so SkFILEStream will figure out the size of the file on its own.
+        fileStream.reset(new SkFILEStream(file));
+    } else {
+        fileStream.reset(new SkFILEStream(file, length));
+    }
     return native_create(env, std::move(fileStream), source, preferAnimation);
 #endif
 }
@@ -493,7 +500,7 @@
     { "nCreate",        "(Ljava/nio/ByteBuffer;IIZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateByteBuffer },
     { "nCreate",        "([BIIZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateByteArray },
     { "nCreate",        "(Ljava/io/InputStream;[BZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateInputStream },
-    { "nCreate",        "(Ljava/io/FileDescriptor;ZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateFd },
+    { "nCreate",        "(Ljava/io/FileDescriptor;JZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateFd },
     { "nDecodeBitmap",  "(JLandroid/graphics/ImageDecoder;ZIILandroid/graphics/Rect;ZIZZZJZ)Landroid/graphics/Bitmap;",
                                                                  (void*) ImageDecoder_nDecodeBitmap },
     { "nGetSampledSize","(JI)Landroid/util/Size;",               (void*) ImageDecoder_nGetSampledSize },
