クイックスタート

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

クイックスタート

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

前提条件

  • JDK バージョン 11 以降。

    1. この例では AGP 7.x (Java 11–17 と互換性あり) を使用しています。AGP 8.x にアップグレードすると、Java 17 以降が必要になります。
  • Android SDK、API レベル 16 以降

    1. Android Studio または Android コマンドラインツールをインストールしてください。

    2. 以下の環境変数を設定して、Android SDK の場所を他のツールやスクリプトに知らせてください。

      export ANDROID_SDK_ROOT="<path-to-your-android-sdk>"
      
  • USB デバッグ が有効に設定された Android デバイス、または Android 仮想デバイス

  • Android のツールとライブラリとの互換性を確保するために、gradle.properties に次の行を追加してください: android.useAndroidX=true

サンプルコードを取得する

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

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

    git clone -b v1.73.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 ファイルでサービスを定義する方法の詳細については、「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;
}

以下の変更を行ってください。

  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

次は何をするか