在纯 Java 中,使用 intrumentation 和 java 代理,有一种方法可以在运行时替换方法体。
不幸java.lang.instrument.Instrumentation
的是,在 Android 下不可用。
我已经检查了所有其他替代方案,例如stackoverflow中描述的替代方案,它指向过时的javassist-android实现。这令人惊讶地有效,但仅适用于新课程。
还有一篇名为Hot swapping code in Android的文章描述了如何在运行时再次加载类,而不是如何替换现有的类方法。
唯一涉及此问题的文章是一篇名为Android hacking: Replace system classes methods with your own的文章,该文章遗漏了源代码并引用了 Dalvik,而不是 ART(因此它不适用于现代硬件)。
那么,有没有办法做到这一点?
...
底线:我想要这样做的原因是在我的应用程序中跟踪特定的方法调用,就像调用此方法时(并在它之前执行一些操作)以及仅当此方法退出时(并对它执行一些操作)。这些方法是在运行时定义的,因此无法在编译时提前知道它们。