Ошибка импорта Android и GRPC io.grpc.examples.helloworld.GreeterGrpc

Я пытаюсь разработать GRPC для мобильного приложения Android. Я нашел образец проекта HelloWorld на сайте https://github.com/grpc/grpc-java/tree/v1.34.1/examples/android/helloworld

При сборке проекта я получил следующую ошибку:

import io.grpc.examples.helloworld.GreeterGrpc; ^ символ: класс GreeterGrpc расположение: пакет io.grpc.examples.helloworld

Я пытаюсь создать приложение с этим градиентом:

     apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'

android {
    compileSdkVersion 28

    defaultConfig {
        applicationId "io.grpc.helloworldexample"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        debug { minifyEnabled false }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        disable 'GoogleAppIndexingWarning', 'HardcodedText', 'InvalidPackage'
        textReport true
        textOutput "stdout"
    }
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.2.0"
    }
    plugins {
        lite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                lite { }
            }
        }
    }
}


dependencies {
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.google.android.material:material:1.1.0-alpha09'

      implementation 'io.grpc:grpc-okhttp:1.34.1'
       implementation 'io.grpc:grpc-protobuf-lite:1.34.1'
       implementation 'io.grpc:grpc-stub:1.34.1'
       compileOnly 'org.apache.tomcat:annotations-api:6.0.53' // necessary for Java 9+

}

Такой прото-файл:

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";

package helloworld;

// The greeting service definition.
service Greeter {
  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;
}

Есть ли проблема в коде или файле Gradle? Не могли бы вы мне помочь, пожалуйста? Спасибо


person user3379281    schedule 22.12.2020    source источник


Ответы (1)


Ошибка указывает на то, что вам не хватает сгенерированного кода службы GreeterGrpc. Чтобы получить сгенерированный код gRPC, вам необходимо передать protoc компилятору подключаемый модуль кодогенерации gRPC-Java.

protobuf {
    protoc { artifact = "com.google.protobuf:protoc:3.12.0" }
    plugins {
        grpc { artifact = "io.grpc:protoc-gen-grpc-java:1.34.1" }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java { option 'lite' }
            }
            task.plugins {
                grpc { // Options added to --grpc_out
                    option 'lite' }
            }
        }
    }
}

Обратите внимание, что в этом случае я решил использовать protoc v3.12.0. Если вы используете protoc старше v3.8.0, это будет

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.2.0"
    }
    plugins {
        lite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
        grpc {
            // some old grpc version, newer ones may not work, suggest upgrading
            artifact = "io.grpc:protoc-gen-grpc-java:1.22.3"
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                lite { }
                grpc { // Options added to --grpc_out
                    option 'lite' }
            }
        }
    }
}

person voidzcy    schedule 22.12.2020