求问:哪个JD/JD-Eclipse版本可生成带行号的反编译Java代码?
批量反编译Jar并生成带行号和特定注释的源码方案
1. 使用JD-Core命令行工具完成批量反编译
JD-Core是JD系列反编译器的核心命令行版本,支持批量处理Jar文件,生成标准Java源码结构:
- 下载JD-Core的命令行包(如
jd-core-1.1.6.jar) - 执行以下命令完成批量反编译:
该命令会自动保持原Jar内的目录结构,将所有class文件反编译为.java文件。java -jar jd-core-1.1.6.jar 你的输入Jar路径 输出目录路径/
2. 编写脚本添加行号和底部特定注释
JD-Core生成的源码不含行号和指定注释,可通过脚本批量处理所有.java文件:
示例Python脚本(适配通用场景)
import os # 配置项,根据你的需求修改 TARGET_DIR = "反编译输出目录/" # 替换为你需要添加的底部特定注释 CUSTOM_FOOTER = """// Decompiled with Java Decompiler // Original Class: 对应原类文件路径""" def process_java_file(file_path): # 读取原文件内容 with open(file_path, 'r', encoding='utf-8') as f: raw_lines = f.readlines() # 为每行添加行号(这里用4位对齐格式,可根据需求调整) numbered_content = [f"{line_num:4d} {line}" for line_num, line in enumerate(raw_lines, start=1)] # 添加底部注释 numbered_content.append(f"\n{CUSTOM_FOOTER}\n") # 写入修改后的内容 with open(file_path, 'w', encoding='utf-8') as f: f.writelines(numbered_content) # 遍历目录下所有.java文件并处理 for root, _, files in os.walk(TARGET_DIR): for file in files: if file.endswith(".java"): process_java_file(os.path.join(root, file))
- 将脚本放在反编译输出目录同级,修改
TARGET_DIR和CUSTOM_FOOTER为实际内容 - 运行脚本:
python 脚本文件名.py
3. 替代反编译工具:Procyon
如果JD-Core的反编译结果不符合预期,可换用Procyon反编译器,它的命令行同样支持批量处理:
- 下载
procyon-decompiler.jar - 执行反编译命令:
之后仍用上述脚本添加行号和注释即可。java -jar procyon-decompiler.jar -o 输出目录路径/ 你的输入Jar路径
关键调整点
- 行号格式:若原文件行号无对齐需求,可将
{line_num:4d}改为{line_num} - 编码适配:如果反编译文件含非ASCII字符,确保脚本使用对应编码(如GBK)读取/写入
- 增量处理:若仅需处理新增Jar,可在脚本中添加文件修改时间判断,跳过已处理文件
内容的提问来源于stack exchange,提问作者Luong Pham
相关产品推荐
相关产品推荐

