46 lines
1.7 KiB
Markdown
46 lines
1.7 KiB
Markdown
|
gRPC Cronet Transport
|
||
|
========================
|
||
|
|
||
|
**EXPERIMENTAL:** *gRPC's Cronet transport is an experimental API, and is not
|
||
|
yet integrated with our build system. Using Cronet with gRPC requires manually
|
||
|
integrating the gRPC code in this directory into your Android application.*
|
||
|
|
||
|
This code enables using the [Chromium networking stack
|
||
|
(Cronet)](https://chromium.googlesource.com/chromium/src/+/master/components/cronet)
|
||
|
as the transport layer for gRPC on Android. This lets your Android app make
|
||
|
RPCs using the same networking stack as used in the Chrome browser.
|
||
|
|
||
|
Some advantages of using Cronet with gRPC:
|
||
|
* Bundles an OpenSSL implementation, enabling TLS connections even on older
|
||
|
versions of Android without additional configuration
|
||
|
* Robust to Android network connectivity changes
|
||
|
* Support for [QUIC](https://www.chromium.org/quic)
|
||
|
|
||
|
Cronet jars are available on Google's Maven repository. See the example app at
|
||
|
https://github.com/GoogleChrome/cronet-sample/blob/master/README.md. To use
|
||
|
Cronet with gRPC, you will need to copy the gRPC source files contained in this
|
||
|
directory into your application's code, as we do not currently provide a
|
||
|
`grpc-cronet` dependency.
|
||
|
|
||
|
To use Cronet, you must have the `ACCESS_NETWORK_STATE` permission set in
|
||
|
`AndroidManifest.xml`:
|
||
|
|
||
|
```
|
||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||
|
```
|
||
|
|
||
|
Once the above steps are completed, you can create a gRPC Cronet channel as
|
||
|
follows:
|
||
|
|
||
|
```
|
||
|
import io.grpc.cronet.CronetChannelBuilder;
|
||
|
import org.chromium.net.ExperimentalCronetEngine;
|
||
|
|
||
|
...
|
||
|
|
||
|
ExperimentalCronetEngine engine =
|
||
|
new ExperimentalCronetEngine.Builder(context /* Android Context */).build();
|
||
|
ManagedChannel channel = CronetChannelBuilder.forAddress("localhost", 8080, engine).build();
|
||
|
```
|
||
|
|