我使用 JD-GUI 反编译了一个 jar(这是一个用旧 Java 版本编写的相当复杂的应用程序),并将 java 文件与所有必需的外部库(jar)一起放入 Eclipse 中。问题是我收到很多关于不适用于特定类型的方法的错误、关于 access$0 的错误以及许多其他问题。
为什么会发生这种情况?是否无法反编译复杂的jar并在Eclipse中打开项目?
我收到错误,指出所使用的方法不适用于某些类型,方法 access$0(...) 对于该类型未定义...
最佳答案
Why is this happening?
发生这种情况是因为反编译器无法找出将编译为等效字节码的 Java 源代码。
反编译器的任务很困难。当编译器将 Java 源代码编译为字节码时,大量信息被丢弃。它不仅仅是注释、缩进和局部变量名称等显而易见的东西。这也是对控制结构做出的特定选择。此外,在多种情况下,编译器必须插入合成方法或字段。
反编译器必须做两件有时相互矛盾的事情:
- 它必须生成可读代码。
- 它必须生成(希望)可编译的代码,并且(希望)与字节码含义相同。
不幸的是,反编译器并不总是正确的。实际的反编译是启发式的,而启发式并不完美。
混淆器让事情变得更加困难。故意的。
<小时/>推论是您不应该在软件开发过程中使用反编译和重新编译。
最好的方法是获取您想要理解和修改的 JAR 的原始源代码。
只有在别无选择的情况下才使用反编译来帮助您理解其他人的代码。 (首先,这很可能是许可证违规。检查软件许可证是否禁止逆向工程等。)
如果您确实需要修改字节码,请使用字节码反汇编程序...并学习阅读和编辑 Java 汇编语言。
关于java - 为什么我的反编译 jar 出现这么多错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62249474/