クイックスタート

このガイドでは、簡単な動作例を使用して、Android Java で gRPC を使い始める方法を説明します。

クイックスタート

このガイドでは、簡単な動作例を使用して、Android Java で gRPC を使い始める方法を説明します。

前提条件

サンプルコードを入手する

サンプルコードは、grpc-java リポジトリの一部です。

  1. リポジトリを zip ファイルとしてダウンロードして解凍するか、リポジトリをクローンします。

    $ git clone -b v1.63.0 https://github.com/grpc/grpc-java
    
  2. examples ディレクトリに移動します。

    $ cd grpc-java/examples
    

サンプルを実行する

  1. サーバーをコンパイルします。

    $ ./gradlew installDist
    
  2. サーバーを実行します。

    $ ./build/install/examples/bin/hello-world-server
    INFO: Server started, listening on 50051
    
  3. 別のターミナルから、クライアントをビルドしてデバイスにインストールします。

    $ (cd android/helloworld; ../../gradlew installDebug)
    
  4. デバイスからクライアントアプリを起動します。

  5. クライアントアプリで、サーバーの**ホスト**と**ポート**情報を入力します。入力する値は、デバイスの種類(実機または仮想)によって異なります。詳細は、以下のサーバーへの接続を参照してください。

  6. **メッセージ**ボックスに「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;
}

以下の変更を加えます。

  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;
    }
    
  2. `android/helloworld/app/src/main/proto/helloworld.proto` にも同じ変更を加えます。

ファイルを保存することを忘れないでください!

アプリを更新する

サンプルをビルドすると、ビルドプロセスによって `GreeterGrpc.java` が再生成されます。これには、生成された gRPC クライアントとサーバークラスが含まれています。また、リクエストとレスポンスタイプを入力、シリアル化、および取得するためのクラスも再生成されます。

ただし、サンプルアプリの手書き部分で新しいメソッドを実装して呼び出す必要があります。

サーバーを更新する

Java クイックスタートページのサーバーの更新に記載されている手順に従います。

クライアントを更新する

次の手順に従います。

  1. `android/helloworld/app/src/main/java/io/grpc/helloworldexample` フォルダーから `HelloworldActivity.java` を開きます。

  2. `sayHello()` の呼び出しを含むメソッドを見つけます。次のコード行が表示されます。

    HelloReply reply = stub.sayHello(request);
    return reply.getMessage();
    
  3. `return` ステートメント式に `sayHelloAgain()` の呼び出しを次のように追加します。

    return reply.getMessage() + "\n" + stub.sayHelloAgain(request).getMessage();
    

更新されたアプリを実行する

以前と同様に、クライアントとサーバーを実行します。 `examples` ディレクトリから次のコマンドを実行します。

  1. サーバーをコンパイルします。

    $ ./gradlew installDist
    
  2. サーバーを実行します。

    $ ./build/install/examples/bin/hello-world-server
    INFO: Server started, listening on 50051
    
  3. 別のターミナルから、クライアントをビルドしてデバイスにインストールします。

    $ (cd android/helloworld; ../../gradlew installDebug)
    
  4. デバイスからクライアントアプリを起動します。

  5. クライアントアプリで、サーバーの**ホスト**と**ポート**情報を入力します。入力する値は、デバイスの種類(実機または仮想)によって異なります。詳細は、以下のサーバーへの接続を参照してください。

  6. **メッセージ**ボックスに「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

次のステップ