React Native应用相同代码版本发布后出现TypeError: undefined is not a function错误排查求助
各位好,
今年8月26日我发布了一个基于React Native开发的应用版本,当时一切顺利,商店的内部测试报告也没有任何问题。但到了9月27日发布新版本时,Google Play Console却在部分设备上报出了undefined is not a function的错误,涉及的设备如下:

由于没有这些实体设备,我下载了对应Android版本的模拟器,直接通过Android文件夹原生运行应用,但始终无法复现这个问题。
我把代码从头到尾排查了一遍,没找到任何可能引发该错误的地方。
这时我开始怀疑问题或许不在业务逻辑里,于是干脆移除了所有自定义逻辑——唯一的改动只是更新了项目版本号,其他所有内容包括package-lock.json、package.json和yarn.lock都和8月26日的稳定版完全一致。
发布时我执行了cd android && ./gradlew clean来清理Android文件夹下的所有构建文件,接着删除了整个node_modules文件夹并重新生成,确保没有损坏的依赖包。之后我运行./gradlew bundleRelease生成了发布用的AppBundle格式安装包。
结果出乎意料:那个8月26日发布时完全稳定、没有任何报错的版本,现在居然也报出了同样的undefined is not a function错误。
我尝试用yarn upgrade更新了所有依赖包,但错误依旧存在。
我翻遍了各类论坛上关于该问题的讨论,大部分结论都指向代码错误,但我现在实在不知道该从何下手了。为什么完全相同的代码版本会突然出现问题?而且第一次发布时预启动报告明明没有检测到任何错误啊?
下面是Play Console上报的完整错误信息:
Exception com.facebook.react.common.JavascriptException: TypeError: undefined is not a function This error is located at: in App in Router in RouterComponent in Connect(RouterComponent) in Provider in App in RCTView in Unknown in AppContainer, js engine: hermes, stack: componentWillUnmount@1:738353 commitDeletionEffectsOnFiber@1:410510 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:410734 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:410547 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:410734 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:411109 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:410734 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:410547 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:410887 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:410734 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:411109 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:410734 recursivelyTraverseDeletionEffects@1:410175 commitDeletionEffectsOnFiber@1:411109 recursivelyTraverseMutationEffects@1:411649 commitMutationEffectsOnFiber@1:413289 commitRootImpl@1:422844 commitRoot@1:422442 flushSyncWorkAcrossRoots_impl@1:376999 scheduleUpdateOnFiber@1:418005 updateContainer@1:427141 unmountComponentAtNode@1:427427 anonymous@1:436470 unmountComponentAtNodeAndRemoveContainer@1:108229 unmountApplicationComponentAtRootTag@1:339749 __callFunction@1:97578 anonymous@1:96018 __guard@1:96959 callFunctionReturnFlushedQueue@1:95976 at com.facebook.react.modules.core.ExceptionsManagerModule.reportException (ExceptionsManagerModule.java:65) at java.lang.reflect.Method.invoke at com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:372) at com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:146) at com.facebook.jni.NativeRunnable.run at android.os.Handler.handleCallback (Handler.java:938) at android.os.Handler.dispatchMessage (Handler.java:99) at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27) at android.os.Looper.loop (Looper.java:240) at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:233) at java.lang.Thread.run (Thread.java:923)
真心感谢任何能给我提供排查思路的朋友!
备注:内容来源于stack exchange,提问作者Deyvison Cruz

