迁移以响应本机0.57时AppState模块错误

时间:2018-09-17 15:17:20

标签: react-native

将我的Android应用程序从本机 0.52 迁移到 0.57 后,启动时收到以下错误消息:

  

不包括本地“ RCTAppState”时无法使用“ AppState”模块   在构建中。包括它,或检查“ AppState”。isAvailable   在调用任何方法之前。

问题在于此错误是由React本机代码本身引发的;堆栈跟踪基本上是:

> global code 
> metroRequire 
> guardedLoadModule 
> loadModuleImplementation 
> ... 
> connectToDevTools 
> isAppActive 
> AppState.get 
> throwMissingNativeModule

所以我不能遵循建议在调用任何方法之前先检查'AppState'.isAvailable

我发现react native的更改引发了此错误:https://github.com/gaearon/react-native/commit/118e88393e389ff70e30ada10a69b72dd31d869a,但是我没有在rn-diff中找到任何相关的更改,因此我不确定要迁移什么。

我的MainApplication.java有一个ReactPackage,它扩展了MainReactPackage,并注册了AppStateModule,所以对我来说AppState模块在这里。

我尝试过:

  • 清理我的Android Studio项目并重建->不变
  • 使用react-native-git-upgrade进行迁移->告诉我该迁移有效,但不更改任何文件。

1 个答案:

答案 0 :(得分:0)

好,所以我发现了问题;我的本机模块声明看起来像:

 modules.add(ModuleSpec.nativeModuleSpec(AppStateModule.class, new Provider<NativeModule>() {
    @Override
    public NativeModule get() {
      return new ContactsModule(context, MainApplication.this);
    }
  }));
  modules.add(ModuleSpec.nativeModuleSpec(AppStateModule.class, new Provider<NativeModule>() {
    @Override
    public NativeModule get() {
      return new SettingsModule(context, MainApplication.this);
    }
  }));
  modules.add(ModuleSpec.nativeModuleSpec(AppStateModule.class, new Provider<NativeModule>() {
    @Override
    public NativeModule get() {
      return new NativeUiModule(context, MainApplication.this);
    }
  }));

正如您所看到的,我以前使用AppStateModule.class作为.nativeModuleSpec的第一个参数,并且它以前曾起作用,但是这可能是错误的,在较新版本的react native中,这很可能替代了原始的AppState模块。 我通过每次使用相关课程来解决它

这种声明react native模块的方法也已经很老了,最新的文档提供了一种更简单的声明方式,我也应该迁移它。