クイックスタート
このガイドでは、簡単な動作例を使って Android Java で gRPC を開始する方法を説明します。
クイックスタート
前提条件
JDK バージョン 11 以降。
- この例では AGP 7.x (Java 11–17 と互換性あり) を使用しています。AGP 8.x にアップグレードすると、Java 17 以降が必要になります。
Android SDK、API レベル 16 以降
Android Studio または Android コマンドラインツールをインストールしてください。
以下の環境変数を設定して、Android SDK の場所を他のツールやスクリプトに知らせてください。
export ANDROID_SDK_ROOT="<path-to-your-android-sdk>"
USB デバッグ が有効に設定された Android デバイス、または Android 仮想デバイス
Android のツールとライブラリとの互換性を確保するために、
gradle.propertiesに次の行を追加してください: android.useAndroidX=true
注記
gRPC Java は、Android デバイス上でサーバーを実行することをサポートしていません。このクイックスタートでは、Android クライアントアプリはローカル(非 Android)コンピューターで実行されているサーバーに接続します。サンプルコードを取得する
サンプルコードは grpc-java リポジトリの一部です。
リポジトリを zip ファイルとしてダウンロード して解凍するか、リポジトリをクローンしてください。
git clone -b v1.73.0 https://github.com/grpc/grpc-javaexamplesディレクトリに移動
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 ファイルでサービスを定義する方法の詳細については、「Basics tutorial」を参照してください。現時点では、サーバーとクライアントスタブの両方に、クライアントから 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リファレンス(APIリファレンス)を探索してください。