From 20cb69cc3799e4eb2de33eafe8464b5bd51869aa Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Sat, 7 Sep 2019 12:11:21 -0700 Subject: [PATCH] WORKING Add Cronet to main build TODO: adjust CI --- COMPILING.md | 5 +++++ build.gradle | 1 + cronet/build.gradle | 19 ++++++++---------- cronet/settings.gradle | 1 - .../io/grpc/cronet/CronetChannelBuilder.java | 1 + .../io/grpc/cronet/CronetClientStream.java | 4 +--- .../grpc/cronet/CronetClientStreamTest.java | 5 +++-- settings.gradle | 20 +++++++++++++++++++ 8 files changed, 39 insertions(+), 17 deletions(-) delete mode 100644 cronet/settings.gradle diff --git a/COMPILING.md b/COMPILING.md index 865861f1ceb..6869a25c747 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -11,6 +11,11 @@ developers don't have C compilers installed and don't need to run or modify the codegen, the build can skip it. To skip, create the file `/gradle.properties` and add `skipCodegen=true`. +Some parts of grpc-java depend on Android. Since many Java developers don't have +the Android SDK installed and don't need to run or modify the Android +components, the build can skip it. To skip, create the file +`/gradle.properties` and add `skipAndroid=true`. + Then, to build, run: ``` $ ./gradlew build diff --git a/build.gradle b/build.gradle index a20c4319739..74a3467d99f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,5 @@ plugins { + id "com.android.library" apply false // Necessary for Android plugin to find its classes id "com.google.osdetector" apply false id "me.champeau.gradle.japicmp" apply false id "net.ltgt.errorprone" apply false diff --git a/cronet/build.gradle b/cronet/build.gradle index 5852de43c24..a0723af4114 100644 --- a/cronet/build.gradle +++ b/cronet/build.gradle @@ -1,15 +1,9 @@ -apply plugin: 'com.android.library' +plugins { + id "com.android.library" +} description = "gRPC: Cronet Android" -buildscript { - repositories { - google() - jcenter() - } - dependencies { classpath 'com.android.tools.build:gradle:3.3.0' } -} - allprojects { repositories { google() @@ -39,8 +33,11 @@ android { } dependencies { - implementation 'io.grpc:grpc-core:1.24.0-SNAPSHOT' // CURRENT_GRPC_VERSION - testImplementation 'io.grpc:grpc-testing:1.24.0-SNAPSHOT' // CURRENT_GRPC_VERSION + errorprone 'com.google.errorprone:error_prone_core:2.3.3' + errorproneJavac 'com.google.errorprone:javac:9+181-r4173-1' + + implementation project(':grpc-core') + testImplementation project(':grpc-testing') implementation "org.chromium.net:cronet-embedded:66.3359.158" diff --git a/cronet/settings.gradle b/cronet/settings.gradle deleted file mode 100644 index ca2b16c9c76..00000000000 --- a/cronet/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'grpc-cronet' diff --git a/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java b/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java index e40691e453b..c6884d4d3d7 100644 --- a/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java +++ b/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java @@ -119,6 +119,7 @@ public final CronetChannelBuilder alwaysUsePut(boolean enable) { /** * Not supported for building cronet channel. */ + @Deprecated @Override public final CronetChannelBuilder usePlaintext(boolean skipNegotiation) { throw new IllegalArgumentException("Plaintext not currently supported"); diff --git a/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java b/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java index 4fde69d30f7..e7b06650aff 100644 --- a/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java +++ b/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java @@ -47,10 +47,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Queue; import java.util.concurrent.Executor; import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; @@ -256,7 +254,7 @@ public void cancel(Status reason) { class TransportState extends Http2ClientStreamTransportState { private final Object lock; @GuardedBy("lock") - private Queue pendingData = new LinkedList(); + private Collection pendingData = new ArrayList(); @GuardedBy("lock") private boolean streamReady; @GuardedBy("lock") diff --git a/cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java b/cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java index 3a75ebef2d6..6068fa5d231 100644 --- a/cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java +++ b/cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java @@ -254,7 +254,7 @@ public void read() { callback.onReadCompleted( cronetStream, info, - (ByteBuffer) createMessageFrame(new String("response1").getBytes(Charset.forName("UTF-8"))), + createMessageFrame(new String("response1").getBytes(Charset.forName("UTF-8"))), false); // Haven't request any message, so no callback is called here. verify(clientListener, times(0)).messagesAvailable(isA(MessageProducer.class)); @@ -305,7 +305,7 @@ public void streamSucceeded() { callback.onReadCompleted( cronetStream, info, - (ByteBuffer) createMessageFrame(new String("response").getBytes(Charset.forName("UTF-8"))), + createMessageFrame(new String("response").getBytes(Charset.forName("UTF-8"))), false); verify(clientListener, times(1)).messagesAvailable(isA(MessageProducer.class)); verify(cronetStream, times(2)).read(isA(ByteBuffer.class)); @@ -570,6 +570,7 @@ public void reportTrailersWhenTrailersReceivedAfterReadClosed() { assertEquals(Status.UNAUTHENTICATED.getCode(), status.getCode()); } + @SuppressWarnings("deprecation") @Test public void addCronetRequestAnnotation_deprecated() { Object annotation = new Object(); diff --git a/settings.gradle b/settings.gradle index 3f9a7e6ef13..4da05fd9d9c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,6 @@ pluginManagement { plugins { + id "com.android.library" version "3.3.0" id "com.github.johnrengelman.shadow" version "2.0.4" id "com.github.kt3k.coveralls" version "2.0.1" id "com.google.osdetector" version "1.4.0" @@ -9,6 +10,17 @@ pluginManagement { id "net.ltgt.errorprone" version "0.8.1" id "ru.vyarus.animalsniffer" version "1.5.0" } + resolutionStrategy { + eachPlugin { + if (target.id.namespace == "com.android") { + useModule("com.android.tools.build:gradle:${target.version}") + } + } + } + repositories { + gradlePluginPortal() + google() + } } rootProject.name = "grpc" @@ -62,3 +74,11 @@ if (settings.hasProperty('skipCodegen') && skipCodegen.toBoolean()) { include ":grpc-compiler" project(':grpc-compiler').projectDir = "$rootDir/compiler" as File } + +if (settings.hasProperty('skipAndroid') && skipAndroid.toBoolean()) { + println ' * Skipping the build of Android projects because skipAndroid=true' +} else { + println '*** Android SDK is required. To avoid building Android projects, set -PskipAndroid=true' + include ":grpc-cronet" + project(':grpc-cronet').projectDir = "$rootDir/cronet" as File +}