我已经使用JD-GUI反编译了一个jar(这是一个用旧Java版本编写的相当复杂的应用程序),并将Java文件以及所有必需的外部库(jar)放入了Eclipse。问题是我遇到很多关于不适用于特定类型的方法的错误,关于access $ 0的错误以及许多其他问题。
为什么会这样?是否可以反编译复杂的jar并在Eclipse中打开项目?
我收到错误消息,指出某些类型无法使用所使用的方法,类型...的方法access $ 0(...)未定义...
答案 0 :(得分:0)
为什么会这样?
之所以发生这种情况,是因为反编译器无法找出将编译为等效字节码的Java源代码。
反编译器的任务很困难。当编译器将Java源代码编译为字节码时,会丢弃很多信息。不仅仅是注释,缩进和局部变量名之类的显而易见的东西。这也是有关控制结构的特定选择。此外,在许多情况下,编译器必须插入综合方法或字段。
反编译器必须做两件有时相互矛盾的事情:
不幸的是,反编译器并不总是正确。实际的反编译是启发式的,并且启发式方法不是完美的。
混淆器使它变得更加困难。故意。
必然的结果是,您不应在软件开发过程中使用反编译和重新编译。
最好的方法是掌握要尝试理解和修改的JAR的原始源代码。
如果没有其他选择,请仅使用反编译来帮助您理解其他人的代码。 (首先,很可能会违反许可证。请检查软件许可证是否禁止反向工程等。)
如果您真的需要修改字节码,请使用字节码反汇编程序...并学习阅读和编辑Java汇编语言。