Protocol buffers 有没有办法将google protobuf二进制文件(.pb文件)反编译为.proto文件

Protocol buffers 有没有办法将google protobuf二进制文件(.pb文件)反编译为.proto文件,protocol-buffers,protobuf-java,Protocol Buffers,Protobuf Java,当我反转apk时,我得到了.pb文件而不是.proto文件,有没有办法将此文件反编译为.proto文件,或者我可以从该.pb文件生成java代码?如果(根据注释)您拥有的文件是编译描述符集,那么您可以使用protoc生成任何语言(它通常支持的语言)由此;只需在命令行中使用--descriptor\u set\u in=FILES选项将您的文件指定为输入(代替FILES),并使用--java\u out=out\u DIR(或其他)指示输出语言和位置。文件-是数据吗?或者它是一个已编译的描述符集?

当我反转apk时,我得到了.pb文件而不是.proto文件,有没有办法将此文件反编译为.proto文件,或者我可以从该.pb文件生成java代码?

如果(根据注释)您拥有的文件是编译描述符集,那么您可以使用
protoc
生成任何语言(它通常支持的语言)由此;只需在命令行中使用
--descriptor\u set\u in=FILES
选项将您的文件指定为输入(代替
FILES
),并使用
--java\u out=out\u DIR
(或其他)指示输出语言和位置。

文件-是数据吗?或者它是一个已编译的描述符集?如果是数据:你必须对其进行逆向工程——有工具可以帮助,所以这并不一定难。如果是已编译描述符集:则更容易。Protoc有一个用于查看原始有效负载的工具,我的在线工具也是一样——编译描述符集。你是说破译你的原话?有没有办法直接获取.proto文件?问题:你需要.proto做什么?是编辑用的吗?如果是CodeGen,IIRC协议将接受编译后的描述符集作为java代码生成的输入(或者您可以直接调用插件——插件的工作方式是将编译后的描述符集通过管道传输到stdin)。哪个插件?protoc可能无法通过此文件生成此文件。这实际上是如何工作的?当我使用命令protoc--description\u set\u in=./myfile.pb--java\u out=。我收到一个错误“缺少输入文件”。当我在末尾添加一个空文件时(无论它是否存在)。我收到一个错误“没有这样的文件或目录”。@Kevin
描述符设置在
中,而不是
描述设置在
中。对不起。这是打字错误。我使用的是描述符集_in@Kevin哎呀,我的错-您仍然需要指定文件-它在测试文件之前检查描述符集。所以:试试
protoc--descriptor\u set\u in=your.pb--java\u out=somedir-your.proto
——我刚刚在本地测试了这个,它运行良好(没有
your.proto
);唯一的技巧是:知道描述符集中文件的名称。如果你不明白的话,我可能可以提取出,
未知标志:
版本3.14.0中的描述符集