diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 1e2ea559bd797a459627efe7eceb61b439595104..f1ae0b313ab8872ac208d84d85bafa1e07ae717f 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -18,7 +18,6 @@ package com.android.inputmethod.keyboard;
 
 import android.content.res.Resources;
 import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
 import android.graphics.Rect;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
@@ -34,6 +33,8 @@ import com.android.inputmethod.keyboard.internal.KeyboardParams;
 import com.android.inputmethod.keyboard.internal.MoreKeySpecParser;
 import com.android.inputmethod.latin.R;
 
+import org.xmlpull.v1.XmlPullParser;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -206,7 +207,7 @@ public class Key {
      * @param keyStyles active key styles set
      */
     public Key(Resources res, KeyboardParams params, KeyboardBuilder.Row row,
-            XmlResourceParser parser, KeyStyles keyStyles) {
+            XmlPullParser parser, KeyStyles keyStyles) {
         final float horizontalGap = isSpacer() ? 0 : params.mHorizontalGap;
         final int keyHeight = row.mRowHeight;
         mVerticalGap = params.mVerticalGap;
@@ -536,7 +537,7 @@ public class Key {
 
     public static class Spacer extends Key {
         public Spacer(Resources res, KeyboardParams params, KeyboardBuilder.Row row,
-                XmlResourceParser parser, KeyStyles keyStyles) {
+                XmlPullParser parser, KeyStyles keyStyles) {
             super(res, params, row, parser, keyStyles);
         }
 
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
index 3d2d77cf44c4fd65e017b9650fac81c0e7509235..b385b7a041c7689a7e1131a55b2c9c138058b5f7 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
@@ -17,12 +17,13 @@
 package com.android.inputmethod.keyboard.internal;
 
 import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
 import android.util.Log;
 
 import com.android.inputmethod.keyboard.internal.KeyboardBuilder.ParseException;
 import com.android.inputmethod.latin.R;
 
+import org.xmlpull.v1.XmlPullParser;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -210,7 +211,7 @@ public class KeyStyles {
     }
 
     public void parseKeyStyleAttributes(TypedArray keyStyleAttr, TypedArray keyAttrs,
-            XmlResourceParser parser) {
+            XmlPullParser parser) {
         final String styleName = keyStyleAttr.getString(R.styleable.Keyboard_KeyStyle_styleName);
         if (DEBUG) Log.d(TAG, String.format("<%s styleName=%s />",
                 KeyboardBuilder.TAG_KEY_STYLE, styleName));
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index e73f5a040ee7feb3e30302960deb00480d3287f8..dd31d17c865120e3eac8d8be05edc4311a86966e 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -19,7 +19,6 @@ package com.android.inputmethod.keyboard.internal;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.TypedValue;
@@ -160,7 +159,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         // Will be updated by {@link Key}'s constructor.
         private float mCurrentX;
 
-        public Row(Resources res, KeyboardParams params, XmlResourceParser parser, int y) {
+        public Row(Resources res, KeyboardParams params, XmlPullParser parser, int y) {
             mParams = params;
             TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
                     R.styleable.Keyboard);
@@ -291,7 +290,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
 
     private void parseKeyboard(int resId) throws XmlPullParserException, IOException {
         if (DEBUG) Log.d(TAG, String.format("<%s> %s", TAG_KEYBOARD, mParams.mId));
-        final XmlResourceParser parser = mResources.getXml(resId);
+        final XmlPullParser parser = mResources.getXml(resId);
         int event;
         while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
             if (event == XmlPullParser.START_TAG) {
@@ -311,7 +310,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
     public static String parseKeyboardLocale(
             Context context, int resId) throws XmlPullParserException, IOException {
         final Resources res = context.getResources();
-        final XmlResourceParser parser = res.getXml(resId);
+        final XmlPullParser parser = res.getXml(resId);
         if (parser == null) return "";
         int event;
         while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
@@ -329,7 +328,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         return "";
     }
 
-    private void parseKeyboardAttributes(XmlResourceParser parser) {
+    private void parseKeyboardAttributes(XmlPullParser parser) {
         final int displayWidth = mDisplayMetrics.widthPixels;
         final TypedArray keyboardAttr = mContext.obtainStyledAttributes(
                 Xml.asAttributeSet(parser), R.styleable.Keyboard, R.attr.keyboardStyle,
@@ -392,7 +391,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private void parseKeyboardContent(XmlResourceParser parser, boolean skip)
+    private void parseKeyboardContent(XmlPullParser parser, boolean skip)
             throws XmlPullParserException, IOException {
         int event;
         while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
@@ -431,7 +430,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private Row parseRowAttributes(XmlResourceParser parser) {
+    private Row parseRowAttributes(XmlPullParser parser) {
         final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
                 R.styleable.Keyboard);
         try {
@@ -445,7 +444,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private void parseRowContent(XmlResourceParser parser, Row row, boolean skip)
+    private void parseRowContent(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         int event;
         while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
@@ -484,7 +483,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private void parseKey(XmlResourceParser parser, Row row, boolean skip)
+    private void parseKey(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         if (skip) {
             checkEndTag(TAG_KEY, parser);
@@ -498,7 +497,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private void parseSpacer(XmlResourceParser parser, Row row, boolean skip)
+    private void parseSpacer(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         if (skip) {
             checkEndTag(TAG_SPACER, parser);
@@ -510,17 +509,17 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private void parseIncludeKeyboardContent(XmlResourceParser parser, boolean skip)
+    private void parseIncludeKeyboardContent(XmlPullParser parser, boolean skip)
             throws XmlPullParserException, IOException {
         parseIncludeInternal(parser, null, skip);
     }
 
-    private void parseIncludeRowContent(XmlResourceParser parser, Row row, boolean skip)
+    private void parseIncludeRowContent(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         parseIncludeInternal(parser, row, skip);
     }
 
-    private void parseIncludeInternal(XmlResourceParser parser, Row row, boolean skip)
+    private void parseIncludeInternal(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         if (skip) {
             checkEndTag(TAG_INCLUDE, parser);
@@ -540,7 +539,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private void parseMerge(XmlResourceParser parser, Row row, boolean skip)
+    private void parseMerge(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         int event;
         while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
@@ -561,17 +560,17 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private void parseSwitchKeyboardContent(XmlResourceParser parser, boolean skip)
+    private void parseSwitchKeyboardContent(XmlPullParser parser, boolean skip)
             throws XmlPullParserException, IOException {
         parseSwitchInternal(parser, null, skip);
     }
 
-    private void parseSwitchRowContent(XmlResourceParser parser, Row row, boolean skip)
+    private void parseSwitchRowContent(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         parseSwitchInternal(parser, row, skip);
     }
 
-    private void parseSwitchInternal(XmlResourceParser parser, Row row, boolean skip)
+    private void parseSwitchInternal(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         if (DEBUG) Log.d(TAG, String.format("<%s> %s", TAG_SWITCH, mParams.mId));
         boolean selected = false;
@@ -598,7 +597,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private boolean parseCase(XmlResourceParser parser, Row row, boolean skip)
+    private boolean parseCase(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         final boolean selected = parseCaseCondition(parser);
         if (row == null) {
@@ -611,7 +610,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         return selected;
     }
 
-    private boolean parseCaseCondition(XmlResourceParser parser) {
+    private boolean parseCaseCondition(XmlPullParser parser) {
         final KeyboardId id = mParams.mId;
         if (id == null)
             return true;
@@ -718,7 +717,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         return false;
     }
 
-    private boolean parseDefault(XmlResourceParser parser, Row row, boolean skip)
+    private boolean parseDefault(XmlPullParser parser, Row row, boolean skip)
             throws XmlPullParserException, IOException {
         if (DEBUG) Log.d(TAG, String.format("<%s>", TAG_DEFAULT));
         if (row == null) {
@@ -729,7 +728,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         return true;
     }
 
-    private void parseKeyStyle(XmlResourceParser parser, boolean skip) {
+    private void parseKeyStyle(XmlPullParser parser, boolean skip) {
         TypedArray keyStyleAttr = mResources.obtainAttributes(Xml.asAttributeSet(parser),
                 R.styleable.Keyboard_KeyStyle);
         TypedArray keyAttrs = mResources.obtainAttributes(Xml.asAttributeSet(parser),
@@ -746,7 +745,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
         }
     }
 
-    private static void checkEndTag(String tag, XmlResourceParser parser)
+    private static void checkEndTag(String tag, XmlPullParser parser)
             throws XmlPullParserException, IOException {
         if (parser.next() == XmlPullParser.END_TAG && tag.equals(parser.getName()))
             return;
@@ -839,35 +838,35 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
 
     @SuppressWarnings("serial")
     public static class ParseException extends InflateException {
-        public ParseException(String msg, XmlResourceParser parser) {
+        public ParseException(String msg, XmlPullParser parser) {
             super(msg + " at line " + parser.getLineNumber());
         }
     }
 
     @SuppressWarnings("serial")
     private static class IllegalStartTag extends ParseException {
-        public IllegalStartTag(XmlResourceParser parser, String parent) {
+        public IllegalStartTag(XmlPullParser parser, String parent) {
             super("Illegal start tag " + parser.getName() + " in " + parent, parser);
         }
     }
 
     @SuppressWarnings("serial")
     private static class IllegalEndTag extends ParseException {
-        public IllegalEndTag(XmlResourceParser parser, String parent) {
+        public IllegalEndTag(XmlPullParser parser, String parent) {
             super("Illegal end tag " + parser.getName() + " in " + parent, parser);
         }
     }
 
     @SuppressWarnings("serial")
     private static class IllegalAttribute extends ParseException {
-        public IllegalAttribute(XmlResourceParser parser, String attribute) {
+        public IllegalAttribute(XmlPullParser parser, String attribute) {
             super("Tag " + parser.getName() + " has illegal attribute " + attribute, parser);
         }
     }
 
     @SuppressWarnings("serial")
     private static class NonEmptyTag extends ParseException {
-        public NonEmptyTag(String tag, XmlResourceParser parser) {
+        public NonEmptyTag(String tag, XmlPullParser parser) {
             super(tag + " must be empty tag", parser);
         }
     }