reproto 0.0.5__tar.gz → 0.0.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. reproto-0.0.7/.git/COMMIT_EDITMSG +29 -0
  2. {reproto-0.0.5 → reproto-0.0.7}/.git/index +0 -0
  3. {reproto-0.0.5 → reproto-0.0.7}/.git/logs/HEAD +2 -0
  4. {reproto-0.0.5 → reproto-0.0.7}/.git/logs/refs/heads/iyue +2 -0
  5. reproto-0.0.7/.git/logs/refs/remotes/gitlab/iyue +3 -0
  6. reproto-0.0.7/.git/logs/refs/remotes/origin/iyue +3 -0
  7. reproto-0.0.7/.git/objects/18/89a4fb55eb3abdc528ce87f0cea039278c06fd +0 -0
  8. reproto-0.0.7/.git/objects/20/cf56ec106bcd66420dd000279f983571b918b6 +0 -0
  9. reproto-0.0.7/.git/objects/21/55b64d52922c88527c102d62f23e5c2abbae79 +0 -0
  10. reproto-0.0.7/.git/objects/33/181441ab38eded005db356da89b54c7d29f452 +0 -0
  11. reproto-0.0.7/.git/objects/33/52dfa8f5d9eb46cc98ea7ccecf02e4d9df95f7 +0 -0
  12. reproto-0.0.7/.git/objects/3c/6f0120229cc2cd8123efbeb7f186eb0a485f29 +0 -0
  13. reproto-0.0.7/.git/objects/40/84f4567d983a977c49598b7d886e46b13ff50b +0 -0
  14. reproto-0.0.7/.git/objects/76/311aa8e59d780763e0d66787067cc5d9613a67 +0 -0
  15. reproto-0.0.7/.git/objects/8c/809c42c7ae13007fd885ee7bcffae7acf2c520 +0 -0
  16. reproto-0.0.7/.git/objects/97/56fe0931216a7c40cbf250e1ab8a6dfd589f13 +0 -0
  17. reproto-0.0.7/.git/objects/9a/e313cdf64cd82416c1238eb493e6396f799f12 +0 -0
  18. reproto-0.0.7/.git/objects/a5/b7e4e1b63bfb65288f6553687aaabcfb4d51b1 +0 -0
  19. reproto-0.0.7/.git/objects/cd/2d6c229438c6b1c694b9392a85888d89ef49c1 +0 -0
  20. reproto-0.0.7/.git/objects/e8/1433b6ad92206cdadbee1f474b4f99383314cb +0 -0
  21. reproto-0.0.7/.git/objects/e8/2f42ea26b8bf4f0bc92c0648ac8f190f14226d +0 -0
  22. reproto-0.0.7/.git/objects/e9/a15996cb55ac72aeb6611d26e8d22246589943 +0 -0
  23. reproto-0.0.7/.git/objects/f5/18c69a6e1bf3052b79da01502b2837ea58f0f4 +0 -0
  24. reproto-0.0.7/.git/objects/f7/25a430eb3364460ba854dbc8809edc21dc6c70 +0 -0
  25. reproto-0.0.7/.git/refs/heads/iyue +1 -0
  26. reproto-0.0.7/.git/refs/remotes/gitlab/iyue +1 -0
  27. reproto-0.0.7/.git/refs/remotes/origin/iyue +1 -0
  28. {reproto-0.0.5 → reproto-0.0.7}/PKG-INFO +47 -120
  29. {reproto-0.0.5 → reproto-0.0.7}/README.md +37 -117
  30. {reproto-0.0.5 → reproto-0.0.7}/core/info_decoder.py +512 -105
  31. reproto-0.0.7/core/reconstructor.py +1307 -0
  32. {reproto-0.0.5 → reproto-0.0.7}/generation/proto_generator.py +25 -5
  33. {reproto-0.0.5 → reproto-0.0.7}/main.py +38 -7
  34. {reproto-0.0.5 → reproto-0.0.7}/parsing/java_parser.py +81 -1
  35. {reproto-0.0.5 → reproto-0.0.7}/pyproject.toml +13 -2
  36. {reproto-0.0.5 → reproto-0.0.7}/utils/logger.py +2 -2
  37. reproto-0.0.5/.git/COMMIT_EDITMSG +0 -24
  38. reproto-0.0.5/.git/logs/refs/remotes/gitlab/iyue +0 -1
  39. reproto-0.0.5/.git/logs/refs/remotes/origin/iyue +0 -1
  40. reproto-0.0.5/.git/refs/heads/iyue +0 -1
  41. reproto-0.0.5/.git/refs/remotes/gitlab/iyue +0 -1
  42. reproto-0.0.5/.git/refs/remotes/origin/iyue +0 -1
  43. reproto-0.0.5/core/reconstructor.py +0 -788
  44. {reproto-0.0.5 → reproto-0.0.7}/.git/HEAD +0 -0
  45. {reproto-0.0.5 → reproto-0.0.7}/.git/config +0 -0
  46. {reproto-0.0.5 → reproto-0.0.7}/.git/description +0 -0
  47. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/applypatch-msg.sample +0 -0
  48. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/commit-msg.sample +0 -0
  49. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/fsmonitor-watchman.sample +0 -0
  50. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/post-update.sample +0 -0
  51. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/pre-applypatch.sample +0 -0
  52. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/pre-commit.sample +0 -0
  53. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/pre-merge-commit.sample +0 -0
  54. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/pre-push.sample +0 -0
  55. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/pre-rebase.sample +0 -0
  56. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/pre-receive.sample +0 -0
  57. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/prepare-commit-msg.sample +0 -0
  58. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/push-to-checkout.sample +0 -0
  59. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/sendemail-validate.sample +0 -0
  60. {reproto-0.0.5 → reproto-0.0.7}/.git/hooks/update.sample +0 -0
  61. {reproto-0.0.5 → reproto-0.0.7}/.git/info/exclude +0 -0
  62. {reproto-0.0.5 → reproto-0.0.7}/.git/logs/refs/remotes/origin/HEAD +0 -0
  63. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/09/a92517fe9eeb33d2fd7c979e01d163665f7abc +0 -0
  64. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/14/d323d58fb90c209a730c17e23fd82a6c735fc1 +0 -0
  65. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/23/bfbca38e177bcbb423dd782c35b19d127a5ab0 +0 -0
  66. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/48/369b05749e384be9be58e5f943f3a0040d0f37 +0 -0
  67. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/7c/00eec7ae9ef5f94fc337e5c8f9793a2a48810d +0 -0
  68. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/a3/cedc28e563a1845a7860161b39b0fe58d5f0d3 +0 -0
  69. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/d0/9c84ad2142a187bf26a1714b7041b62e404c8f +0 -0
  70. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/d9/6d7456245232b3e159dcf691f11e51224c557a +0 -0
  71. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/ed/fb5bbf938de738d1f658f80e23c675bb8b3fae +0 -0
  72. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/ef/4844af55f7f64b8dd24b81b5a8322a8c80208e +0 -0
  73. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/f2/2bfffda9fb6a7f37bed04b7c40c9466ef09454 +0 -0
  74. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.idx +0 -0
  75. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.pack +0 -0
  76. {reproto-0.0.5 → reproto-0.0.7}/.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.rev +0 -0
  77. {reproto-0.0.5 → reproto-0.0.7}/.git/packed-refs +0 -0
  78. {reproto-0.0.5 → reproto-0.0.7}/.git/refs/remotes/origin/HEAD +0 -0
  79. {reproto-0.0.5 → reproto-0.0.7}/.gitignore +0 -0
  80. {reproto-0.0.5 → reproto-0.0.7}/.python-version +0 -0
  81. {reproto-0.0.5 → reproto-0.0.7}/ARCHITECTURE.md +0 -0
  82. {reproto-0.0.5 → reproto-0.0.7}/core/__init__.py +0 -0
  83. {reproto-0.0.5 → reproto-0.0.7}/core/bytecode_parser.py +0 -0
  84. {reproto-0.0.5 → reproto-0.0.7}/generation/__init__.py +0 -0
  85. {reproto-0.0.5 → reproto-0.0.7}/models/__init__.py +0 -0
  86. {reproto-0.0.5 → reproto-0.0.7}/models/message_definition.py +0 -0
  87. {reproto-0.0.5 → reproto-0.0.7}/parsing/__init__.py +0 -0
  88. {reproto-0.0.5 → reproto-0.0.7}/parsing/enum_parser.py +0 -0
  89. {reproto-0.0.5 → reproto-0.0.7}/requirements.txt +0 -0
  90. {reproto-0.0.5 → reproto-0.0.7}/utils/__init__.py +0 -0
  91. {reproto-0.0.5 → reproto-0.0.7}/utils/file_utils.py +0 -0
@@ -0,0 +1,29 @@
1
+ feat: 重构字段类型识别系统,实现基于Java源码的精确类型解析
2
+
3
+ 🎯 **核心改进**
4
+ - 删除google_protobuf_types.py,采用基于Java源码的动态类型识别
5
+ - 实现枚举类型的精确识别(Access、Gender、Badge等)
6
+ - 修复map类型和repeated类型的处理逻辑
7
+ - 增强错误处理和统计报告
8
+
9
+ 🔧 **技术修复**
10
+ - JavaSourceAnalyzer: 增强setter方法分析,支持枚举类型推断
11
+ - InfoDecoder: 重构字段类型转换,优先使用Java源码信息
12
+ - ProtoReconstructor: 添加枚举解析器,完善依赖追踪
13
+ - ProtoGenerator: 修复基础类型判断,避免错误导入
14
+
15
+ 🚀 **功能增强**
16
+ - 支持Internal.ProtobufList<T> -> repeated T 转换
17
+ - 支持MapFieldLite<K,V> -> map<k,v> 转换
18
+ - 支持Internal.IntList -> repeated enum 转换
19
+ - 增强包名匹配算法,避免第三方库误匹配
20
+
21
+ 📊 **统计改进**
22
+ - 详细的成功/失败/跳过统计
23
+ - 错误原因分类和报告
24
+ - 支持verbose模式的详细日志
25
+
26
+ 🐛 **Bug修复**
27
+ - 修复基础类型被误认为自定义类型的问题
28
+ - 修复map类型repeated规则错误
29
+ - 修复Unity3D等第三方库误匹配问题
@@ -1,2 +1,4 @@
1
1
  0000000000000000000000000000000000000000 2e11d561668286f3d6d48f399ffab1943a5cdcb2 iyue <ys1231@126.com> 1750922365 +0800 clone: from github.com:ys1231/reproto.git
2
2
  2e11d561668286f3d6d48f399ffab1943a5cdcb2 f22bfffda9fb6a7f37bed04b7c40c9466ef09454 iyue <ys1231@126.com> 1750925875 +0800 commit: feat: 完善Protobuf类型推断系统,支持map和未知类型处理
3
+ f22bfffda9fb6a7f37bed04b7c40c9466ef09454 e82f42ea26b8bf4f0bc92c0648ac8f190f14226d iyue <ys1231@126.com> 1750927650 +0800 commit: feat: rename reproto
4
+ e82f42ea26b8bf4f0bc92c0648ac8f190f14226d 9ae313cdf64cd82416c1238eb493e6396f799f12 iyue <ys1231@126.com> 1750942828 +0800 commit: feat: 重构字段类型识别系统,实现基于Java源码的精确类型解析
@@ -1,2 +1,4 @@
1
1
  0000000000000000000000000000000000000000 2e11d561668286f3d6d48f399ffab1943a5cdcb2 iyue <ys1231@126.com> 1750922365 +0800 clone: from github.com:ys1231/reproto.git
2
2
  2e11d561668286f3d6d48f399ffab1943a5cdcb2 f22bfffda9fb6a7f37bed04b7c40c9466ef09454 iyue <ys1231@126.com> 1750925875 +0800 commit: feat: 完善Protobuf类型推断系统,支持map和未知类型处理
3
+ f22bfffda9fb6a7f37bed04b7c40c9466ef09454 e82f42ea26b8bf4f0bc92c0648ac8f190f14226d iyue <ys1231@126.com> 1750927650 +0800 commit: feat: rename reproto
4
+ e82f42ea26b8bf4f0bc92c0648ac8f190f14226d 9ae313cdf64cd82416c1238eb493e6396f799f12 iyue <ys1231@126.com> 1750942828 +0800 commit: feat: 重构字段类型识别系统,实现基于Java源码的精确类型解析
@@ -0,0 +1,3 @@
1
+ 0000000000000000000000000000000000000000 f22bfffda9fb6a7f37bed04b7c40c9466ef09454 iyue <ys1231@126.com> 1750926057 +0800 update by push
2
+ f22bfffda9fb6a7f37bed04b7c40c9466ef09454 e82f42ea26b8bf4f0bc92c0648ac8f190f14226d iyue <ys1231@126.com> 1750927662 +0800 update by push
3
+ e82f42ea26b8bf4f0bc92c0648ac8f190f14226d 9ae313cdf64cd82416c1238eb493e6396f799f12 iyue <ys1231@126.com> 1750942950 +0800 update by push
@@ -0,0 +1,3 @@
1
+ 2e11d561668286f3d6d48f399ffab1943a5cdcb2 f22bfffda9fb6a7f37bed04b7c40c9466ef09454 iyue <ys1231@126.com> 1750925918 +0800 update by push
2
+ f22bfffda9fb6a7f37bed04b7c40c9466ef09454 e82f42ea26b8bf4f0bc92c0648ac8f190f14226d iyue <ys1231@126.com> 1750927669 +0800 update by push
3
+ e82f42ea26b8bf4f0bc92c0648ac8f190f14226d 9ae313cdf64cd82416c1238eb493e6396f799f12 iyue <ys1231@126.com> 1750942915 +0800 update by push
@@ -0,0 +1 @@
1
+ 9ae313cdf64cd82416c1238eb493e6396f799f12
@@ -0,0 +1 @@
1
+ 9ae313cdf64cd82416c1238eb493e6396f799f12
@@ -0,0 +1 @@
1
+ 9ae313cdf64cd82416c1238eb493e6396f799f12
@@ -1,16 +1,23 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: reproto
3
- Version: 0.0.5
3
+ Version: 0.0.7
4
4
  Summary: 一个强大的逆向工程工具, 能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构.
5
- License: MIT
5
+ License: Proprietary
6
+ Keywords: protobuf,reverse-engineering,android,jadx,proto
6
7
  Author: iyue
7
8
  Author-email: ys1231@126.com
8
9
  Requires-Python: >=3.12,<4.0
9
- Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: Other/Proprietary License
10
13
  Classifier: Programming Language :: Python :: 3
11
14
  Classifier: Programming Language :: Python :: 3.12
12
15
  Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Topic :: Software Development :: Code Generators
17
+ Classifier: Topic :: Software Development :: Disassemblers
13
18
  Requires-Dist: loguru (>=0.7.3)
19
+ Project-URL: Homepage, https://github.com/ys1231/reproto
20
+ Project-URL: Repository, https://github.com/ys1231/reproto.git
14
21
  Description-Content-Type: text/markdown
15
22
 
16
23
  # Protobuf Reconstructor
@@ -25,64 +32,40 @@ Description-Content-Type: text/markdown
25
32
  - 🔄 **递归依赖**: 自动发现和处理所有依赖的消息和枚举类型
26
33
  - 📦 **完整支持**: 支持oneof、repeated、map、枚举等所有Protobuf特性
27
34
  - 🌐 **通用性**: 适用于任何Android应用,无需硬编码映射
28
- - 🚀 **高效处理**: 智能队列管理,避免重复处理
29
- - 🧠 **智能推断**: 从Java源码直接读取类型信息,确保100%准确性
35
+ - 🧠 **智能推断**: 从Java源码直接读取类型信息,确保高准确性
30
36
  - 📝 **标准输出**: 严格遵循Google Proto Style Guide
31
- - 📊 **结构化日志**: 基于loguru的专业日志系统
32
37
 
33
38
  ## 🛠️ 安装
34
39
 
35
- ### 方法1:直接运行
36
40
  ```bash
37
41
  # 克隆项目
38
- git clone git@github.com:ys1231/reproto.git
42
+ git clone https://github.com/ys1231/reproto.git
39
43
  cd reproto
40
44
 
41
45
  # 安装依赖
42
46
  pip install -r requirements.txt
43
-
44
- # 运行
45
- python main.py <java_sources_dir> <root_class> <output_dir>
46
- ```
47
-
48
- ### 方法2:安装为包
49
- ```bash
50
- # 安装到系统
51
- pip install -e .
52
-
53
- # 使用命令行工具
54
- proto-reconstructor <java_sources_dir> <root_class> <output_dir>
55
47
  ```
56
48
 
57
49
  ## 📖 使用方法
58
50
 
59
51
  ### 基本用法
60
52
  ```bash
61
- python main.py ./out_jadx/sources com.example.Model ./protos_generated
62
- ```
63
-
64
- ### 完整参数
65
- ```bash
66
- python main.py <java_sources_dir> <root_class> <output_dir> [--log-dir LOG_DIR] [--help]
53
+ python main.py <java_sources_dir> <root_class> <output_dir> [--verbose]
67
54
  ```
68
55
 
69
56
  ### 参数说明
70
57
  - `java_sources_dir`: JADX反编译的Java源码目录路径
71
58
  - `root_class`: 要重构的根类完整类名(如:com.example.Model)
72
59
  - `output_dir`: 生成的proto文件输出目录路径
73
- - `--log-dir`: 日志文件输出目录(默认:./logs)
74
- - `--help`: 显示帮助信息
60
+ - `--verbose`: 显示详细处理信息
75
61
 
76
62
  ### 示例
77
63
  ```bash
78
- # 重构示例消息应用的数据模型
79
- python main.py ./out_jadx/sources com.example.messaging.v1.models.MessageData ./protos_generated
80
-
81
- # 指定日志目录
82
- python main.py ./out_jadx/sources com.example.Model ./output --log-dir ./my_logs
64
+ # 重构消息应用的数据模型
65
+ python main.py ./out_jadx/sources com.example.messaging.v1.models.MessageData ./protos_generated --verbose
83
66
 
84
- # 重构其他应用的模型
85
- python main.py /path/to/jadx/sources com.myapp.data.UserProfile ./output
67
+ # 重构内部类
68
+ python main.py ./out_jadx/sources 'com.truecaller.accountonboarding.v1.Models$Onboarded' ./output --verbose
86
69
  ```
87
70
 
88
71
  ## 🔍 工作原理
@@ -92,7 +75,6 @@ python main.py /path/to/jadx/sources com.myapp.data.UserProfile ./output
92
75
  2. **依赖发现**: 递归分析Java文件中的类型引用
93
76
  3. **智能推断**: 基于字段名和对象数组推断枚举和消息类型
94
77
  4. **源码分析**: 直接从Java源码读取真实的字段类型声明
95
- 5. **标准生成**: 生成符合Protobuf规范的.proto文件
96
78
 
97
79
  ### 解析流程
98
80
  ```
@@ -102,7 +84,7 @@ Java源码 → 字节码提取 → 类型解码 → 依赖发现 → 源码验
102
84
  ## 📁 项目结构
103
85
 
104
86
  ```
105
- proto_reconstructor/
87
+ reproto/
106
88
  ├── main.py # 主程序入口
107
89
  ├── core/ # 核心组件
108
90
  │ ├── reconstructor.py # 主协调器
@@ -113,22 +95,17 @@ proto_reconstructor/
113
95
  ├── generation/ # 生成模块
114
96
  │ └── proto_generator.py # Proto文件生成器
115
97
  ├── models/ # 数据模型
116
-
98
+ └── utils/ # 工具函数
117
99
  ```
118
100
 
119
- ## 工作流程
120
-
121
- 1. 使用JADX反编译Android应用
122
- 2. 运行ReProto指定根Protobuf类
123
- 3. 自动解析所有相关类和依赖
124
- 4. 生成完整的.proto文件结构
125
-
126
- ## 输出示例
101
+ ## 📊 输出示例
127
102
 
128
103
  ### 输入:Java源码
129
-
130
104
  ```java
131
105
  public final class MessageData extends GeneratedMessageLite {
106
+ public static final int TEXT_MESSAGE_FIELD_NUMBER = 1;
107
+ public static final int MEDIA_MESSAGE_FIELD_NUMBER = 2;
108
+
132
109
  private int dataCase_;
133
110
  private Object data_;
134
111
 
@@ -136,28 +113,16 @@ public final class MessageData extends GeneratedMessageLite {
136
113
  TEXT_MESSAGE(1),
137
114
  MEDIA_MESSAGE(2),
138
115
  DATA_NOT_SET(0);
139
-
140
- private final int value;
141
-
142
- private DataCase(int value) {
143
- this.value = value;
144
- }
145
116
  }
146
-
147
- // 其他方法...
148
117
  }
149
118
  ```
150
119
 
151
120
  ### 输出:Proto文件
152
-
153
121
  ```protobuf
154
122
  syntax = "proto3";
155
123
 
156
124
  package com.example.messaging.v1.models;
157
125
 
158
- import "com/example/messaging/v1/models/message_data.proto";
159
- import "com/example/messaging/v1/models/conversation_data.proto";
160
-
161
126
  option java_package = "com.example.messaging.v1.models";
162
127
  option java_multiple_files = true;
163
128
 
@@ -169,79 +134,41 @@ message MessageData {
169
134
  }
170
135
  ```
171
136
 
172
- ## 开发环境设置
173
-
174
- ### 使用Poetry
175
-
176
- ```bash
177
- # 安装Poetry
178
- curl -sSL https://install.python-poetry.org | python3 -
137
+ ## 🚀 工作流程
179
138
 
180
- # 安装项目依赖
181
- poetry install
182
-
183
- # 进入虚拟环境
184
- poetry shell
185
- ```
186
-
187
- ## 项目结构
188
-
189
- ```
190
- reproto/
191
- ├── core/ # 核心重构逻辑
192
- ├── parsing/ # Java源码解析
193
- ├── generation/ # Proto文件生成
194
- ├── models/ # 数据模型定义
195
- ├── utils/ # 工具函数
196
- └── main.py # 入口点
197
- ```
139
+ 1. 使用JADX反编译Android应用:`jadx -d out_jadx app.apk`
140
+ 2. 运行ReProto指定根Protobuf类
141
+ 3. 自动解析所有相关类和依赖
142
+ 4. 生成完整的.proto文件结构
198
143
 
199
- ## 🔧 配置选项
144
+ ## 📝 配置选项
200
145
 
201
146
  ### 日志配置
202
- ```bash
203
- # 指定日志目录
204
- python main.py sources/ com.example.Model output/ --log-dir ./my_logs
205
-
206
- # 日志文件格式: proto_reconstructor-YYYY-MM-DD-HH-MM-SS.log
207
- # 例如: proto_reconstructor-2024-01-15-14-30-25.log
208
- ```
147
+ - 日志文件自动保存到 `./logs/` 目录
148
+ - 文件格式: `reproto-YYYY-MM-DD-HH-MM-SS.log`
149
+ - 使用 `--verbose` 参数查看详细处理过程
209
150
 
210
151
  ### 输出格式
211
152
  生成的proto文件遵循Google Protobuf Style Guide:
212
- - 文件名使用`snake_case.proto`格式
213
- - 字段名使用`snake_case`
214
- - 消息名使用`PascalCase`
215
- - 枚举值使用`UPPER_SNAKE_CASE`
216
- - 正确的包结构和导入语句
217
-
218
- ## 🏗️ 架构设计
219
-
220
- 本项目采用模块化设计,详细的架构说明请参考 [ARCHITECTURE.md](./ARCHITECTURE.md)。
221
-
222
- 核心模块:
223
- - **Core Layer**: 主协调器 + 字节码解码器
224
- - **Parsing Layer**: Java解析器 + 源码分析器
225
- - **Generation Layer**: Proto文件生成器
226
- - **Model Layer**: 数据定义模型
227
- - **Utility Layer**: 日志系统 + 文件工具
153
+ - 文件名:`snake_case.proto`
154
+ - 字段名:`snake_case`
155
+ - 消息名:`PascalCase`
156
+ - 枚举值:`UPPER_SNAKE_CASE`
228
157
 
158
+ ## 🔧 开发
229
159
 
230
- ## 🤝 贡献
231
-
232
- 欢迎提交Issue和Pull Request!
160
+ ```bash
161
+ # 使用Poetry管理依赖
162
+ poetry install
163
+ poetry shell
233
164
 
234
- ### 代码规范
235
- - 遵循PEP 8代码风格
236
- - 使用类型注解
237
- - 编写单元测试
238
- - 更新文档
165
+ # 运行测试
166
+ python main.py ../out_jadx/sources 'com.example.TestClass' ../test_output --verbose
167
+ ```
239
168
 
240
- ## 🙏 致谢
169
+ ## 📄 许可证
241
170
 
242
- - Google Protobuf团队提供的优秀框架
243
- - JADX项目提供的反编译工具
244
- - 逆向工程社区的技术支持
171
+ 本项目为私有项目,仅供授权用户使用。
245
172
 
246
173
  ---
247
174
 
@@ -10,64 +10,40 @@
10
10
  - 🔄 **递归依赖**: 自动发现和处理所有依赖的消息和枚举类型
11
11
  - 📦 **完整支持**: 支持oneof、repeated、map、枚举等所有Protobuf特性
12
12
  - 🌐 **通用性**: 适用于任何Android应用,无需硬编码映射
13
- - 🚀 **高效处理**: 智能队列管理,避免重复处理
14
- - 🧠 **智能推断**: 从Java源码直接读取类型信息,确保100%准确性
13
+ - 🧠 **智能推断**: 从Java源码直接读取类型信息,确保高准确性
15
14
  - 📝 **标准输出**: 严格遵循Google Proto Style Guide
16
- - 📊 **结构化日志**: 基于loguru的专业日志系统
17
15
 
18
16
  ## 🛠️ 安装
19
17
 
20
- ### 方法1:直接运行
21
18
  ```bash
22
19
  # 克隆项目
23
- git clone git@github.com:ys1231/reproto.git
20
+ git clone https://github.com/ys1231/reproto.git
24
21
  cd reproto
25
22
 
26
23
  # 安装依赖
27
24
  pip install -r requirements.txt
28
-
29
- # 运行
30
- python main.py <java_sources_dir> <root_class> <output_dir>
31
- ```
32
-
33
- ### 方法2:安装为包
34
- ```bash
35
- # 安装到系统
36
- pip install -e .
37
-
38
- # 使用命令行工具
39
- proto-reconstructor <java_sources_dir> <root_class> <output_dir>
40
25
  ```
41
26
 
42
27
  ## 📖 使用方法
43
28
 
44
29
  ### 基本用法
45
30
  ```bash
46
- python main.py ./out_jadx/sources com.example.Model ./protos_generated
47
- ```
48
-
49
- ### 完整参数
50
- ```bash
51
- python main.py <java_sources_dir> <root_class> <output_dir> [--log-dir LOG_DIR] [--help]
31
+ python main.py <java_sources_dir> <root_class> <output_dir> [--verbose]
52
32
  ```
53
33
 
54
34
  ### 参数说明
55
35
  - `java_sources_dir`: JADX反编译的Java源码目录路径
56
36
  - `root_class`: 要重构的根类完整类名(如:com.example.Model)
57
37
  - `output_dir`: 生成的proto文件输出目录路径
58
- - `--log-dir`: 日志文件输出目录(默认:./logs)
59
- - `--help`: 显示帮助信息
38
+ - `--verbose`: 显示详细处理信息
60
39
 
61
40
  ### 示例
62
41
  ```bash
63
- # 重构示例消息应用的数据模型
64
- python main.py ./out_jadx/sources com.example.messaging.v1.models.MessageData ./protos_generated
65
-
66
- # 指定日志目录
67
- python main.py ./out_jadx/sources com.example.Model ./output --log-dir ./my_logs
42
+ # 重构消息应用的数据模型
43
+ python main.py ./out_jadx/sources com.example.messaging.v1.models.MessageData ./protos_generated --verbose
68
44
 
69
- # 重构其他应用的模型
70
- python main.py /path/to/jadx/sources com.myapp.data.UserProfile ./output
45
+ # 重构内部类
46
+ python main.py ./out_jadx/sources 'com.truecaller.accountonboarding.v1.Models$Onboarded' ./output --verbose
71
47
  ```
72
48
 
73
49
  ## 🔍 工作原理
@@ -77,7 +53,6 @@ python main.py /path/to/jadx/sources com.myapp.data.UserProfile ./output
77
53
  2. **依赖发现**: 递归分析Java文件中的类型引用
78
54
  3. **智能推断**: 基于字段名和对象数组推断枚举和消息类型
79
55
  4. **源码分析**: 直接从Java源码读取真实的字段类型声明
80
- 5. **标准生成**: 生成符合Protobuf规范的.proto文件
81
56
 
82
57
  ### 解析流程
83
58
  ```
@@ -87,7 +62,7 @@ Java源码 → 字节码提取 → 类型解码 → 依赖发现 → 源码验
87
62
  ## 📁 项目结构
88
63
 
89
64
  ```
90
- proto_reconstructor/
65
+ reproto/
91
66
  ├── main.py # 主程序入口
92
67
  ├── core/ # 核心组件
93
68
  │ ├── reconstructor.py # 主协调器
@@ -98,22 +73,17 @@ proto_reconstructor/
98
73
  ├── generation/ # 生成模块
99
74
  │ └── proto_generator.py # Proto文件生成器
100
75
  ├── models/ # 数据模型
101
-
76
+ └── utils/ # 工具函数
102
77
  ```
103
78
 
104
- ## 工作流程
105
-
106
- 1. 使用JADX反编译Android应用
107
- 2. 运行ReProto指定根Protobuf类
108
- 3. 自动解析所有相关类和依赖
109
- 4. 生成完整的.proto文件结构
110
-
111
- ## 输出示例
79
+ ## 📊 输出示例
112
80
 
113
81
  ### 输入:Java源码
114
-
115
82
  ```java
116
83
  public final class MessageData extends GeneratedMessageLite {
84
+ public static final int TEXT_MESSAGE_FIELD_NUMBER = 1;
85
+ public static final int MEDIA_MESSAGE_FIELD_NUMBER = 2;
86
+
117
87
  private int dataCase_;
118
88
  private Object data_;
119
89
 
@@ -121,28 +91,16 @@ public final class MessageData extends GeneratedMessageLite {
121
91
  TEXT_MESSAGE(1),
122
92
  MEDIA_MESSAGE(2),
123
93
  DATA_NOT_SET(0);
124
-
125
- private final int value;
126
-
127
- private DataCase(int value) {
128
- this.value = value;
129
- }
130
94
  }
131
-
132
- // 其他方法...
133
95
  }
134
96
  ```
135
97
 
136
98
  ### 输出:Proto文件
137
-
138
99
  ```protobuf
139
100
  syntax = "proto3";
140
101
 
141
102
  package com.example.messaging.v1.models;
142
103
 
143
- import "com/example/messaging/v1/models/message_data.proto";
144
- import "com/example/messaging/v1/models/conversation_data.proto";
145
-
146
104
  option java_package = "com.example.messaging.v1.models";
147
105
  option java_multiple_files = true;
148
106
 
@@ -154,78 +112,40 @@ message MessageData {
154
112
  }
155
113
  ```
156
114
 
157
- ## 开发环境设置
158
-
159
- ### 使用Poetry
160
-
161
- ```bash
162
- # 安装Poetry
163
- curl -sSL https://install.python-poetry.org | python3 -
115
+ ## 🚀 工作流程
164
116
 
165
- # 安装项目依赖
166
- poetry install
167
-
168
- # 进入虚拟环境
169
- poetry shell
170
- ```
171
-
172
- ## 项目结构
173
-
174
- ```
175
- reproto/
176
- ├── core/ # 核心重构逻辑
177
- ├── parsing/ # Java源码解析
178
- ├── generation/ # Proto文件生成
179
- ├── models/ # 数据模型定义
180
- ├── utils/ # 工具函数
181
- └── main.py # 入口点
182
- ```
117
+ 1. 使用JADX反编译Android应用:`jadx -d out_jadx app.apk`
118
+ 2. 运行ReProto指定根Protobuf类
119
+ 3. 自动解析所有相关类和依赖
120
+ 4. 生成完整的.proto文件结构
183
121
 
184
- ## 🔧 配置选项
122
+ ## 📝 配置选项
185
123
 
186
124
  ### 日志配置
187
- ```bash
188
- # 指定日志目录
189
- python main.py sources/ com.example.Model output/ --log-dir ./my_logs
190
-
191
- # 日志文件格式: proto_reconstructor-YYYY-MM-DD-HH-MM-SS.log
192
- # 例如: proto_reconstructor-2024-01-15-14-30-25.log
193
- ```
125
+ - 日志文件自动保存到 `./logs/` 目录
126
+ - 文件格式: `reproto-YYYY-MM-DD-HH-MM-SS.log`
127
+ - 使用 `--verbose` 参数查看详细处理过程
194
128
 
195
129
  ### 输出格式
196
130
  生成的proto文件遵循Google Protobuf Style Guide:
197
- - 文件名使用`snake_case.proto`格式
198
- - 字段名使用`snake_case`
199
- - 消息名使用`PascalCase`
200
- - 枚举值使用`UPPER_SNAKE_CASE`
201
- - 正确的包结构和导入语句
202
-
203
- ## 🏗️ 架构设计
204
-
205
- 本项目采用模块化设计,详细的架构说明请参考 [ARCHITECTURE.md](./ARCHITECTURE.md)。
206
-
207
- 核心模块:
208
- - **Core Layer**: 主协调器 + 字节码解码器
209
- - **Parsing Layer**: Java解析器 + 源码分析器
210
- - **Generation Layer**: Proto文件生成器
211
- - **Model Layer**: 数据定义模型
212
- - **Utility Layer**: 日志系统 + 文件工具
131
+ - 文件名:`snake_case.proto`
132
+ - 字段名:`snake_case`
133
+ - 消息名:`PascalCase`
134
+ - 枚举值:`UPPER_SNAKE_CASE`
213
135
 
136
+ ## 🔧 开发
214
137
 
215
- ## 🤝 贡献
216
-
217
- 欢迎提交Issue和Pull Request!
138
+ ```bash
139
+ # 使用Poetry管理依赖
140
+ poetry install
141
+ poetry shell
218
142
 
219
- ### 代码规范
220
- - 遵循PEP 8代码风格
221
- - 使用类型注解
222
- - 编写单元测试
223
- - 更新文档
143
+ # 运行测试
144
+ python main.py ../out_jadx/sources 'com.example.TestClass' ../test_output --verbose
145
+ ```
224
146
 
225
- ## 🙏 致谢
147
+ ## 📄 许可证
226
148
 
227
- - Google Protobuf团队提供的优秀框架
228
- - JADX项目提供的反编译工具
229
- - 逆向工程社区的技术支持
149
+ 本项目为私有项目,仅供授权用户使用。
230
150
 
231
151
  ---