Build the gRPC Java library from source am: 2d04a32487 am: 3124595792 am: 25601000b1 am: 41afd754ef

Original change: https://android-review.googlesource.com/c/platform/external/grpc-grpc-java/+/1320727

Change-Id: I635621e0268a08b1c76372b0aced7f13dc878db1
diff --git a/Android.bp b/Android.bp
index 67278a9..f7835ef 100644
--- a/Android.bp
+++ b/Android.bp
@@ -17,10 +17,14 @@
 java_library_host {
     name: "grpc-java",
     static_libs: [
+        "grpc-java-context",
         "grpc-java-core",
-	"grpc-java-context",
-	"grpc-java-protobuf",
-	"grpc-java-stub",
-	"grpc-java-netty-shaded",
+        "grpc-java-core-inprocess",
+        "grpc-java-core-internal",
+        "grpc-java-core-util",
+        "grpc-java-netty-shaded",
+        "grpc-java-protobuf",
+        "grpc-java-protobuf-lite",
+        "grpc-java-stub",
     ]
 }
diff --git a/annotation-stubs/Android.bp b/annotation-stubs/Android.bp
new file mode 100644
index 0000000..32d177a
--- /dev/null
+++ b/annotation-stubs/Android.bp
@@ -0,0 +1,38 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+java_library_host {
+    name: "grpc-java-annotation-stubs",
+    srcs: [
+        ":grpc-java-annotation-stubs-srcjar",
+    ],
+}
+
+gensrcs {
+    name: "grpc-java-annotation-stubs-srcjar",
+    tool_files: [
+        "gen_annotations.py",
+    ],
+    tools: [
+        "soong_zip",
+    ],
+    cmd: "$(location gen_annotations.py) $(genDir)/java && " +
+         "$(location soong_zip) -jar -o $(out) -C $(genDir)/java -D $(genDir)/java",
+    srcs: [
+        // A dummy source file since Soong crashes otherwise.
+        "Android.bp",
+    ],
+    output_extension: "srcjar",
+}
diff --git a/annotation-stubs/gen_annotations.py b/annotation-stubs/gen_annotations.py
new file mode 100755
index 0000000..10c33fa
--- /dev/null
+++ b/annotation-stubs/gen_annotations.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2020 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Generates stubs for annotations that aren't in the Android source tree."""
+
+import pathlib
+import string
+import sys
+
+_ANNOTATIONS_CLASSES = ['org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement']
+
+_CLASS_TEMPLATE = string.Template("""
+package ${package_name};
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({
+    ElementType.ANNOTATION_TYPE,
+    ElementType.CONSTRUCTOR,
+    ElementType.FIELD,
+    ElementType.LOCAL_VARIABLE,
+    ElementType.METHOD,
+    ElementType.PACKAGE,
+    ElementType.PARAMETER,
+    ElementType.TYPE,
+    ElementType.TYPE_PARAMETER,
+    ElementType.TYPE_USE})
+@Retention(RetentionPolicy.SOURCE)
+public @interface ${class_name} {}
+""")
+
+if __name__ == '__main__':
+  out_dir = pathlib.Path(sys.argv[1])
+
+  for c in _ANNOTATIONS_CLASSES:
+    parts = c.split('.')
+    src_path = out_dir.joinpath(*parts).with_suffix('.java')
+    src_path.parent.mkdir(parents=True)
+    src_path.write_text(
+        _CLASS_TEMPLATE.substitute(
+            package_name='.'.join(parts[:-1]), class_name=parts[-1]))
diff --git a/core/Android.bp b/core/Android.bp
index 1d7d87e..ed371b0d 100644
--- a/core/Android.bp
+++ b/core/Android.bp
@@ -12,12 +12,63 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //
-// TODO: build from source instead
 
-java_import_host {
+java_library_host {
     name: "grpc-java-core",
-    jars: [
-        "grpc-core-1.14.0.jar",
+    srcs: [
+        "src/main/java/io/grpc/*.java",
+    ],
+    java_resource_dirs: [
+        "src/main/resources",
+    ],
+    libs: [
+        "grpc-java-context",
+        "jsr305",
+        "guava",
     ],
 }
 
+java_library_host {
+    name: "grpc-java-core-inprocess",
+    srcs: [
+        "src/main/java/io/grpc/inprocess/*.java",
+    ],
+    libs: [
+        "grpc-java-core",
+        "grpc-java-core-internal",
+        "grpc-java-context",
+        "jsr305",
+        "guava",
+    ],
+}
+
+java_library_host {
+    name: "grpc-java-core-internal",
+    srcs: [
+        "src/main/java/io/grpc/internal/*.java",
+    ],
+    libs: [
+        "grpc-java-annotation-stubs",
+        "grpc-java-core",
+        "grpc-java-context",
+        "jsr305",
+        "gson-prebuilt-jar",
+        "error_prone_annotations",
+        "guava",
+        "opencensus-java-api",
+        "opencensus-java-contrib-grpc-metrics",
+    ],
+}
+
+java_library_host {
+    name: "grpc-java-core-util",
+    srcs: [
+        "src/main/java/io/grpc/util/*.java",
+    ],
+    libs: [
+        "grpc-java-core",
+        "grpc-java-core-internal",
+        "jsr305",
+        "guava",
+    ],
+}
diff --git a/core/grpc-core-1.14.0.jar b/core/grpc-core-1.14.0.jar
deleted file mode 100644
index 4057e1a..0000000
--- a/core/grpc-core-1.14.0.jar
+++ /dev/null
Binary files differ
diff --git a/protobuf-lite/Android.bp b/protobuf-lite/Android.bp
new file mode 100644
index 0000000..a8374f5
--- /dev/null
+++ b/protobuf-lite/Android.bp
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+
+java_library_host {
+    name: "grpc-java-protobuf-lite",
+    srcs: [
+        "src/main/java/**/*.java",
+    ],
+    libs: [
+        "grpc-java-core",
+        "guava",
+        "jsr305",
+        "libprotobuf-java-full",
+    ],
+}
diff --git a/protobuf/Android.bp b/protobuf/Android.bp
index cec1d76..3e1d243 100644
--- a/protobuf/Android.bp
+++ b/protobuf/Android.bp
@@ -13,10 +13,20 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //
-// TODO: Build from source instead
-java_import_host {
+//
+
+java_library_host {
     name: "grpc-java-protobuf",
-    jars: [
-        "grpc-protobuf-1.14.0.jar",
+    srcs: [
+        "src/main/java/**/*.java",
+    ],
+    libs: [
+        "grpc-java-core",
+        "grpc-java-protobuf-lite",
+        "com.google.api.grpc_proto-google-common-protos-prebuilt-jar",
+        "jsr305",
+        "guava",
+        "libprotobuf-java-full",
+        "libprotobuf-java-util-full",
     ],
 }
diff --git a/protobuf/grpc-protobuf-1.14.0.jar b/protobuf/grpc-protobuf-1.14.0.jar
deleted file mode 100644
index c9bad69..0000000
--- a/protobuf/grpc-protobuf-1.14.0.jar
+++ /dev/null
Binary files differ