software-mansion / software-mansion/react-native-reanimated
Production Crashes on Android - java.lang.NullPointerException.
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 11k
- Forks
- 1.5k
- Avg merge
- 3d 4h
- Merged PRs (30d)
- 172
Description
Description
Hey,
Got this error in android devices.
Reproduced in ~10% of my clients during race condition.
com.facebook.react.common.JavascriptException: Error: Exception in HostFunction: java.lang.NullPointerException
at java.util.Objects.throwNullPointerException(Objects.java:524)
at java.util.Objects.requireNonNull(Objects.java:235)
at com.swmansion.reanimated.NodesManager.<init>(NodesManager.java:231)
at com.swmansion.reanimated.ReanimatedModule.getNodesManager(ReanimatedModule.java:144)
at com.swmansion.reanimated.ReanimatedModule.installTurboModule(ReanimatedModule.java:159)
at com.facebook.jni.NativeRunnable.run(Native Method)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
at android.os.Looper.loopOnce(Looper.java:209)
at android.os.Looper.loop(Looper.java:296)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl.lambda$startNewBackgroundThread$2(MessageQueueThreadImpl.java:217)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl.$r8$lambda$A-xptrrouKKkxROXrYr0wU31v4c(MessageQueueThreadImpl.java:0)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$$ExternalSyntheticLambda1.run(R8$$SyntheticClass:0)
at java.lang.Thread.run(Thread.java:1564)
, js engine: hermes, stack:
callNativeSyncHook@1:273229
nonPromiseMethodWrapper@1:288802
NativeReanimatedModule@1:2376319
createNativeReanimatedModule@1:2375642
anonymous@1:2369488
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
get@1:2369384
anonymous@1:2367543
anonymous@1:2366622
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:2406353
anonymous@1:2405359
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:2342833
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5244791
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5203731
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5201511
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5125718
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5096008
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:4975869
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:4972390
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:4965026
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:267098
loadModuleImplementation@1:260658
guardedLoadModule@1:260138
metroRequire@1:259811
global@1:259339
at com.facebook.react.modules.core.ExceptionsManagerModule.reportException(ExceptionsManagerModule.kt:52)
at java.lang.reflect.Method.invoke(Method.java:-2)
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(NativeRunnable.java:-2)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
at android.os.Looper.loopOnce(Looper.java:209)
at android.os.Looper.loop(Looper.java:296)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl.lambda$startNewBackgroundThread$2(MessageQueueThreadImpl.java:217)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl.$r8$lambda$A-xptrrouKKkxROXrYr0wU31v4c(MessageQueueThreadImpl.java)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$$ExternalSyntheticLambda1.run(MessageQueueThreadImpl)
at java.lang.Thread.run(Thread.java:1564)
Steps to reproduce
Failed to reproduce constantly cause it is a race with UI Thread.
But I have ~10% reproduction trend of my production version
Snack or a link to a repository
.
Reanimated version
3.18.2
Worklets version
no
React Native version
0.77.3
Platforms
Android
JavaScript runtime
None
Workflow
None
Architecture
None
Reanimated feature flags
None
React Native release level
None
Build type
No response
Device
Real device
Host machine
None
Device model
No response
Acknowledgements
Yes
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at NodesManager.java:231 and follow the initialization path through ReanimatedModule.java:144 and :159. Investigate the reported Android race involving the UI thread and validate changes on a real device under the React Native 0.77.3 and Reanimated 3.18.2 setup; done means the intermittent NullPointerException no longer occurs.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, java, react-native, typescript
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 28/100