Snap for 4641295 from 411501423307c29a160affef03485fd8000b3c1d to pi-release

Change-Id: I5c3a5f74b7a0965d7f90fbc5938e280654e2c665
diff --git a/Android.bp b/Android.bp
index 6f9f7cb..84b1022 100644
--- a/Android.bp
+++ b/Android.bp
@@ -506,7 +506,7 @@
 java_library_static {
     name: "libprotobuf-java-lite",
     host_supported: true,
-    no_framework_libs: true,
+    sdk_version: "core_current",
 
     srcs: [
         "java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java",
@@ -550,6 +550,12 @@
         "java/core/src/main/java/com/google/protobuf/WireFormat.java",
     ],
 
+    target: {
+        android: {
+            libs: ["libcore_private.stubs"],
+        },
+    },
+
     java_version: "1.7",
 }
 
@@ -581,3 +587,12 @@
     name: "host-libprotobuf-java-full",
     static_libs: ["libprotobuf-java-full"],
 }
+
+// Stubs library for using hidden APIs in core-oj and core-libart
+// =======================================================
+java_library {
+    name: "libcore_private.stubs",
+    srcs: ["java/core/src/stubs/**/*.java"],
+    sdk_version: "core_current",
+    installable: false,
+}
diff --git a/java/core/src/stubs/sun/misc/Unsafe.java b/java/core/src/stubs/sun/misc/Unsafe.java
new file mode 100644
index 0000000..fa66e48
--- /dev/null
+++ b/java/core/src/stubs/sun/misc/Unsafe.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.misc;
+
+/**
+ * A stub class for sun.misc.Unsafe to make it possible to build protobuf only using Android SDK,
+ * which lacks this class.
+ *
+ * Note that this class is only to provide symbol definitions at build-time and this class is not
+ * embedded in the protobuf library. At runtime, Unsafe class is provided by the libcore-oj which is
+ * in the bootclasspath and protobuf is linked to the class loaded there.
+ */
+public class Unsafe {
+  public byte getByte(Object o, long offset) { /* null implementation */ return 0; }
+  public byte getByte(long address) { /* null implementation */ return 0; }
+  public int arrayBaseOffset(Class arrayClass) { /* null implementation */ return 0; }
+  public long getLong(Object o, long offset) { /* null implementation */ return 0; }
+  public long getLong(long address) { /* null implementation */ return 0; }
+  public long objectFieldOffset(java.lang.reflect.Field f) { /* null implementation */ return 0; }
+  public void putByte(Object o, long offset, byte x) { /* null implementation */ }
+  public void putByte(long address, byte x) { /* null implmentation */ }
+}