React Native新架构升级Reanimated后触发空指针异常求助
React Native 0.71.3 新架构搭配 Reanimated 3.0.2 空指针异常解决指南
报错详情
java.lang.NullPointerException: 尝试调用空对象引用上的虚拟方法 'void com.swmansion.reanimated.NativeProxy.performOperations()' at com.swmansion.reanimated.NodesManager.performOperations(NodesManager.java:188) at com.swmansion.reanimated.NodesManager.onAnimationFrame(NodesManager.java:249) at com.swmansion.reanimated.NodesManager.access$000(NodesManager.java:42) at com.swmansion.reanimated.NodesManager$1.doFrameGuarded(NodesManager.java:142) at com.facebook.react.uimanager.GuardedFrameCallback.doFrame(GuardedFrameCallback.java:29) at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(ReactChoreographer.java:175) at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(ChoreographerCompat.java:85) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1127) at android.view.Choreographer.doCallbacks(Choreographer.java:926) at android.view.Choreographer.doFrame(Choreographer.java:835) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1114) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8298) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)
解决方案
- 确认新架构完全启用:检查
android/gradle.properties中newArchEnabled=true配置,执行./gradlew clean后重新构建项目。Reanimated 3.x依赖新架构的TurboModule机制,未完全启用会导致NativeProxy无法实例化。 - 升级Reanimated版本:Reanimated 3.0.2存在与RN 0.71.3新架构的兼容bug,升级到
react-native-reanimated@3.3.0及以上版本,该版本修复了多个新架构下的空指针问题。 - 彻底清理缓存并重构:执行以下命令清除所有缓存后重新编译:
rm -rf node_modules && npm install cd android && ./gradlew clean && cd .. npx react-native start --reset-cache - 检查初始化逻辑:确保App启动时Reanimated初始化完成,若项目存在延迟初始化场景,可在
index.js顶部手动调用Reanimated.initialize()(3.x版本通常自动初始化,但特殊场景下手动调用可避免实例为空)。 - 排查自定义模块冲突:若项目有自定义原生模块,确认其TurboModule注册逻辑未干扰Reanimated的NativeProxy实例化,避免模块加载顺序导致的依赖问题。
内容的提问来源于stack exchange,提问作者Preetika
相关产品推荐
相关产品推荐

