diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index d0464dd944890d5e925f90c4fb5f02e25cfcef69..a78ff7e84be0f3d8198789b940a62886e203b646 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
 
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.res.AssetFileDescriptor;
 import android.net.Uri;
 import android.text.TextUtils;
 
@@ -96,9 +97,9 @@ public class BinaryDictionaryFileDumper {
         // file.
         final ContentResolver resolver = context.getContentResolver();
         final Uri dictionaryPackUri = getProviderUri(locale);
-        final InputStream stream = resolver.openInputStream(dictionaryPackUri);
-        if (null == stream) return null;
-        return copyFileTo(stream, getCacheFileNameForLocale(locale, context));
+        final AssetFileDescriptor afd = resolver.openAssetFileDescriptor(dictionaryPackUri, "r");
+        if (null == afd) return null;
+        return copyFileTo(afd.createInputStream(), getCacheFileNameForLocale(locale, context));
     }
 
     /**
@@ -128,6 +129,8 @@ public class BinaryDictionaryFileDumper {
     /**
      * Copies the data in an input stream to a target file, creating the file if necessary and
      * overwriting it if it already exists.
+     * @param input the stream to be copied.
+     * @param outputFileName the name of a file to copy the data to. It is created if necessary.
      */
     private static String copyFileTo(final InputStream input, final String outputFileName)
             throws FileNotFoundException, IOException {