升级不带 .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 文件中仍然可用的所有信息。
我有一个 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 文件中仍然可用的所有信息。