reproto 0.0.6__py3-none-any.whl → 0.0.7__py3-none-any.whl

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 (32) hide show
  1. .git/COMMIT_EDITMSG +29 -1
  2. .git/index +0 -0
  3. .git/logs/HEAD +1 -0
  4. .git/logs/refs/heads/iyue +1 -0
  5. .git/logs/refs/remotes/gitlab/iyue +1 -0
  6. .git/logs/refs/remotes/origin/iyue +1 -0
  7. .git/objects/20/cf56ec106bcd66420dd000279f983571b918b6 +0 -0
  8. .git/objects/21/55b64d52922c88527c102d62f23e5c2abbae79 +0 -0
  9. .git/objects/33/52dfa8f5d9eb46cc98ea7ccecf02e4d9df95f7 +0 -0
  10. .git/objects/3c/6f0120229cc2cd8123efbeb7f186eb0a485f29 +0 -0
  11. .git/objects/76/311aa8e59d780763e0d66787067cc5d9613a67 +0 -0
  12. .git/objects/8c/809c42c7ae13007fd885ee7bcffae7acf2c520 +0 -0
  13. .git/objects/97/56fe0931216a7c40cbf250e1ab8a6dfd589f13 +0 -0
  14. .git/objects/9a/e313cdf64cd82416c1238eb493e6396f799f12 +0 -0
  15. .git/objects/cd/2d6c229438c6b1c694b9392a85888d89ef49c1 +0 -0
  16. .git/objects/e8/1433b6ad92206cdadbee1f474b4f99383314cb +0 -0
  17. .git/objects/e9/a15996cb55ac72aeb6611d26e8d22246589943 +0 -0
  18. .git/objects/f7/25a430eb3364460ba854dbc8809edc21dc6c70 +0 -0
  19. .git/refs/heads/iyue +1 -1
  20. .git/refs/remotes/gitlab/iyue +1 -1
  21. .git/refs/remotes/origin/iyue +1 -1
  22. README.md +36 -116
  23. core/info_decoder.py +512 -105
  24. core/reconstructor.py +594 -75
  25. generation/proto_generator.py +25 -5
  26. main.py +36 -5
  27. parsing/java_parser.py +81 -1
  28. pyproject.toml +13 -2
  29. {reproto-0.0.6.dist-info → reproto-0.0.7.dist-info}/METADATA +46 -119
  30. {reproto-0.0.6.dist-info → reproto-0.0.7.dist-info}/RECORD +32 -20
  31. {reproto-0.0.6.dist-info → reproto-0.0.7.dist-info}/WHEEL +0 -0
  32. {reproto-0.0.6.dist-info → reproto-0.0.7.dist-info}/entry_points.txt +0 -0
.git/COMMIT_EDITMSG CHANGED
@@ -1 +1,29 @@
1
- feat: rename reproto
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等第三方库误匹配问题
.git/index CHANGED
Binary file
.git/logs/HEAD CHANGED
@@ -1,3 +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
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源码的精确类型解析
.git/logs/refs/heads/iyue CHANGED
@@ -1,3 +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
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,3 @@
1
1
  0000000000000000000000000000000000000000 f22bfffda9fb6a7f37bed04b7c40c9466ef09454 iyue <ys1231@126.com> 1750926057 +0800 update by push
2
2
  f22bfffda9fb6a7f37bed04b7c40c9466ef09454 e82f42ea26b8bf4f0bc92c0648ac8f190f14226d iyue <ys1231@126.com> 1750927662 +0800 update by push
3
+ e82f42ea26b8bf4f0bc92c0648ac8f190f14226d 9ae313cdf64cd82416c1238eb493e6396f799f12 iyue <ys1231@126.com> 1750942950 +0800 update by push
@@ -1,2 +1,3 @@
1
1
  2e11d561668286f3d6d48f399ffab1943a5cdcb2 f22bfffda9fb6a7f37bed04b7c40c9466ef09454 iyue <ys1231@126.com> 1750925918 +0800 update by push
2
2
  f22bfffda9fb6a7f37bed04b7c40c9466ef09454 e82f42ea26b8bf4f0bc92c0648ac8f190f14226d iyue <ys1231@126.com> 1750927669 +0800 update by push
3
+ e82f42ea26b8bf4f0bc92c0648ac8f190f14226d 9ae313cdf64cd82416c1238eb493e6396f799f12 iyue <ys1231@126.com> 1750942915 +0800 update by push
.git/refs/heads/iyue CHANGED
@@ -1 +1 @@
1
- e82f42ea26b8bf4f0bc92c0648ac8f190f14226d
1
+ 9ae313cdf64cd82416c1238eb493e6396f799f12
@@ -1 +1 @@
1
- e82f42ea26b8bf4f0bc92c0648ac8f190f14226d
1
+ 9ae313cdf64cd82416c1238eb493e6396f799f12
@@ -1 +1 @@
1
- e82f42ea26b8bf4f0bc92c0648ac8f190f14226d
1
+ 9ae313cdf64cd82416c1238eb493e6396f799f12
README.md CHANGED
@@ -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
- reproto <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
  ```
@@ -98,22 +73,17 @@ reproto/
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 -
164
-
165
- # 安装项目依赖
166
- poetry install
167
-
168
- # 进入虚拟环境
169
- poetry shell
170
- ```
171
-
172
- ## 项目结构
115
+ ## 🚀 工作流程
173
116
 
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
- # 日志文件格式: reproto-YYYY-MM-DD-HH-MM-SS.log
192
- # 例如: reproto-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
  ---