aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2018-03-04 09:40:04 +0900
committerJiyong Park <jiyong@google.com>2018-03-07 18:05:18 +0900
commit411501423307c29a160affef03485fd8000b3c1d (patch)
treeb61560bf074f80ddfc201ced730052175b1bfc1a
parent07b89888f5174bbb2af0365b5d4f392fb290eb54 (diff)
downloadprotobuf-pie-qpr3-s1-release.tar.gz
libprotobuf-java-lite is now built against core Java APIs which excludes Android-only APIs (classes under android.* packages) and private APIs. "core_current" is a pseudo SDK which is a core Java subset of Android SDK. However, this lib has been using sun.misc.Unsafe which is a hidden API and dependency to the class doesn't seem to be able to be cut easily in the near future. In order to make it possible to build the lib with the SDK only, a stubs library called libcore_private.stubs is defined to provide build-time only information on the hidden APIs exclusively to protobuf. At runtime, the Unsafe class is provide by the OS and protobuf is linked to the class loaded there. Bug: 73204840 Test: m -j libprotobuf-java-lite is successful and does not show any link-type check warning Merged-In: I2fce2662cc65d4e57fc75bbf30ebf9f7d47c6775 (cherry picked from commit dc08924dc7262e5c06c1108f67f66e82598af806) libcore_private.stubs cannot be built with JDK9 The package sun.misc in the stubs library is causing module name conflict when building with JDK9. error: package exists in another module: jdk.unsupported Fixing the error by setting java_version to 1.7 so that modules are not used when building the stubs lib. Bug: 74211600 Test: EXPERIMENTAL_USE_OPENJDK9=true m -j libcore_private.stubs Merged-In: Ifa709bef2dc8e2b11048ef96fc7517d8c25e8a7f (cherry picked from commit 0e4379e7504849d7a2755b9a0264cd7901accc88) libcore_private.stubs is uninstallable Make sure that libcore_private.stubs isn't installed to the device as a standalone jar library. The lib is meant to provide build-time only symbol information to protobuf and thus is not runnable. Bug: 73204840 Test: m -j libcore_private.stubs does not create libcore_private.stubs.jar in /system/framework Merged-In: I7c661211161937dba5ee71fdc4bb8b9f101c5a59 (cherry picked from commit 6297aad4d72232863366d62ae8799ce9cf492a43) Don't force libcore_private.stubs to be built with java 1.7 We no longer need to build libcore_private.stubs with java 1.7, because the library is only built for target and not for host, where it conflicts with the module jdk.unsupported. Bug: 74211600 Test: m -j libprotobuf-java-lite is successful. both host and target variant of the lib is generated. Test: EXPERIMENTAL_USE_OPENJDK9=true m -j libprotobuf-java-lite is also successful. Merged-In: I61a49d537ee6abad29e5661944ffc612a94465b8 (cherry picked from commit ed6d68ed9747c96d54d6773af40060e780443b1a) Change-Id: I256652071b8a11cfbebcf6a4906546e6434f7372
-rw-r--r--Android.bp17
-rw-r--r--java/core/src/stubs/sun/misc/Unsafe.java45
2 files changed, 61 insertions, 1 deletions
diff --git a/Android.bp b/Android.bp
index 6f9f7cb95..84b10229b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -506,7 +506,7 @@ java_library_host {
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_library_static {
"java/core/src/main/java/com/google/protobuf/WireFormat.java",
],
+ target: {
+ android: {
+ libs: ["libcore_private.stubs"],
+ },
+ },
+
java_version: "1.7",
}
@@ -581,3 +587,12 @@ java_library_host {
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 000000000..fa66e4873
--- /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 */ }
+}