Android protobuf纳米用法

我正在尝试使用protobuf nano从proto文件下面生成java文件。 我得到了一些关于如何继续这个SO线程的基本指令。

我有这个proto文件, personal.proto

 package tutorial; option java_package = "com.example.tutorial"; option java_outer_classname = "AddressBookProtos"; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } message AddressBook { repeated Person person = 1; } 

我试着按照这里的说明,更具体地说是NANO版本

  1. 从这里下载了protobuf-2.5.0.zip和编译器protoc-2.5.0-win32.zip
  2. 解压缩protobuf-2.5.0.zip到一个文件夹,在src子文件夹中我解压缩了protoc.exe
  3. 更改为java文件夹并在那里发出: mvn clean package -P nano 。 该命令运行正常,在target文件夹中我有protobuf-java-2.5.0.jar

从这里我不知道如何继续,因为在最初的文档中我有这样的声明:

 - Link with the generated jar file java/target/protobuf-java-2.3.0-nano.jar. 

我不确定这意味着什么,如何链接? 是否有一些protoc.exe参数指定要使用的jar文件?

我试图发出这个命令: protoc --javanano_out=enum_style=java --java_out=generated personal.proto

但我得到这个错误: – --javanano_out: protoc-gen-javanano: The system cannot find the file specified--javanano_out: protoc-gen-javanano: The system cannot find the file specified

问题是:上面我错过了什么/做错了什么? 我试图从proto文件上面生成java文件。

我认为这个javanano不是用javanano支持编译的。

预编译的windows版本2.5.0不包括nano支持,看看源代码,在“ src\google\protobuf\compiler ”路径中,包括java生成器但不包括javanano生成器。 谷歌存储库的最新源代码包括javanano。

您可以下载最新的源代码并尝试使用MinGW和msys或CygWin编译它,看一下这篇文章如何在Windows中构建谷歌协议缓冲区用于mingw?

(我稍后会发布建设过程的详细信息)

更新:

构建protoc.exe后的最后一个命令行

对于一个原型文件

 protoc --javanano_out=store_unknown_fields=true:target/generated-sources personal.proto, target/generated-sources 

对于多个原型文件

 protoc --javanano_out=store_unknown_fields=true:target/generated-sources --proto_path=inputpath input/*.proto 

EDIT Nano生成器使用public static final int字段替换enum成员。 如果类具有可选的枚举成员,则会出现问题,因为该成员将被编译为原始int值,并且将采用默认值零,这将是枚举中的第一个元素。 为了区分未设置枚举值的情况,可以利用optional_field_style生成java.lang.Integer而不是原始int的optional_field_style参数。 解析proto时,调用者可以在使用该值之前检查该值是否为null。 Null表示未设置值。

上面的调用脚本可以变成:

 protoc --javanano_out=store_unknown_fields=true,optional_field_style=reftypes:target/generated-sources --proto_path=input input/*.proto