这里有一个有趣的问题。所以我收到了一个 .jar,它被混淆了,这意味着当我反编译 .class 文件时,它并没有显示 100% 完美,所以我无法重新编译它。然而,我需要更改的唯一方法已被完美转换(但类没有))。有没有办法以某种方式更改 .java 代码并在类文件中注入(inject)替换方法而无需完全重新编译?
如果失败,我将转到字节码。
谢谢!
编辑:作为后续问题/或围绕替换整个方法的黑客攻击。我真的只是想更改该方法在本地生成的变量。如果有任何更好的方法可以做到这一点。
最佳答案
根据你真正想做什么,我不建议反编译/修改/重新编译代码(出于法律、维护、可理解性、可测试性的原因。)
字节码操作可能也不是最好的解决方案,但如果您想按照这种方式进行操作,请查看 ASM project ,它是一个被许多已知项目广泛使用的字节码操作框架。
如果我是你,我会首先尝试切面 (AspectJ)。切面的强大之处在于你不接触现有代码,而是告诉虚拟机在何时/之前/之后/就地做什么调用特定方法。它允许您通过以分离的方式编写自己的代码来指出确切的上下文和更改,增强代码的行为。
希望对您有所帮助。
关于java - 替换已编译的 .class 文件中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34330502/