Android上的Protobuf:错误编译时在protoc文件中定义的重复类

时间:2017-06-16 13:17:50

标签: android protocol-buffers grpc grpc-java

我想在Android上编写一个Grpc客户端。我关注higher precedence

这是我的外build.gradle个文件:

apply plugin: 'java'
apply plugin: 'com.google.protobuf'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.0"

    }
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.2.0"
    }
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.3.0'
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
    }
}

allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

这是我的内部文件build.gradle文件:

dependencies {
    compile 'com.android.support:appcompat-v7:23.+'

    // You need to build grpc-java to obtain these libraries below.
    compile 'io.grpc:grpc-okhttp:1.3.0' // CURRENT_GRPC_VERSION
    compile 'io.grpc:grpc-protobuf-lite:1.3.0' // CURRENT_GRPC_VERSION
    compile 'io.grpc:grpc-stub:1.3.0' // CURRENT_GRPC_VERSION
    compile 'javax.annotation:javax.annotation-api:1.2'
}

当我尝试构建项目时,我总是遇到错误:

Error:(14, 15) error: duplicate class: io.grpc.routeguideexample.Feature
Error:(13, 15) error: duplicate class: io.grpc.routeguideexample.FeatureDatabase
// ...

使用Feature ...是我在protoc文件中定义的类。请帮我弄清楚我的代码中有什么问题。

由于

1 个答案:

答案 0 :(得分:0)

如果您在代码中定义了Java类io.grpc.routeguideexample.Feature,则会与route_guide.proto文件中生成的类名冲突,从而导致您所描述的错误。您可以更改自己的FeatureFeatureDatabase类的名称或包,也可以更改route_guide.proto以使用其他Java包名称。通常,您可以查找类似build/generated/source/proto/.../javalite/io/grpc/routeguideexample/的目录,以查看原始文件中实际生成的代码。