reproto 0.0.3__py3-none-any.whl → 0.0.4__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 (40) hide show
  1. .git/HEAD +1 -0
  2. .git/config +12 -0
  3. .git/description +1 -0
  4. .git/hooks/applypatch-msg.sample +15 -0
  5. .git/hooks/commit-msg.sample +24 -0
  6. .git/hooks/fsmonitor-watchman.sample +174 -0
  7. .git/hooks/post-update.sample +8 -0
  8. .git/hooks/pre-applypatch.sample +14 -0
  9. .git/hooks/pre-commit.sample +49 -0
  10. .git/hooks/pre-merge-commit.sample +13 -0
  11. .git/hooks/pre-push.sample +53 -0
  12. .git/hooks/pre-rebase.sample +169 -0
  13. .git/hooks/pre-receive.sample +24 -0
  14. .git/hooks/prepare-commit-msg.sample +42 -0
  15. .git/hooks/push-to-checkout.sample +78 -0
  16. .git/hooks/sendemail-validate.sample +77 -0
  17. .git/hooks/update.sample +128 -0
  18. .git/index +0 -0
  19. .git/info/exclude +6 -0
  20. .git/logs/HEAD +1 -0
  21. .git/logs/refs/heads/iyue +1 -0
  22. .git/logs/refs/remotes/origin/HEAD +1 -0
  23. .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.idx +0 -0
  24. .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.pack +0 -0
  25. .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.rev +0 -0
  26. .git/packed-refs +2 -0
  27. .git/refs/heads/iyue +1 -0
  28. .git/refs/remotes/origin/HEAD +1 -0
  29. .gitignore +142 -0
  30. .python-version +1 -0
  31. ARCHITECTURE.md +266 -0
  32. README.md +231 -0
  33. main.py +172 -0
  34. pyproject.toml +36 -0
  35. {reproto-0.0.3.dist-info → reproto-0.0.4.dist-info}/METADATA +1 -1
  36. reproto-0.0.4.dist-info/RECORD +53 -0
  37. requirements.txt +3 -0
  38. reproto-0.0.3.dist-info/RECORD +0 -18
  39. {reproto-0.0.3.dist-info → reproto-0.0.4.dist-info}/WHEEL +0 -0
  40. {reproto-0.0.3.dist-info → reproto-0.0.4.dist-info}/entry_points.txt +0 -0
README.md ADDED
@@ -0,0 +1,231 @@
1
+ # Protobuf Reconstructor
2
+
3
+ 🔧 **从JADX反编译的Java源码自动重构Protobuf .proto文件**
4
+
5
+ 一个强大的逆向工程工具,能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构。
6
+
7
+ ## ✨ 特性
8
+
9
+ - 🎯 **精准解析**: 基于Google Protobuf Lite字节码的逆向工程
10
+ - 🔄 **递归依赖**: 自动发现和处理所有依赖的消息和枚举类型
11
+ - 📦 **完整支持**: 支持oneof、repeated、map、枚举等所有Protobuf特性
12
+ - 🌐 **通用性**: 适用于任何Android应用,无需硬编码映射
13
+ - 🚀 **高效处理**: 智能队列管理,避免重复处理
14
+ - 🧠 **智能推断**: 从Java源码直接读取类型信息,确保100%准确性
15
+ - 📝 **标准输出**: 严格遵循Google Proto Style Guide
16
+ - 📊 **结构化日志**: 基于loguru的专业日志系统
17
+
18
+ ## 🛠️ 安装
19
+
20
+ ### 方法1:直接运行
21
+ ```bash
22
+ # 克隆项目
23
+ git clone git@github.com:ys1231/reproto.git
24
+ cd reproto
25
+
26
+ # 安装依赖
27
+ 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
+ ```
41
+
42
+ ## 📖 使用方法
43
+
44
+ ### 基本用法
45
+ ```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]
52
+ ```
53
+
54
+ ### 参数说明
55
+ - `java_sources_dir`: JADX反编译的Java源码目录路径
56
+ - `root_class`: 要重构的根类完整类名(如:com.example.Model)
57
+ - `output_dir`: 生成的proto文件输出目录路径
58
+ - `--log-dir`: 日志文件输出目录(默认:./logs)
59
+ - `--help`: 显示帮助信息
60
+
61
+ ### 示例
62
+ ```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
68
+
69
+ # 重构其他应用的模型
70
+ python main.py /path/to/jadx/sources com.myapp.data.UserProfile ./output
71
+ ```
72
+
73
+ ## 🔍 工作原理
74
+
75
+ ### 核心技术
76
+ 1. **字节码解析**: 逆向工程Google Protobuf Lite的`newMessageInfo`调用
77
+ 2. **依赖发现**: 递归分析Java文件中的类型引用
78
+ 3. **智能推断**: 基于字段名和对象数组推断枚举和消息类型
79
+ 4. **源码分析**: 直接从Java源码读取真实的字段类型声明
80
+ 5. **标准生成**: 生成符合Protobuf规范的.proto文件
81
+
82
+ ### 解析流程
83
+ ```
84
+ Java源码 → 字节码提取 → 类型解码 → 依赖发现 → 源码验证 → Proto生成
85
+ ```
86
+
87
+ ## 📁 项目结构
88
+
89
+ ```
90
+ proto_reconstructor/
91
+ ├── main.py # 主程序入口
92
+ ├── core/ # 核心组件
93
+ │ ├── reconstructor.py # 主协调器
94
+ │ └── info_decoder.py # 字节码解码器
95
+ ├── parsing/ # 解析模块
96
+ │ ├── java_parser.py # Java文件解析器
97
+ │ └── java_source_analyzer.py # Java源码分析器
98
+ ├── generation/ # 生成模块
99
+ │ └── proto_generator.py # Proto文件生成器
100
+ ├── models/ # 数据模型
101
+
102
+ ```
103
+
104
+ ## 工作流程
105
+
106
+ 1. 使用JADX反编译Android应用
107
+ 2. 运行ReProto指定根Protobuf类
108
+ 3. 自动解析所有相关类和依赖
109
+ 4. 生成完整的.proto文件结构
110
+
111
+ ## 输出示例
112
+
113
+ ### 输入:Java源码
114
+
115
+ ```java
116
+ public final class MessageData extends GeneratedMessageLite {
117
+ private int dataCase_;
118
+ private Object data_;
119
+
120
+ public enum DataCase {
121
+ TEXT_MESSAGE(1),
122
+ MEDIA_MESSAGE(2),
123
+ DATA_NOT_SET(0);
124
+
125
+ private final int value;
126
+
127
+ private DataCase(int value) {
128
+ this.value = value;
129
+ }
130
+ }
131
+
132
+ // 其他方法...
133
+ }
134
+ ```
135
+
136
+ ### 输出:Proto文件
137
+
138
+ ```protobuf
139
+ syntax = "proto3";
140
+
141
+ package com.example.messaging.v1.models;
142
+
143
+ import "com/example/messaging/v1/models/message_data.proto";
144
+ import "com/example/messaging/v1/models/conversation_data.proto";
145
+
146
+ option java_package = "com.example.messaging.v1.models";
147
+ option java_multiple_files = true;
148
+
149
+ message MessageData {
150
+ oneof data {
151
+ TextMessage text_message = 1;
152
+ MediaMessage media_message = 2;
153
+ }
154
+ }
155
+ ```
156
+
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
+ ## 项目结构
173
+
174
+ ```
175
+ reproto/
176
+ ├── core/ # 核心重构逻辑
177
+ ├── parsing/ # Java源码解析
178
+ ├── generation/ # Proto文件生成
179
+ ├── models/ # 数据模型定义
180
+ ├── utils/ # 工具函数
181
+ └── main.py # 入口点
182
+ ```
183
+
184
+ ## 🔧 配置选项
185
+
186
+ ### 日志配置
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
+ ```
194
+
195
+ ### 输出格式
196
+ 生成的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**: 日志系统 + 文件工具
213
+
214
+
215
+ ## 🤝 贡献
216
+
217
+ 欢迎提交Issue和Pull Request!
218
+
219
+ ### 代码规范
220
+ - 遵循PEP 8代码风格
221
+ - 使用类型注解
222
+ - 编写单元测试
223
+ - 更新文档
224
+
225
+ ## 🙏 致谢
226
+
227
+ - Google Protobuf团队提供的优秀框架
228
+ - JADX项目提供的反编译工具
229
+ - 逆向工程社区的技术支持
230
+
231
+ ---
main.py ADDED
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Protobuf重构器 - 命令行入口
4
+
5
+ 从JADX反编译的Java源码自动重构Protobuf .proto文件
6
+ 支持任意Android应用,完全基于Java字节码推断
7
+
8
+ Usage:
9
+ python -m proto_reconstructor.main <java_sources_dir> <root_class> <output_dir> [--log-dir LOG_DIR]
10
+
11
+ Example:
12
+ python -m proto_reconstructor.main ./out_jadx/sources com.example.Model ./protos_generated --log-dir ./logs
13
+
14
+ Author: AI Assistant
15
+ """
16
+
17
+ import sys
18
+ import argparse
19
+ from pathlib import Path
20
+
21
+ # 导入项目模块
22
+ import os
23
+ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
24
+ from core.reconstructor import ProtoReconstructor
25
+ from utils.logger import setup_logger, get_logger
26
+
27
+
28
+ def parse_arguments():
29
+ """解析命令行参数"""
30
+ parser = argparse.ArgumentParser(
31
+ description='从JADX反编译的Java源码重构Protobuf .proto文件',
32
+ formatter_class=argparse.RawDescriptionHelpFormatter,
33
+ epilog="""
34
+ 示例:
35
+ %(prog)s ./out_jadx/sources com.example.Model ./protos_generated
36
+ %(prog)s ./out_jadx/sources com.example.Model ./output --log-dir ./my_logs
37
+ %(prog)s /path/to/jadx/sources com.example.messaging.v1.models.MessageData ./output
38
+ """
39
+ )
40
+
41
+ parser.add_argument(
42
+ 'sources_dir',
43
+ type=str,
44
+ help='JADX反编译的Java源码目录路径'
45
+ )
46
+
47
+ parser.add_argument(
48
+ 'root_class',
49
+ type=str,
50
+ help='要重构的根类完整类名 (如: com.example.Model)'
51
+ )
52
+
53
+ parser.add_argument(
54
+ 'output_dir',
55
+ type=str,
56
+ help='生成的proto文件输出目录路径'
57
+ )
58
+
59
+ parser.add_argument(
60
+ '--log-dir',
61
+ type=str,
62
+ default='./logs',
63
+ help='日志文件输出目录 (默认: ./logs)'
64
+ )
65
+
66
+ parser.add_argument(
67
+ '--verbose', '-v',
68
+ action='store_true',
69
+ help='显示详细的处理信息'
70
+ )
71
+
72
+ return parser.parse_args()
73
+
74
+
75
+ def validate_arguments(args):
76
+ """验证命令行参数"""
77
+ logger = get_logger("main")
78
+
79
+ # 验证源码目录
80
+ sources_path = Path(args.sources_dir)
81
+ if not sources_path.exists():
82
+ logger.error(f"源码目录不存在: {sources_path}")
83
+ sys.exit(1)
84
+
85
+ if not sources_path.is_dir():
86
+ logger.error(f"源码路径不是目录: {sources_path}")
87
+ sys.exit(1)
88
+
89
+ # 验证根类名格式
90
+ if not args.root_class or '.' not in args.root_class:
91
+ logger.error(f"根类名格式无效: {args.root_class}")
92
+ logger.error("应该是完整的类名,如: com.example.Model")
93
+ sys.exit(1)
94
+
95
+ # 输出目录可以不存在,会自动创建
96
+ output_path = Path(args.output_dir)
97
+ if output_path.exists() and not output_path.is_dir():
98
+ logger.error(f"输出路径存在但不是目录: {output_path}")
99
+ sys.exit(1)
100
+
101
+ # 验证日志目录
102
+ log_path = Path(args.log_dir)
103
+ try:
104
+ log_path.mkdir(parents=True, exist_ok=True)
105
+ except Exception as e:
106
+ logger.error(f"无法创建日志目录 {log_path}: {e}")
107
+ sys.exit(1)
108
+
109
+ return sources_path.resolve(), args.root_class, output_path.resolve()
110
+
111
+
112
+ def main():
113
+ """主函数"""
114
+ args = None
115
+ try:
116
+ # 解析参数
117
+ args = parse_arguments()
118
+
119
+ # 初始化日志系统
120
+ setup_logger(args.log_dir)
121
+ logger = get_logger("main")
122
+
123
+ # 验证参数
124
+ sources_dir, root_class, output_dir = validate_arguments(args)
125
+
126
+ # 显示启动信息
127
+ logger.info("🚀 开始Proto重构任务")
128
+ logger.info(f"📁 源码目录: {sources_dir}")
129
+ logger.info(f"📁 输出目录: {output_dir}")
130
+ logger.info(f"📁 日志目录: {args.log_dir}")
131
+ logger.info(f"🎯 根类: {root_class}")
132
+
133
+ # 创建重构器并执行
134
+ reconstructor = ProtoReconstructor(sources_dir, output_dir)
135
+ results = reconstructor.reconstruct_from_root(root_class)
136
+
137
+ # 输出结果统计
138
+ if results:
139
+ logger.success("✅ 重构完成!")
140
+ logger.info(f"📊 处理统计: 共处理 {len(results)} 个类型")
141
+
142
+ message_count = sum(1 for r in results.values() if hasattr(r, 'fields'))
143
+ enum_count = sum(1 for r in results.values() if hasattr(r, 'values'))
144
+
145
+ logger.info(f" - 消息类型: {message_count} 个")
146
+ logger.info(f" - 枚举类型: {enum_count} 个")
147
+ else:
148
+ logger.warning("⚠️ 没有生成任何proto文件")
149
+
150
+ except KeyboardInterrupt:
151
+ if args:
152
+ logger = get_logger("main")
153
+ logger.warning("⚠️ 操作被用户中断")
154
+ else:
155
+ print("\n⚠️ 操作被用户中断")
156
+ sys.exit(1)
157
+ except Exception as e:
158
+ if args:
159
+ logger = get_logger("main")
160
+ logger.error(f"❌ 重构失败: {e}")
161
+ if args.verbose:
162
+ logger.exception("详细错误信息:")
163
+ else:
164
+ print(f"\n❌ 重构失败: {e}")
165
+ if hasattr(args, 'verbose') and args.verbose:
166
+ import traceback
167
+ traceback.print_exc()
168
+ sys.exit(1)
169
+
170
+
171
+ if __name__ == "__main__":
172
+ main()
pyproject.toml ADDED
@@ -0,0 +1,36 @@
1
+ [build-system]
2
+ requires = ["poetry-core>=1.0.0"]
3
+ build-backend = "poetry.core.masonry.api"
4
+
5
+ [tool.poetry]
6
+ name = "reproto"
7
+ version = "0.0.4"
8
+ description = "一个强大的逆向工程工具, 能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构."
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ authors = ["iyue <ys1231@126.com>"]
12
+ # 从当前目录自动包含所有包
13
+ packages = [
14
+ {include = "*", from = "."}
15
+ ]
16
+ # 手动指定包
17
+ # packages = [
18
+ # {include = "main.py"},
19
+ # {include = "core"},
20
+ # {include = "generation"},
21
+ # {include = "models"},
22
+ # {include = "parsing"},
23
+ # {include = "utils"}
24
+ # ]
25
+
26
+ [tool.poetry.dependencies]
27
+ python = ">=3.12,<4.0"
28
+ loguru = ">=0.7.3"
29
+
30
+ [tool.poetry.scripts]
31
+ reproto = "main:main"
32
+
33
+ [[tool.poetry.source]]
34
+ name = "mirrors"
35
+ url = "https://mirrors.cernet.edu.cn/pypi/web/simple/"
36
+ priority = "supplemental"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: reproto
3
- Version: 0.0.3
3
+ Version: 0.0.4
4
4
  Summary: 一个强大的逆向工程工具, 能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构.
5
5
  License: MIT
6
6
  Author: iyue
@@ -0,0 +1,53 @@
1
+ .git/HEAD,sha256=ly8yuQLWQE8njkYAapHLPJ1xVg6_fMgQjCoHqKvFIdw,21
2
+ .git/config,sha256=6mE3z55UjVFEIsUWmiN6Bw_IJPK92slDZMSanpih0ok,287
3
+ .git/description,sha256=hatsFj1DoX6pz3eIMIvKFGbxsKjRzJLibpv2PaQGKu4,73
4
+ .git/hooks/applypatch-msg.sample,sha256=AiNJeguLAzqlijpSG4YphpOGz3qw4vEBlj0yiqYhk_c,478
5
+ .git/hooks/commit-msg.sample,sha256=H3TV6SkpebVz69WXQdRsuT_zkazdCD00C5Q3B1PZJDc,896
6
+ .git/hooks/fsmonitor-watchman.sample,sha256=4FSZZOk4l7UZvY4zPAN-Uf_w-IuhPghqMxWSv4AfodA,4726
7
+ .git/hooks/post-update.sample,sha256=gXZa8trvMjBh3LxeYfwWSBy3SzusmtihdLGGUjWG9sU,189
8
+ .git/hooks/pre-applypatch.sample,sha256=4VxbRp6j4KaVvqbyyCvPjmKCEHSTnd2Ft34AB_8WVHU,424
9
+ .git/hooks/pre-commit.sample,sha256=Vxhbe58FI516tS2wRfW4nrMTSNeyF36rIU9euHLhlxs,1649
10
+ .git/hooks/pre-merge-commit.sample,sha256=04JacDN5QOu9ClwHKYThMkWSDN-ImL0iXI0npt_Jy1M,416
11
+ .git/hooks/pre-push.sample,sha256=7M6cfgTT9d2ditqBdT3R1UmpY0smdwBCtY3aACF9CGo,1374
12
+ .git/hooks/pre-rebase.sample,sha256=T-vOhneQBSM4B29OZsxH77FIedGAl9HWHIJhhZ6qp7M,4898
13
+ .git/hooks/pre-receive.sample,sha256=pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlIyAWmYk,544
14
+ .git/hooks/prepare-commit-msg.sample,sha256=6d3KpBif3dJe2X_Ix4nsp7bKFjkLI5KuMnbwyOGqRhk,1492
15
+ .git/hooks/push-to-checkout.sample,sha256=pT0HQXmLKHxt16-mSu5HPzBeZdP0lGO7nXQI7DsSv18,2783
16
+ .git/hooks/sendemail-validate.sample,sha256=ROv8kj3FRmvACWAvDs8Ge5xlRZq_6IaN3Em3jmztepI,2308
17
+ .git/hooks/update.sample,sha256=jV8vqD4QPPCLV-qmdSHfkZT0XL28s32lKtWGCXoU0QY,3650
18
+ .git/index,sha256=uNpkl4Ngnok-FuwXpx-733gwa0mDR3EJQHNSWlKGVY4,1991
19
+ .git/info/exclude,sha256=ZnH-g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE,240
20
+ .git/logs/HEAD,sha256=8inae4CFVxR4Psim5jd6PmrnSmipVxT3rS8zFAe0Cnc,163
21
+ .git/logs/refs/heads/iyue,sha256=8inae4CFVxR4Psim5jd6PmrnSmipVxT3rS8zFAe0Cnc,163
22
+ .git/logs/refs/remotes/origin/HEAD,sha256=8inae4CFVxR4Psim5jd6PmrnSmipVxT3rS8zFAe0Cnc,163
23
+ .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.idx,sha256=dM0mT5EXOaEswaA71NFzz6Fh3B9iF9IN1SXVxeD80aw,2304
24
+ .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.pack,sha256=RkehkvasbBDavK-cSTnrVcGGYGUiWgUxZVhjsDbYrT4,41437
25
+ .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.rev,sha256=rIyIFQiRY9AcV_xf0UA4im0PAeyvHtrkew59RQ5QaFU,228
26
+ .git/packed-refs,sha256=NZVl-0AkdTQlT4H1r599fFDdUKwCjFwzQYxAYwUrSvg,112
27
+ .git/refs/heads/iyue,sha256=G3DrpPS-kI_DVAakJCukrkaQcp3JNpkozc-HEtV7qEI,41
28
+ .git/refs/remotes/origin/HEAD,sha256=G8pFPTbCqnJ2IkCzz9J-STqOXWU6TrlXfpt1wx5bUWE,30
29
+ .gitignore,sha256=ThRUL1E38Z_Q4Lww0xYYl9ziFaPUvvwwqxbmp2cuwco,2068
30
+ .python-version,sha256=NxOs_9lT1XG8y-FjlRru-YinX5RcBJt_ulPwgDESZ_o,7
31
+ ARCHITECTURE.md,sha256=JALnUdREwdLRAmcUit5CGAPLpeZ6UfoYpAQkxil3NJc,8322
32
+ README.md,sha256=P71PU1DNUaLUAR15ja18AdZL0gobBh7xrUJeVZdlCbc,6067
33
+ core/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
34
+ core/bytecode_parser.py,sha256=87ZGhnyBNGP-gRjIyRUcGfWS2HR1YA_e1OBKafLEEDc,11532
35
+ core/info_decoder.py,sha256=n_U7c4syhDkfez5WXOxXi-CVQ3AMUISpGqixcHqzHHA,19214
36
+ core/reconstructor.py,sha256=9mNV_6YRLNjlSGxzrS4lU3yE8bzu-mwCD3zmw973nIk,25666
37
+ generation/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
38
+ generation/proto_generator.py,sha256=en-BAgikOzkDH7gdagX97iNIb5pTBN0ieVt5MnuL_BI,14535
39
+ main.py,sha256=3hQ-_YmW5Weq14h040V48_W5DSb-xTXpMMb6vRjCbF8,5296
40
+ models/__init__.py,sha256=WScv63rvEl65y5CWjpb6__hvjNvjpCkl6lz1Z2u0IYc,811
41
+ models/message_definition.py,sha256=AszUZnNPSBn9SMXne5ORDBiGZz1W2pcYmU8ftGC3Mks,4873
42
+ parsing/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
43
+ parsing/enum_parser.py,sha256=tBflR9bjC8LRe4cWw19i_ibCedWWB7ICQtbOQdpiWVc,6149
44
+ parsing/java_parser.py,sha256=Rk5_S02rqlqNU3OF7BMK57NynFAoxIHINyhnA6rUuhI,7897
45
+ pyproject.toml,sha256=Rw3OlS4oKb05Fas7SFxlmZRSttTWoQELZ2U0jgN8PQg,901
46
+ requirements.txt,sha256=cQGj3IS6Kj88jbwj_jeKkokMnG-fEezWve91mfW4CJs,96
47
+ utils/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
48
+ utils/file_utils.py,sha256=N1Ei7hmyeOkIyZJFEXyNbtTrfeVF2hP-U8evXAVW2MA,4085
49
+ utils/logger.py,sha256=TaDXUHq5BQAsolswwHDeFUbXAfgL_fhXgxAcs901xmQ,2471
50
+ reproto-0.0.4.dist-info/METADATA,sha256=h0ISgdD0h4xYwQ6zGoX_DsEnEmS6NyKg8oKdjh2VEjk,6625
51
+ reproto-0.0.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
52
+ reproto-0.0.4.dist-info/entry_points.txt,sha256=6Oro9lK_2DXDgHiB3andNuIE78wxfooqacqp8yY1C-g,37
53
+ reproto-0.0.4.dist-info/RECORD,,
requirements.txt ADDED
@@ -0,0 +1,3 @@
1
+ # 项目依赖
2
+ # 使用 loguru 库来提供强大且易于配置的日志记录功能。
3
+ loguru
@@ -1,18 +0,0 @@
1
- core/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
2
- core/bytecode_parser.py,sha256=87ZGhnyBNGP-gRjIyRUcGfWS2HR1YA_e1OBKafLEEDc,11532
3
- core/info_decoder.py,sha256=n_U7c4syhDkfez5WXOxXi-CVQ3AMUISpGqixcHqzHHA,19214
4
- core/reconstructor.py,sha256=9mNV_6YRLNjlSGxzrS4lU3yE8bzu-mwCD3zmw973nIk,25666
5
- generation/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
6
- generation/proto_generator.py,sha256=en-BAgikOzkDH7gdagX97iNIb5pTBN0ieVt5MnuL_BI,14535
7
- models/__init__.py,sha256=WScv63rvEl65y5CWjpb6__hvjNvjpCkl6lz1Z2u0IYc,811
8
- models/message_definition.py,sha256=AszUZnNPSBn9SMXne5ORDBiGZz1W2pcYmU8ftGC3Mks,4873
9
- parsing/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
10
- parsing/enum_parser.py,sha256=tBflR9bjC8LRe4cWw19i_ibCedWWB7ICQtbOQdpiWVc,6149
11
- parsing/java_parser.py,sha256=Rk5_S02rqlqNU3OF7BMK57NynFAoxIHINyhnA6rUuhI,7897
12
- utils/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
13
- utils/file_utils.py,sha256=N1Ei7hmyeOkIyZJFEXyNbtTrfeVF2hP-U8evXAVW2MA,4085
14
- utils/logger.py,sha256=TaDXUHq5BQAsolswwHDeFUbXAfgL_fhXgxAcs901xmQ,2471
15
- reproto-0.0.3.dist-info/METADATA,sha256=gMKobujRFan-lqWGzhNmGARmWnzeBQxG2Jzsj6uK8XM,6625
16
- reproto-0.0.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
17
- reproto-0.0.3.dist-info/entry_points.txt,sha256=6Oro9lK_2DXDgHiB3andNuIE78wxfooqacqp8yY1C-g,37
18
- reproto-0.0.3.dist-info/RECORD,,