クイックスタート
このガイドでは、簡単な動作例を使用して、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.63.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 サービスは、Protocol Buffersを使用して定義されています。 `proto` ファイルでサービスを定義する方法の詳細については、基本チュートリアルを参照してください。ここでは、サーバーとクライアントスタブの両方に、クライアントから `HelloRequest` パラメーターを受け取り、サーバーから `HelloReply` を返す `SayHello()` RPC メソッドがあり、メソッドが次のように定義されていることだけを知っておく必要があります。
// 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` を開き、`SayHello()` と同じリクエストとレスポンスタイプを持つ新しい `SayHelloAgain()` メソッドを追加します。
// 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`(Hello World サーバーがリッスンしているポート)へのポートフォワーディングが設定されます。
アプリでは、次の値を使用します。
- **ホスト**: `localhost`
- ポート: 8080
次のステップ
- gRPC の紹介とコアコンセプトで gRPC のしくみについて学習します。
- 基本チュートリアルに取り組みます。
- API リファレンスをご覧ください。