快速入门
本指南通过一个简单的可运行示例,帮助您开始在 Android Java 中使用 gRPC。
快速入门
前提条件
JDK 版本 7 或更高
Android SDK,API 级别 16 或更高
安装 Android Studio 或 Android 命令行工具。
通过设置以下环境变量,让其他工具和脚本知道您的 Android SDK 所在位置
export ANDROID_SDK_ROOT="<path-to-your-android-sdk>"
一个已设置为 USB 调试 的 Android 设备或 Android 虚拟设备
注意
gRPC Java 不支持在 Android 设备上运行服务器。对于本快速入门指南,Android 客户端应用将连接到运行在您本地(非 Android)计算机上的服务器。获取示例代码
示例代码是 grpc-java 仓库的一部分。
将仓库下载为 zip 文件 并解压,或克隆仓库
git clone -b v1.72.0 https://github.com/grpc/grpc-java
切换到 examples 目录
cd grpc-java/examples
运行示例
编译服务器
./gradlew installDist
运行服务器
./build/install/examples/bin/hello-world-server INFO: Server started, listening on 50051
从另一个终端,构建客户端并将其安装到您的设备上
(cd android/helloworld; ../../gradlew installDebug)
在您的设备上启动客户端应用。
在客户端应用中,输入服务器的主机和端口信息。输入的值取决于设备类型(真实设备或虚拟设备)—— 详情请参阅下面的连接到服务器部分。
在消息框中输入“Alice”并点击发送。您将看到以下响应
Hello Alice
恭喜!您刚刚运行了一个使用 gRPC 的客户端-服务器应用。
注意
本页面显示的客户端和服务器跟踪输出中省略了时间戳。更新 gRPC 服务
在本节中,您将通过添加一个额外的服务器方法来更新应用。gRPC 服务是使用协议缓冲区定义的。要了解如何在 .proto
文件中定义服务,请参阅基础教程。现在,您只需要知道服务器和客户端 stub 都有一个 SayHello()
RPC 方法,该方法接受来自客户端的 HelloRequest
参数并返回来自服务器的 HelloReply
,并且该方法定义如下:
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
进行以下更改
打开
src/main/proto/helloworld.proto
并添加一个新的SayHelloAgain()
方法,其请求和响应类型与SayHello()
相同// The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} // Sends another greeting rpc SayHelloAgain (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; }
对
android/helloworld/app/src/main/proto/helloworld.proto
进行相同的更改。
记住保存文件!
更新应用
构建示例时,构建过程会重新生成 GreeterGrpc.java
,其中包含生成的 gRPC 客户端和服务器类。这还会重新生成用于填充、序列化和检索我们的请求和响应类型的类。
然而,您仍然需要在示例应用的手写部分实现和调用新方法。
更新服务器
遵循 Java 快速入门页面中更新服务器部分给出的说明。
更新客户端
遵循以下步骤
打开
android/helloworld/app/src/main/java/io/grpc/helloworldexample
文件夹中的HelloworldActivity.java
。找到包含调用
sayHello()
的方法。您会看到以下代码行HelloReply reply = stub.sayHello(request); return reply.getMessage();
在 return 语句表达式中添加对
sayHelloAgain()
的调用,如下所示:return reply.getMessage() + "\n" + stub.sayHelloAgain(request).getMessage();
运行更新后的应用
像之前一样运行客户端和服务器。从 examples
目录执行以下命令
编译服务器
./gradlew installDist
运行服务器
./build/install/examples/bin/hello-world-server INFO: Server started, listening on 50051
从另一个终端,构建客户端并将其安装到您的设备上
(cd android/helloworld; ../../gradlew installDebug)
在您的设备上启动客户端应用。
在客户端应用中,输入服务器的主机和端口信息。输入的值取决于设备类型(真实设备或虚拟设备)—— 详情请参阅下面的连接到服务器部分。
在消息框中输入“Alice”并点击发送。您将看到以下响应
Hello Alice Hello again Alice
连接到服务器
从虚拟设备连接
在您的 Android 虚拟设备上运行 Hello World 应用并使用以下值
- 主机:
10.0.2.2
- 端口: 50051
从物理设备连接
要在物理设备上通过 USB 调试运行应用,您必须使用 adb
命令配置 USB 端口转发,如下所示:
adb reverse tcp:8080 tcp:50051
这会设置从设备上的端口 8080 到连接的计算机上的端口 50051 的端口转发,端口 50051 是 Hello World 服务器正在监听的端口。
在应用中,使用以下值
- 主机:
localhost
- 端口: 8080