在已有Android App中集成ReactNative调用Android模块调不到的问题

我想在已有的App中调用Android模块,比如Toast,
NativeModules.ToastExample.show(..);

但是一直红屏报错,我console.log发现ToastExample是undefined。多发查找,发现下面的App.java中,-------xxx--2---->和-------xxx--3---->直到红屏始终都没有打印,也就是说getReactNativeHost没有被RN调用。为什么呢??很愁人

图片描述

阅读 3k
1 个回答

今天上午我稍微看了一下源码,发现调用getReactNativeHost的地方是ReactActivityDelegate.java(ReactNativeHostDelegate-> onCreate会调用getReactNativeHost().getReactInstanceManager()),只有ReactActivity执行生命周期才会调用到的。

所以我疑惑了,这个跟Application有关系吗。我查看了下非集成到app能正常调用的工程的调用到的方法栈:
方法stack

很清晰,测试用的App之所以能调用到getReactNativeHost,是因为ReactActivity的生命周期调用了ReactActivityDelegate。

那么我发现我集成的App里,根本没有一个继承ReactActivity的类。进而我才发现,编写Native Modules和Integration with Existing Apps的调用原生Module的方法是不一样的,后者完全不需要在Application里提供getReactNativeHost来注册package,只需要在相应的交互入口的Activity里注册你的Package就行了!也就是这样,在后面再add一个你自己写的package,这样就注册成功了。只能说,getReactNativeHost和这种是两种不同的注册本地模块的方法。
addPackage

https://www.jianshu.com/p/5cf...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题