我使用JD-GUI反编译了一个jar(这是一个用旧版Java编写的相当复杂的应用程序),并将java文件和所有需要的外部库(jar)一起放入Eclipse。问题是我得到了很多关于方法对特定类型不起作用的错误,关于access$0的错误和许多其他问题。
为什么会出现这种情况?是不是无法反编译复杂的jars并在Eclipse中打开项目?
我得到的错误是,所使用的方法对某些类型不可用,方法access$0(...)对类型未定义... ...
为什么会发生这种情况?
发生这种情况是因为反编译器无法找出能够编译成等效字节码的Java源代码。
反编译器的任务是很困难的。 当编译器将Java源代码编译成字节码时,很多信息都被丢弃了。 不仅仅是注释、缩进和局部变量名等显而易见的东西。 还有就是关于控制结构的特殊选择。 此外,在各种情况下,编译器不得不在其中插入 合成方法或领域.
反编译器要做两件有时是矛盾的事情。
不幸的是,反编译器并不总是正确的。 实际的反编译是启发式的,而启发式的反编译并不完美。
混淆器让它变得更加困难。 故意的。
推论是,你不应该在软件开发过程中使用反编译和重新编译。
最好的方法是掌握你试图理解和修改的JAR的原始源代码。
只有在别无选择的情况下,才使用反编译来帮助你理解别人的代码。 (首先,这很可能是一种违反许可证的行为。 检查软件许可证是否禁止反向工程,等等)。)
如果你 真的 需要修改字节码,使用字节码反汇编器......并学会阅读和编辑Java汇编语言。