类增强与 Hook
Rain 的增强层由 classloader 与 hook 两个模块组成。
AppClassloader
AppClassloader 在定义应用类前读取字节码,并依次调用已注册的 ClassTransformer。Transformer 返回发生变更后,增强后的类由应用类加载器定义。
黑名单中的 JDK、Kotlin、ASM、日志和测试框架包默认交给父类加载器;应用可以注册额外的黑白名单类或包。
Transformer
kotlin
appClassloader.registerTransformer(MyTransformer())
appClassloader.registerBlackPackage("com.example.library")完整启动器已经注册 Rain 自身需要的增强与 Hook Transformer。
方法 Hook
Hook 运行器可参与三个阶段:
preRun:方法调用前,可修改参数或取消执行。postRun:方法成功返回后,可修改结果。onError:方法抛出异常后,可处理或替换异常。
Hook 支持静态与实例方法。由于它依赖自定义类加载器,应尽早通过 FullStackApplicationLauncher 启动,不要提前由系统类加载器加载待增强业务类。