diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/Allocation.java b/v8/renderscript/java/src/android/support/v8/renderscript/Allocation.java
index 8b17aab..eec493c 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/Allocation.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/Allocation.java
@@ -643,10 +643,11 @@
         mRS.validate();
         int eSize = mType.mElement.getBytesSize();
         final byte[] data = fp.getData();
+        int data_length = fp.getPos();
 
-        int count = data.length / eSize;
-        if ((eSize * count) != data.length) {
-            throw new RSIllegalArgumentException("Field packer length " + data.length +
+        int count = data_length / eSize;
+        if ((eSize * count) != data_length) {
+            throw new RSIllegalArgumentException("Field packer length " + data_length +
                                                " not divisible by element size " + eSize + ".");
         }
         copy1DRangeFromUnchecked(xoff, count, data);
@@ -670,16 +671,17 @@
         }
 
         final byte[] data = fp.getData();
+        int data_length = fp.getPos();
         int eSize = mType.mElement.mElements[component_number].getBytesSize();
         eSize *= mType.mElement.mArraySizes[component_number];
 
-        if (data.length != eSize) {
-            throw new RSIllegalArgumentException("Field packer sizelength " + data.length +
+        if (data_length != eSize) {
+            throw new RSIllegalArgumentException("Field packer sizelength " + data_length +
                                                " does not match component size " + eSize + ".");
         }
 
         mRS.nAllocationElementData1D(getIDSafe(), xoff, mSelectedLOD,
-                                     component_number, data, data.length);
+                                     component_number, data, data_length);
     }
 
     private void data1DChecks(int off, int count, int len, int dataSize) {
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/AllocationThunker.java b/v8/renderscript/java/src/android/support/v8/renderscript/AllocationThunker.java
index f3eb0da..2ae7edf 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/AllocationThunker.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/AllocationThunker.java
@@ -195,8 +195,15 @@
 
     public void setFromFieldPacker(int xoff, FieldPacker fp) {
         try {
+            // Must construct actual FieldPacker from scratch, since we don't
+            // know how many bytes were actually used.
+            byte[] data = fp.getData();
+            int fp_length = fp.getPos();
             android.renderscript.FieldPacker nfp =
-                new android.renderscript.FieldPacker(fp.getData());
+                new android.renderscript.FieldPacker(fp_length);
+            for (int i = 0; i < fp_length; i++) {
+                nfp.addI8(data[i]);
+            }
             mN.setFromFieldPacker(xoff, nfp);
         } catch (android.renderscript.RSRuntimeException e) {
             throw ExceptionThunker.convertException(e);
@@ -204,8 +211,15 @@
     }
     public void setFromFieldPacker(int xoff, int component_number, FieldPacker fp) {
         try {
+            // Must construct actual FieldPacker from scratch, since we don't
+            // know how many bytes were actually used.
+            byte[] data = fp.getData();
+            int fp_length = fp.getPos();
             android.renderscript.FieldPacker nfp =
-                new android.renderscript.FieldPacker(fp.getData());
+                new android.renderscript.FieldPacker(fp_length);
+            for (int i = 0; i < fp_length; i++) {
+                nfp.addI8(data[i]);
+            }
             mN.setFromFieldPacker(xoff, component_number, nfp);
         } catch (android.renderscript.RSRuntimeException e) {
             throw ExceptionThunker.convertException(e);
@@ -495,4 +509,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
index ffdb66f..1e54631 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
@@ -544,6 +544,13 @@
         return mData;
     }
 
+    public int getPos() {
+        if (RenderScript.shouldThunk()) {
+            return mN.getPos();
+        }
+        return mPos;
+    }
+
     private final byte mData[];
     private int mPos;
     private int mLen;
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java
index 3e990f6..fe021e1 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java
@@ -30,65 +30,83 @@
  **/
 public class FieldPackerThunker {
     private android.renderscript.FieldPacker mN;
+    private int mPos;
 
     public FieldPackerThunker(int len) {
         mN = new android.renderscript.FieldPacker(len);
+        mPos = 0;
     }
 
     void align(int v) {
         mN.align(v);
+        while ((mPos & (v - 1)) != 0) {
+            mPos++;
+        }
     }
 
     void reset() {
         mN.reset();
+        mPos = 0;
     }
 
     void reset(int i) {
         mN.reset(i);
+        mPos = i;
     }
 
     public void skip(int i) {
         mN.skip(i);
+        mPos += i;
     }
 
     public void addI8(byte v) {
         mN.addI8(v);
+        mPos++;
     }
 
     public void addI16(short v) {
         mN.addI16(v);
+        mPos += 2;
     }
 
     public void addI32(int v) {
         mN.addI32(v);
+        mPos += 4;
     }
 
     public void addI64(long v) {
         mN.addI64(v);
+        mPos += 8;
     }
 
     public void addU8(short v) {
         mN.addU8(v);
+        mPos++;
     }
 
     public void addU16(int v) {
         mN.addU16(v);
+        mPos += 2;
     }
 
     public void addU32(long v) {
         mN.addU32(v);
+        mPos += 4;
     }
 
     public void addU64(long v) {
         mN.addU64(v);
+        mPos += 8;
     }
 
     public void addF32(float v) {
         mN.addF32(v);
+        mPos += 4;
     }
 
     public void addF64(double v) {
         mN.addF64(v);
+        mPos += 8;
     }
 
     public void addObj(BaseObj obj) {
@@ -97,127 +115,167 @@
         } else {
             mN.addObj(null);
         }
+        mPos += 4;  // Compat lib only works in 32-bit mode, so objects are 4 bytes.
     }
 
     public void addF32(Float2 v) {
         mN.addF32(new android.renderscript.Float2(v.x, v.y));
+        mPos += 8;
     }
     public void addF32(Float3 v) {
         mN.addF32(new android.renderscript.Float3(v.x, v.y, v.z));
+        mPos += 12;
     }
     public void addF32(Float4 v) {
         mN.addF32(new android.renderscript.Float4(v.x, v.y, v.z, v.w));
+        mPos += 16;
     }
 
     public void addF64(Double2 v) {
         mN.addF64(new android.renderscript.Double2(v.x, v.y));
+        mPos += 16;
     }
     public void addF64(Double3 v) {
         mN.addF64(new android.renderscript.Double3(v.x, v.y, v.z));
+        mPos += 24;
     }
     public void addF64(Double4 v) {
         mN.addF64(new android.renderscript.Double4(v.x, v.y, v.z, v.w));
+        mPos += 32;
     }
 
     public void addI8(Byte2 v) {
         mN.addI8(new android.renderscript.Byte2(v.x, v.y));
+        mPos += 2;
     }
     public void addI8(Byte3 v) {
         mN.addI8(new android.renderscript.Byte3(v.x, v.y, v.z));
+        mPos += 3;
     }
     public void addI8(Byte4 v) {
         mN.addI8(new android.renderscript.Byte4(v.x, v.y, v.z, v.w));
+        mPos += 4;
     }
 
     public void addU8(Short2 v) {
         mN.addU8(new android.renderscript.Short2(v.x, v.y));
+        mPos += 2;
     }
     public void addU8(Short3 v) {
         mN.addU8(new android.renderscript.Short3(v.x, v.y, v.z));
+        mPos += 3;
     }
     public void addU8(Short4 v) {
         mN.addU8(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+        mPos += 4;
     }
 
     public void addI16(Short2 v) {
         mN.addI16(new android.renderscript.Short2(v.x, v.y));
+        mPos += 4;
     }
     public void addI16(Short3 v) {
         mN.addI16(new android.renderscript.Short3(v.x, v.y, v.z));
+        mPos += 6;
     }
     public void addI16(Short4 v) {
         mN.addI16(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+        mPos += 8;
     }
 
     public void addU16(Int2 v) {
         mN.addU16(new android.renderscript.Int2(v.x, v.y));
+        mPos += 4;
     }
     public void addU16(Int3 v) {
         mN.addU16(new android.renderscript.Int3(v.x, v.y, v.z));
+        mPos += 6;
     }
     public void addU16(Int4 v) {
         mN.addU16(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+        mPos += 8;
     }
 
     public void addI32(Int2 v) {
         mN.addI32(new android.renderscript.Int2(v.x, v.y));
+        mPos += 8;
     }
     public void addI32(Int3 v) {
         mN.addI32(new android.renderscript.Int3(v.x, v.y, v.z));
+        mPos += 12;
     }
     public void addI32(Int4 v) {
         mN.addI32(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+        mPos += 16;
     }
 
     public void addU32(Long2 v) {
         mN.addU32(new android.renderscript.Long2(v.x, v.y));
+        mPos += 8;
     }
     public void addU32(Long3 v) {
         mN.addU32(new android.renderscript.Long3(v.x, v.y, v.z));
+        mPos += 12;
     }
     public void addU32(Long4 v) {
         mN.addU32(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+        mPos += 16;
     }
 
     public void addI64(Long2 v) {
         mN.addI64(new android.renderscript.Long2(v.x, v.y));
+        mPos += 16;
     }
     public void addI64(Long3 v) {
         mN.addI64(new android.renderscript.Long3(v.x, v.y, v.z));
+        mPos += 24;
     }
     public void addI64(Long4 v) {
         mN.addI64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+        mPos += 32;
     }
 
     public void addU64(Long2 v) {
         mN.addU64(new android.renderscript.Long2(v.x, v.y));
+        mPos += 16;
     }
     public void addU64(Long3 v) {
         mN.addU64(new android.renderscript.Long3(v.x, v.y, v.z));
+        mPos += 24;
     }
     public void addU64(Long4 v) {
         mN.addU64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+        mPos += 32;
     }
 
     public void addMatrix(Matrix4f v) {
         mN.addMatrix(new android.renderscript.Matrix4f(v.getArray()));
+        mPos += (4 * 4 * 4);
     }
 
     public void addMatrix(Matrix3f v) {
         mN.addMatrix(new android.renderscript.Matrix3f(v.getArray()));
+        mPos += (3 * 3 * 4);
     }
 
     public void addMatrix(Matrix2f v) {
         mN.addMatrix(new android.renderscript.Matrix2f(v.getArray()));
+        mPos += (2 * 2 * 4);
     }
 
     public void addBoolean(boolean v) {
         mN.addBoolean(v);
+        mPos++;
     }
 
     public final byte[] getData() {
         return mN.getData();
     }
+
+    // We must compute our own mPos, since this API is not available in older target APIs.
+    public int getPos() {
+        return mPos;
+    }
 }
 
 
