android grpc 示例应用程序中的 protobuf 生成名为 "nano" 的额外包层次结构
protobuf in the android grpc sample app generating extra package heirarchy called "nano"
我正在尝试为 grpc 构建示例 android 应用程序。
hello_world.proto文件如下:
syntax = "proto3";
package helloworld;
option java_multiple_files = true;
option java_package = "io.github.caio.grpc";
option java_outer_classname = "HelloWorldProto";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloResponse) {}
rpc GetData (HelloRequest) returns (HelloResponse) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloResponse {
string message = 1;
}
gradle个文件如下
应用级别gradle:
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.grpctest.grpcandroidapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.0.0-beta-2'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:0.12.0' // CURRENT_GRPC_VERSION
}
}
generateProtoTasks {
all().each { task ->
task.builtins {
javanano {
// Options added to --javanano_out
option 'ignore_services=true'
}
}
task.plugins {
grpc {
// Options added to --grpc_out
option 'nano'
}
}
task.plugins {
grpc {
// Write the generated files under
// "$generatedFilesBaseDir/$sourceSet/grpcjava"
outputSubDir = ''
}
}
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'io.grpc:grpc-okhttp:0.12.0' // CURRENT_GRPC_VERSION
compile 'io.grpc:grpc-protobuf-nano:0.12.0' // CURRENT_GRPC_VERSION
compile 'io.grpc:grpc-stub:0.12.0' // CURRENT_GRPC_VERSION
compile 'javax.annotation:javax.annotation-api:1.2'
}
项目级别gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath "com.google.protobuf:protobuf-gradle-plugin:0.7.4"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
有了这个.proto文件,我们应该得到生成的Java个文件的包结构如下:
io->grpc->examples->helloworld
但是生成的 HelloRequest 和 HelloResponse 文件在以下包结构中:
io->grpc->examples->helloworld->nano
但是 GreeterGrpc.java 文件是在正确的包结构中生成的。
GreeterGrpc 中的 "HelloRequest" 和 "HelloResposne" 导入引用 io.grpc.examples.helloworld 包,因此编译失败。
请让我知道这个问题的解决方案。
grpc-java 0.13 及更早版本需要使用 option 'nano=true'
。 grpc-java 0.14 将另外支持option 'nano'
。
我正在尝试为 grpc 构建示例 android 应用程序。
hello_world.proto文件如下:
syntax = "proto3";
package helloworld;
option java_multiple_files = true;
option java_package = "io.github.caio.grpc";
option java_outer_classname = "HelloWorldProto";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloResponse) {}
rpc GetData (HelloRequest) returns (HelloResponse) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloResponse {
string message = 1;
}
gradle个文件如下
应用级别gradle:
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.grpctest.grpcandroidapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.0.0-beta-2'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:0.12.0' // CURRENT_GRPC_VERSION
}
}
generateProtoTasks {
all().each { task ->
task.builtins {
javanano {
// Options added to --javanano_out
option 'ignore_services=true'
}
}
task.plugins {
grpc {
// Options added to --grpc_out
option 'nano'
}
}
task.plugins {
grpc {
// Write the generated files under
// "$generatedFilesBaseDir/$sourceSet/grpcjava"
outputSubDir = ''
}
}
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'io.grpc:grpc-okhttp:0.12.0' // CURRENT_GRPC_VERSION
compile 'io.grpc:grpc-protobuf-nano:0.12.0' // CURRENT_GRPC_VERSION
compile 'io.grpc:grpc-stub:0.12.0' // CURRENT_GRPC_VERSION
compile 'javax.annotation:javax.annotation-api:1.2'
}
项目级别gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath "com.google.protobuf:protobuf-gradle-plugin:0.7.4"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
有了这个.proto文件,我们应该得到生成的Java个文件的包结构如下:
io->grpc->examples->helloworld
但是生成的 HelloRequest 和 HelloResponse 文件在以下包结构中:
io->grpc->examples->helloworld->nano
但是 GreeterGrpc.java 文件是在正确的包结构中生成的。
GreeterGrpc 中的 "HelloRequest" 和 "HelloResposne" 导入引用 io.grpc.examples.helloworld 包,因此编译失败。
请让我知道这个问题的解决方案。
grpc-java 0.13 及更早版本需要使用 option 'nano=true'
。 grpc-java 0.14 将另外支持option 'nano'
。