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.
- .git/COMMIT_EDITMSG +29 -1
- .git/index +0 -0
- .git/logs/HEAD +1 -0
- .git/logs/refs/heads/iyue +1 -0
- .git/logs/refs/remotes/gitlab/iyue +1 -0
- .git/logs/refs/remotes/origin/iyue +1 -0
- .git/objects/20/cf56ec106bcd66420dd000279f983571b918b6 +0 -0
- .git/objects/21/55b64d52922c88527c102d62f23e5c2abbae79 +0 -0
- .git/objects/33/52dfa8f5d9eb46cc98ea7ccecf02e4d9df95f7 +0 -0
- .git/objects/3c/6f0120229cc2cd8123efbeb7f186eb0a485f29 +0 -0
- .git/objects/76/311aa8e59d780763e0d66787067cc5d9613a67 +0 -0
- .git/objects/8c/809c42c7ae13007fd885ee7bcffae7acf2c520 +0 -0
- .git/objects/97/56fe0931216a7c40cbf250e1ab8a6dfd589f13 +0 -0
- .git/objects/9a/e313cdf64cd82416c1238eb493e6396f799f12 +0 -0
- .git/objects/cd/2d6c229438c6b1c694b9392a85888d89ef49c1 +0 -0
- .git/objects/e8/1433b6ad92206cdadbee1f474b4f99383314cb +0 -0
- .git/objects/e9/a15996cb55ac72aeb6611d26e8d22246589943 +0 -0
- .git/objects/f7/25a430eb3364460ba854dbc8809edc21dc6c70 +0 -0
- .git/refs/heads/iyue +1 -1
- .git/refs/remotes/gitlab/iyue +1 -1
- .git/refs/remotes/origin/iyue +1 -1
- README.md +36 -116
- core/info_decoder.py +512 -105
- core/reconstructor.py +594 -75
- generation/proto_generator.py +25 -5
- main.py +36 -5
- parsing/java_parser.py +81 -1
- pyproject.toml +13 -2
- {reproto-0.0.6.dist-info → reproto-0.0.7.dist-info}/METADATA +46 -119
- {reproto-0.0.6.dist-info → reproto-0.0.7.dist-info}/RECORD +32 -20
- {reproto-0.0.6.dist-info → reproto-0.0.7.dist-info}/WHEEL +0 -0
- {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:
|
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
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
.git/refs/heads/iyue
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
9ae313cdf64cd82416c1238eb493e6396f799f12
|
.git/refs/remotes/gitlab/iyue
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
9ae313cdf64cd82416c1238eb493e6396f799f12
|
.git/refs/remotes/origin/iyue
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
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
|
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
|
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
|
-
- `--
|
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 /
|
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
|
-
|
176
|
-
|
177
|
-
|
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
|
-
|
188
|
-
|
189
|
-
|
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
|
-
-
|
198
|
-
-
|
199
|
-
-
|
200
|
-
-
|
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
|
-
|
138
|
+
```bash
|
139
|
+
# 使用Poetry管理依赖
|
140
|
+
poetry install
|
141
|
+
poetry shell
|
218
142
|
|
219
|
-
|
220
|
-
|
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
|
-
|
228
|
-
- JADX项目提供的反编译工具
|
229
|
-
- 逆向工程社区的技术支持
|
149
|
+
本项目为私有项目,仅供授权用户使用。
|
230
150
|
|
231
151
|
---
|