升级不带 .proto 的 protobuf jar 的命名空间

Upgrade namespace of protobuf jar without .proto

我有一个 jar myGenerated.jar 是由某些版本的 Google protocol buffer 生成的(不确定是哪个版本)。该 jar 包含对命名空间 com.foo.bar 中 类 的引用。我想更改它,以便 类 位于命名空间 com.baz 中。不幸的是,我没有用于生成 jar 的 .proto 文件——它似乎已经遗失了。

有没有办法在没有 .proto 的情况下更改生成的 类 的命名空间?

或者(因为这很容易得出前一个答案),我可以从现有的 jar 中逆向工程 .proto 吗?

键入 google 或 duckduck 去 java 反编译器。

这里有一些不错的东西http://jd.benow.ca/

选择独立或 eclipse 插件获取原始 java 文件。

使用 dirtyJOE 编辑字节码并更改所有包名称(和文件夹,如果在 jar 中按层次结构)。

您应该能够通过使用协议缓冲区反射 API 对原始 .proto 文件内容进行逆向工程。对于您关心的每个消息类型 MyMessage,您可以调用 MyMessage.getDescriptor(),然后使用 API 描述的 here 检查描述符以确定存在哪些字段等。我不认为你可以逐字恢复 .proto 文件内容(例如可能不是评论)但你至少可以恢复所有类型及其字段名称和标签号。 MyMessage.getDescriptor().getFile().toProto() 之类的内容应该会为您提供 .proto 文件中仍然可用的所有信息。