43

When running an application on android i get this error. It builds correctly but crashes with exception. I have installed React-native-screens, @React-native/navigation and the dependencies listed on https://reactnavigation.org/docs/getting-started/

com.facebook.react.common.JavascriptException: Invariant Violation: requireNativeComponent: "RNSScreenStackHeaderConfig" was not found in the UIManager.

This error is located at:
    in RNSScreenStackHeaderConfig
    in Unknown
    in RNSScreen
    in N
    in ForwardRef
    in y
    in E
    in RNSScreenStack
    in w
    in RNCSafeAreaProvider
    in Unknown
    in v
    in Unknown
    in Unknown
    in Unknown
    in ForwardRef
    in Unknown
    in ForwardRef
    in p
    in c
    in P
    in RCTView
    in View
    in RCTView
    in View
    in h, stack:

It builds and runs on iOS fine but when running on android it crashes completely. Is there something I am overlooking here?

This is my Package json.

{
  "name": "<myprojectname>",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint .",
    "postinstall": "npx jetify",
    "android:bundle:debug": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/"
  },
  "dependencies": {
    "@react-native-community/async-storage": "^1.8.1",
    "@react-native-community/masked-view": "^0.1.11",
    "@react-navigation/native": "^6.0.2",
    "@react-navigation/native-stack": "^6.1.0",
    "@react-navigation/stack": "^6.0.7",
    "adbkit": "^2.11.1",
    "moment": "^2.24.0",
    "react": "16.9.0",
    "react-native": "0.63.0",
    "react-native-calendar-strip": "^1.4.1",
    "react-native-calendars": "^1.264.0",
    "react-native-firebase": "^5.6.0",
    "react-native-gesture-handler": "^1.10.3",
    "react-native-reanimated": "^2.2.0",
    "react-native-safe-area-context": "^3.3.1",
    "react-native-screens": "3.1.1",
    "react-native-snap-carousel": "^3.8.4",
    "react-native-vector-icons": "^6.6.0",
    "react-navigation": "^4.4.4",
    "react-navigation-stack": "^2.10.4",
    "react-redux": "^7.2.0",
    "redux": "^4.0.5"
  },
  "devDependencies": {
    "@babel/core": "^7.15.0",
    "babel-jest": "24.9.0",
    "eslint": "^6.5.1",
    "jest": "24.9.0",
    "jetifier": "^1.6.5",
    "metro-react-native-babel-preset": "^0.66.2",
    "react-test-renderer": "16.9.0"
  },
  "jest": {
    "preset": "react-native"
  }
}

I dont really know how to solve this, have tried removing caches, restarting metro, deleting node modules and all "related" errors. This error even happens when I create a fresh project and try installing and using the navigation library.

This is my entrypoint, example copied from React-navigation snack.

import * as React from 'react';
import { View, Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { enableScreens } from 'react-native-screens';

enableScreens(true);
function HomeScreen() {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
    </View>
  );
}

function DetailsScreen() {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Details Screen</Text>
    </View>
  );
}

const Stack = createNativeStackNavigator();

function AppTest() {
  return (
    <NavigationContainer>
      <Stack.Navigator 
      screenOptions={{
        headerStyle: {
          backgroundColor: '#f4511e',
        },
        headerTintColor: '#fff',
        headerTitleStyle: {
          fontWeight: 'bold',
        },
      }}
      initialRouteName="Home">
        <Stack.Screen  options={{ title: 'My home' }} name="Home" component={HomeScreen} />
        <Stack.Screen  options={{ title: 'My home' }} name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

export default AppTest;

Any suggestions?

Anders Saxrud
  • 577
  • 1
  • 4
  • 8

33 Answers33

41

If someone ends up here with this issue while using nrwl/nx mono-repo for cross-platform build (mobile and web), you need to add the react-native-screens and react-native-safe-area-context dependency in the mobile application package.json besides the workspace package.json.

Nitesh Agarwal
  • 659
  • 1
  • 9
  • 14
30

I faced this issue on ios during my work on navigation.

I'm not sure what exactly solved the issue. I reinstalled all the navigation packages and ran npx pod-install, cleaned metro cache, build data, derived data and the error disappeared.

Aliaksei
  • 1,094
  • 11
  • 20
13

Solution have in documentation of reactnavigation doc

After install @react-navigation/native you have to install two dependency:

npm install react-native-screens react-native-safe-area-context

it's mention library.

NB: react-native-screens package requires one additional configuration step to properly work on Android devices. Edit MainActivity.java file which is located in

android/app/src/main/java/<your package name>/MainActivity.java.

Add the following code to the body of MainActivity class:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(null);
}

and make sure to add an import statement at the top of this file:

import android.os.Bundle;
blackgreen
  • 34,072
  • 23
  • 111
  • 129
MD Ashik
  • 9,117
  • 10
  • 52
  • 59
13

You just need to make sure installing the dependencies after installing stack on windows run this code:

npm install react-native-screens react-native-safe-area-context

Plipus Tel
  • 666
  • 3
  • 13
  • 23
11

i encountered the same issue ater Editing MainActivity.java file which is located in android/app/src/main/java/<your package name>/MainActivity.java while following react-navigation-getting-started-guide

you need to stop the metro-server

and then, run react-native run-android

9

Kill Metro and clean gradle build (it might take a minute or two):

cd android
.\gradlew clean

Start Metro and clear cache:

npm start --reset-cache

Recompile

npm run android

Also, make sure in MainActivity.java you have added import android.os.Bundle; BELOW package com.your_package_name. Description on https://reactnavigation.org/docs/getting-started/ for some people might suggest to put it on very top of this file, but this is wrong thinking. This is how it should look like:

package com.your_package_name;
import android.os.Bundle;
Dawidowski
  • 101
  • 1
  • 3
6

I had the same issue, I just reloaded my emulator via xCode and it worked.

Yossi Arfi
  • 71
  • 1
  • 1
6

I encountered this problem after setting up navigation for ios. Here is the solution I found:

  1. In the terminal, run npx pod-install ios because as explained in the docs, "If you're on a Mac and developing for iOS, you need to install the pods (via Cocoapods) to complete the linking."
  2. Quit my simulator
  3. Terminated and re-ran npx react-native start
  4. Terminated and re-ran npx react-native run-ios

After completing these steps the app ran successfully again.

Green
  • 507
  • 10
  • 20
4

Mihir Panchal Thanks for the reply but I found a solution myself.

SOLUTION.

I followed the instructions in the documentation. Did not work any differently.

I saw that some projects where imported in these 3 files: settings.gradle, app/build.gradle and mainactivity.java ex.

Settings.gradle:

include ':react-native-firebase'
project(':react-native-firebase').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-firebase/android')
include ':react-native-gesture-handler'
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
include ':react-native-screens'
project(':react-native-screens').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-screens/android')
include ':react-native-reanimated'
project(':react-native-reanimated').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-reanimated/android')

include ':react-native-gesture-handler'
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
include (':react-native-safe-area-context')
project(':react-native-safe-area-context').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-safe-area-context/android')
include ':app'

...

app/build.gradle

  implementation project(':react-native-screens')
    implementation project(':react-native-reanimated')
    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-safe-area-context')

and finally in my mainApplication.java

  @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
            new AsyncStoragePackage(),
            new RNFirebasePackage(),
            new RNFirebaseFirestorePackage(),
            new RNFirebaseLinksPackage(),
            new RNFirebaseAuthPackage(),
            new ReanimatedPackage(),
            new RNGestureHandlerPackage(),
            new RNScreensPackage(),
            new SafeAreaContextPackage()
      );
    }

To get the librarys to work and everything to be setup it had to be linked here. Don't know if this helps anyone but I was stuck for some time and doing this made the application work as expected. Might be easy to miss if you are not experienced(I am not very experienced with RN)

Anders Saxrud
  • 577
  • 1
  • 4
  • 8
4

If this issue persists even after running npm install react-native-screens react-native-safe-area-context, try:

cd ios >> pod install and try react-native run-ios again
blackgreen
  • 34,072
  • 23
  • 111
  • 129
pavan bangalala
  • 111
  • 1
  • 2
3

Did you make the changes given in the documentation? As per this https://reactnavigation.org/docs/getting-started/ you need to make changes in MainActivity.java which is located in android/app/src/main/java/<your package name>/MainActivity.java

Add this at the very start of the file import android.os.Bundle;

and then add @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(null); }

Once again go through the documentation

1

Add in "settings.gradle"

include ':react-native-screens'
project(':react-native-screens').projectDir = new 
File(rootProject.projectDir, '../node_modules/react-native- 
screens/android')
include ':react-native-reanimated'
project(':react-native-reanimated').projectDir = new 
File(rootProject.projectDir, '../node_modules/react-native- 
reanimated/android')
include ':react-native-gesture-handler'
project(':react-native-gesture-handler').projectDir = new 
File(rootProject.projectDir, '../node_modules/react-native-gesture- 
handler/android')
include (':react-native-safe-area-context')
project(':react-native-safe-area-context').projectDir = new 
File(rootProject.projectDir, '../node_modules/react-native-safe-area- 
context/android')
include ':app'
add in "app/build.gradle" 

implementation project(':react-native-screens')
implementation project(':react-native-reanimated')
implementation project(':react-native-gesture-handler')
implementation project(':react-native-safe-area-context')
Just Making above only 2 changes  your project will work fine. 
Thanks.... 
sherkhan
  • 811
  • 8
  • 8
1

I just fix the issue, and this issue is an manual linking issue actually.

Following previous answers is not enough.

Here is my complete changes.

// settings.gradle

include ':react-native-screens'
project(':react-native-screens').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-screens/android')
include ':react-native-reanimated'
project(':react-native-reanimated').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-reanimated/android')
include ':react-native-gesture-handler'
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
include (':react-native-safe-area-context')
project(':react-native-safe-area-context').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-safe-area-context/android')
//app/build.gradle

dependencies {
...
    implementation project(':react-native-screens')
    implementation project(':react-native-reanimated')
    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-safe-area-context')

}

And one more step.

//MainApplication.java

@override
protected List<ReactPackage> getPackages(){

    ...
    packages.add(new com.swmansion.rnscreens.RNScreensPackage());
    //My Metro told me that RNGestureHandlerPackage is created twice, hence I comment the line, and then everything works.
    // packages.add(new com.swmansion.gesturehandler.RNGestureHandlerPackage());
    packages.add(new com.th3rdwave.safeareacontext.SafeAreaContextPackage());
    packages.add(new com.swmansion.reanimated.ReanimatedPackage());

ref: https://github.com/software-mansion/react-native-gesture-handler/issues/684

SHZhao74
  • 73
  • 9
1

If you are using @react-navigation/native-stack, you should install react-native-screens and react-native-safe-area-context too. I believe your error is because you don't have installed react-native-screens

1

I had same error. Try this.

if you using ios

  1. cd ios in your root folder
  2. pod install
  3. cd ..
  4. yarn or npm ios. Again build.

if you using android

  • in mainactivity.java file

  • copy

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(null); } and

    import android.os.Bundle;

berkayer
  • 39
  • 6
1

I got the same error finally I made a success by following the solution.

npm install react-native-screens 
npm install react-native-safe-area-context

install both modules in root folder or If you use microapp architecture install this inside your example folder too. Happy Coding!

gsm
  • 2,348
  • 17
  • 16
1

npm install react-native-screens

npm install react-native-safe-area-context

Installing the above packages through should solve your problem. Try installing using --force flag. I hope this will solve your problem.

csgeek
  • 711
  • 6
  • 15
1

If you're on a Mac and developing for iOS, you need to install the pods (via Cocoapods) to complete the linking.

npx pod-install ios

This is in the react-navigation/native documentation Here

[![enter image description here](https://i.stack.imgur.com/FJWrR.png)](https://i.stack.imgur.com/FJWrR.png)

1

This works for me:

1- npm install @react-navigation/native
2- npx expo install react-native-screens react-native-safe-area-context
3- react-native run-android

if still not working, then try:

1- cd android
2- ./gradlew clean

then try the above 3 steps again I hope it will work then.

0

Caveat: I realize this post is for android, but I'm wondering if it is an issue with installing the cocoa pods after talking to a colleague about this issue.

Hope you all are well! I too, was having this and wanted to add what worked for me. I'm working on a RN project with my first gig outta bootcamp, so I'm also pretty new to these builds. However, it's my understanding that anytime you run pod install you need to run the project from xcode in order to link the pods with node_modules.

To do this you'll want to:

  • Run xcode
  • Go to your project folder in question
  • Go to ios folder
  • Open <project_name>.xcworkspace
  • Click the play button on the top left to build the project (If you have a simulator selected, it should open the app once built)

After finishing these steps, I no longer had that error message.

Dharman
  • 30,962
  • 25
  • 85
  • 135
Romo
  • 15
  • 6
  • Note, said colleague mentioned: "Anytime you see “not found in UIManager” run the project from xcode". – Romo Nov 15 '21 at 18:37
0

Changing settings.gradle and app/build.gradle was not enough. The following changes to MainApplication.java are needed:

    List<ReactPackage> packages = new PackageList(this).getPackages();
    // Packages that cannot be autolinked yet can be added manually here, for example:
    // packages.add(new MyReactNativePackage());
    packages.add(new com.swmansion.reanimated.ReanimatedPackage());
    packages.add(new com.swmansion.gesturehandler.react.RNGestureHandlerPackage());
    packages.add(new com.swmansion.rnscreens.RNScreensPackage());
    packages.add(new com.th3rdwave.safeareacontext.SafeAreaContextPackage());
paneer_tikka
  • 6,232
  • 1
  • 20
  • 17
0

steps:

  1. stop you metro connection
  2. restart you app

Then it will work.

  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Feb 27 '22 at 20:31
0

I face same Issue, so you just have to close project from emulator. and re-run .Error gone

  • This does not really answer the question. If you have a different question, you can ask it by clicking [Ask Question](https://stackoverflow.com/questions/ask). To get notified when this question gets new answers, you can [follow this question](https://meta.stackexchange.com/q/345661). Once you have enough [reputation](https://stackoverflow.com/help/whats-reputation), you can also [add a bounty](https://stackoverflow.com/help/privileges/set-bounties) to draw more attention to this question. - [From Review](/review/late-answers/31520179) – Brian Patterson Apr 15 '22 at 04:33
0

This error is because the updated dependencies for react-navigator haven't been bundled into the app. On Android, re-install the app by running

react-native run-android

and this error vanishes.

ster
  • 46
  • 3
0

Try to use all clearance commands and restart metro, it will be fine

0

Follow these 4 steps. I resolved the same issue.

cd android 
.\gradlew clean 
npm start --reset-cache 
npm run android
vatbub
  • 2,713
  • 18
  • 41
0

I had the same issue yesterday even tho i already had react-native-screens installed and i solved it by running the following commands

npm uninstall react-native-cli @react-native-community/cli --force

then i did this this command

npm install react-native-cli @react-native-community/cli --force

after that i ran npm run android and it workede

Oussama Mg
  • 113
  • 7
0

Add this line in MainActivity.java file in the bottom of "getMainComponentName" function

 @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
  }

also Import

 import android.os.Bundle;

add this line in android/build.gradle

ext{
...
  kotlinVersion = "1.4.10"
}

then clean the gradlew and run the project

0

For android emulators I solved it in this way: 1- close metro 2-go to android and write: .\gradlew clean delete already build app from emulator. 3- run npx react-native run-android.

0

I was having the same problem due to expo linking. I went through this doc and uses the automatic linking. Might be helpful for someone.

0

I was using expo and got this error. All packages were installed normally. The problem is that I ran into an environment different from expo-go because I was using dev-client. If you are using dev-client, delete the build file, rebuild it, and run dev-client again.

this method worked for me

EremesKim
  • 1
  • 2
-1
yarn add react-native-screens

or

npm i react-native-screens
Dharman
  • 30,962
  • 25
  • 85
  • 135
-2

Install react-native screens and that should resolve the issue.

yarn add react-native-screens

  • 1
    Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jan 08 '22 at 00:34