React Native提供了强大的ReactPackage接口便于注册NativeModule,JavaScriptModule与ViewManager,但是在开发过程中,JS与客户端联调不方便,或者耗时过长的 NativeModule方法影响着 RN页面的运行性能,那么有什么方便的途径来做到这一次监控呢?
先来上两张图,JS与c++写的不是很完整。
我们在NativeMethod方法中,修改掉内部注册的方法,替换成我们进行的HookMethod,这样所有的方法执行都可以被捕捉到。
我们要做的是替换掉BaseJavaModule中注册的方法,同时不修改掉其他的模块
方便的是,ReactPackage已经为我们做好了分类,那么我们只需要管理好注册的这些NativeModules即可
ListcreateNativeModules(ReactApplicationContext reactContext);
List>createJSModules();
ListcreateViewManagers(ReactApplicationContext reactContext);
第一个方法返回的便是我们所有注册的模块,同时我们要考虑好在构建的ReactNativeHost名单中去除掉MainReactPackage。
方法表的创建过程
那么,我们执行findMethods方法,对其手动初始化map(这里mMethods是private无法访问),再替换成我们自己的(具体实现是JavaMethod)。