我有一个jar myGenerated.jar
,它是由某个版本的Google协议缓冲区生成的(不知道哪个版本)。该jar包含对命名空间com.foo.bar
中的类的引用。我想更改它,以便类在命名空间com.baz
中。不幸的是,我没有用于生成jar的.proto文件 - 它似乎已经被遗忘了。
有没有办法在没有.proto?
的情况下更改生成的类的命名空间或者(因为这很容易导致对前一个问题的回答),我可以从现有的jar中反向设计.proto吗?
答案 0 :(得分:1)
使用dirtyJOE编辑字节码并更改所有包名称(和文件夹,如果在jar中按层次结构)。
答案 1 :(得分:1)
您应该能够使用协议缓冲区反射API对原始.proto文件内容进行反向工程。对于您关心的每种消息类型MyMessage
,您可以调用MyMessage.getDescriptor()
,然后使用描述here的API检查描述符,以确定存在哪些字段等等。我不认为你可以逐字恢复.proto文件内容(例如可能不是注释),但你至少可以用它们的字段名和标签号恢复所有类型。像MyMessage.getDescriptor().getFile().toProto()
这样的东西应该可以提供.proto文件中仍然可用的所有信息。
答案 2 :(得分:0)