React Native拦截NativeModule方法实现

2018-01-21  本文已影响0人  magicyoung

React Native提供了强大的ReactPackage接口便于注册NativeModule,JavaScriptModule与ViewManager,但是在开发过程中,JS与客户端联调不方便,或者耗时过长的 NativeModule方法影响着 RN页面的运行性能,那么有什么方便的途径来做到这一次监控呢?

先来上两张图,JS与c++写的不是很完整。

Java调用JS JS调用Java

我们在NativeMethod方法中,修改掉内部注册的方法,替换成我们进行的HookMethod,这样所有的方法执行都可以被捕捉到。

NativeModule分类

我们要做的是替换掉BaseJavaModule中注册的方法,同时不修改掉其他的模块

方便的是,ReactPackage已经为我们做好了分类,那么我们只需要管理好注册的这些NativeModules即可

ListcreateNativeModules(ReactApplicationContext reactContext);

List>createJSModules();

ListcreateViewManagers(ReactApplicationContext reactContext);

第一个方法返回的便是我们所有注册的模块,同时我们要考虑好在构建的ReactNativeHost名单中去除掉MainReactPackage。

方法表的创建过程


方法表创建

那么,我们执行findMethods方法,对其手动初始化map(这里mMethods是private无法访问),再替换成我们自己的(具体实现是JavaMethod)。

上一篇 下一篇

猜你喜欢

热点阅读