将我的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模块在这里。
我尝试过:
答案 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模块的方法也已经很老了,最新的文档提供了一种更简单的声明方式,我也应该迁移它。