Android protobuf nano usage

后端 未结 1 673
太阳男子
太阳男子 2021-02-09 21:46

I am trying to generate java files from below proto file using protobuf nano. I got some basic instruction on how to proceed in this SO thread.

I have this proto file, <

1条回答
  •  名媛妹妹
    2021-02-09 21:51

    I think this protoc is not compiled with javanano support.

    The pre-compiled windows version 2.5.0 does not include nano support, take a look at the source code, in the "src\google\protobuf\compiler" path, includes the java generator but not the javanano generator. The latest source code at google repositories includes javanano.

    You can download the latest source code and try to compile it using MinGW and msys or CygWin, take a look at this post How to build google protocol buffers in Windows for mingw?

    (I will post details for the building process later)

    UPDATE:

    The final command line after building protoc.exe

    For one proto file

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

    For multiple proto files

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

    EDIT Nano generator replaces enum members with public static final int fields. This is a problem if a class has an optional enum member because that member will be compiled to a primitive int value and will take the default value of zero, which will be the first element from enum. To distinguish the cases when an enum value was not set, one can take advantage of optional_field_style parameter that will generate java.lang.Integer instead of a primitive int. When the proto is parsed, the caller can check if the value is null before using the value. Null means the value was not set.

    The above call script can become:

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

    0 讨论(0)
提交回复
热议问题