Skip to content

com.facebook.react.uimanager.IllegalViewOperationException after pressing back on an activity having a ReactRootView #33121

Closed
@KunalFarmah98

Description

New Version

0.67.2

Old Version

0.63.4

Build Target(s)

Android

Output of react-native info

System:
OS: macOS 11.5.1
CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
Memory: 2.89 GB / 16.00 GB
Shell: 5.8 - /bin/zsh
Binaries:
Node: 17.0.1 - /path
Yarn: 1.22.17 - /path
npm: 6.14.16 - ~/path
Watchman: 2021.10.18.00 - /path
CocoaPods: 1.11.2 - /path
SDKs:
iOS SDK:
Platforms: iOS 15.0, DriverKit 20.4, macOS 11.3, tvOS 15.0, watchOS 8.0
Android SDK:
API Levels: 26, 28, 29, 30, 31
Build Tools: 29.0.2, 30.0.2, 30.0.3, 31.0.0, 32.0.0, 32.0.0
System Images: android-28 | Google APIs Intel x86 Atom, android-29 | Google APIs Intel x86 Atom, android-30 | Google APIs Intel x86 Atom, android-31 | Google APIs ARM 64 v8a, android-31 | Google APIs Intel x86 Atom_64
Android NDK: 21.4.7075529
Languages:
Java: 1.8.0_292 - /path
npmPackages:
@react-native-community/cli: 7.0.1
react: 17.0.2
react-native: 0.67.2
react-native-macos: Not Found
npmGlobalPackages:
react-native: Not Found

Issue and Reproduction Steps

On upgrading to React Native 0.67.2, we have started getting com.facebook.react.uimanager.IllegalViewOperationException crash on a Native Android Screen that registers a React Root View to run a react-native screen on top of it as a fragment.

Our app is a hybrid app that runs on both native android and react-native using ReactInstanceManager for linking packages across the app. This was working fine in 0.63.4

The stack trace for the crash is:

com.facebook.react.uimanager.IllegalViewOperationException: Trying to attach a ReactRootView with an explicit id already set to [2131363921]. React Native uses the id field to track react tags and will overwrite this field. If that is fine, explicitly overwrite the id field to View.NO_ID.
        at com.facebook.react.ReactRootView.attachToReactInstanceManager(SourceFile:14)
        at com.facebook.react.ReactRootView.onMeasure(SourceFile:27)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6987)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1204)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:723)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6987)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6987)
        at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(SourceFile:1)
        at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(SourceFile:35)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6987)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(SourceFile:21)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6987)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6987)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6987)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6987)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:776)
        at android.view.View.measure(View.java:25671)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3742)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2520)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2795)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2206)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8759)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1352)
        at android.view.Choreographer.doCallbacks(Choreographer.java:1149)
        at android.view.Choreographer.doFrame(Choreographer.java:1049)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1333)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:233)
        at android.app.ActivityThread.main(ActivityThread.java:8063)
        at java.lang.reflect.Method.invoke(Method.java:-2)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)

On investigating, I found the culprit to be this commit: 4f3b174

This commit has no PR related to it and no explanation of why was it added. On removing the code from this commit and running forked version of react-native, the crash disappears.

Can someone please let me know why is this happening and if the commit is important, then what was the idea behind it and how can we debug this issue in our app as I did not find any line that is accessing the reactRootView and changing its id as per the crash message.

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions