«RNCSafeAreaView» est introuvable dans UIManager

9

J'essaie d'ouvrir un bundle, mais lorsque l'androïde est en cours d'exécution, il affiche le message suivant

2020-01-05 23: 15: 45.366 26210-26210 / com.note.principal W / .note.principa: Accès au champ caché Landroid / view / View; -> mAccessibilityDelegate: Landroid / view / View $ AccessibilityDelegate; (liste grise claire, réflexion) 2020-01-05 23: 15: 45.470 26210-26242 / com.note.principal E / ReactNativeJS: Violation invariante: requireNativeComponent: "RNCSafeAreaView" est introuvable dans l'UIManager.

This error is located at:
    in RNCSafeAreaView
    in Unknown
    in Unknown
    in n
    in Unknown
    in Unknown
    in C
    in P
    in u
    in RCTView
    in RCTView
    in h 2020-01-05 23:15:45.494 26210-26242/com.note.principal E/ReactNativeJS: Invariant Violation: requireNativeComponent:

"RNCSafeAreaView" est introuvable dans UIManager.

This error is located at:
    in P
    in u
    in RCTView
    in RCTView
    in h 2020-01-05 23:15:45.502 26210-26242/com.note.principal E/ReactNativeJS: Invariant Violation: requireNativeComponent:

"RNCSafeAreaView" est introuvable dans UIManager.

This error is located at:
    in P
    in u
    in RCTView
    in RCTView
    in h 2020-01-05 23:15:45.794 26210-26244/com.note.principal E/unknown:ReactNative: Invariant Violation: requireNativeComponent:

"RNCSafeAreaView" est introuvable dans UIManager.

This error is located at:
    in RNCSafeAreaView
    in Unknown
    in Unknown
    in n
    in Unknown
    in Unknown
    in C
    in P
    in u
    in RCTView
    in RCTView
    in h, stack:
exports@175:1634
get@163:682
Al@89:70673
Ml@89:70108
Ul@89:67144
Ul@-1
Pl@89:65839
Pl@-1
<unknown>@89:25495
unstable_runWithPriority@168:3915
sn@89:25442
cn@89:25377
kl@89:64831
la@89:87813
render@89:90592
exports@342:541
run@334:1305
runApplication@334:2287
value@25:3685
<unknown>@25:841
value@25:2939
value@25:813
value@-1 2020-01-05 23:15:45.832 26210-26244/com.note.principal E/unknown:ReactNative: Invariant Violation: requireNativeComponent:

"RNCSafeAreaView" est introuvable dans UIManager.

This error is located at:
    in P
    in u
    in RCTView
    in RCTView
    in h, stack:
exports@175:1634
get@163:682
Al@89:70673
Ml@89:70108
Ul@89:67144
Ul@-1
Pl@89:65839
Pl@-1
<unknown>@89:25495
unstable_runWithPriority@168:3915
sn@89:25442
cn@89:25377
kl@89:64831
la@89:87813
render@89:90592
exports@342:541
run@334:1305
runApplication@334:2287
value@25:3685
<unknown>@25:841
value@25:2939
value@25:813
value@-1 2020-01-05 23:15:45.856 26210-26244/com.note.principal E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
Process: com.note.principal, PID: 26210
com.facebook.react.common.JavascriptException: Invariant Violation: requireNativeComponent: "RNCSafeAreaView" was not found in

l'UIManager.

This error is located at:
    in P
    in u
    in RCTView
    in RCTView
    in h, stack:
exports@175:1634
get@163:682
Al@89:70673
Ml@89:70108
Ul@89:67144
Ul@-1
Pl@89:65839
Pl@-1
<unknown>@89:25495
unstable_runWithPriority@168:3915
sn@89:25442
cn@89:25377
kl@89:64831
la@89:87813
render@89:90592
exports@342:541
run@334:1305
runApplication@334:2287
value@25:3685
<unknown>@25:841
value@25:2939
value@25:813
value@-1

    at com.facebook.react.modules.core.ExceptionsManagerModule.reportException(ExceptionsManagerModule.java:71)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:371)
    at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:150)
    at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:26)
    at android.os.Looper.loop(Looper.java:193)
    at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:225)
    at java.lang.Thread.run(Thread.java:764) 2020-01-05 23:15:45.862 26210-26244/com.note.principal I/Process: Sending signal.

PID: 26210 SIG: 9

Le package de projet est

{
  "name": "Notes",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "bundle_android": "react-native bundle --entry-file index.js --platform android --dev false --bundle-output ./bundles/android/index.android.bundle",
    "bundle_ios": "react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ./bundles/ios/main.jsbundle",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "@react-native-community/masked-view": "^0.1.5",
    "prop-types": "^15.7.2",
    "react": "16.9.0",
    "react-native": "0.61.5",
    "react-native-gesture-handler": "^1.5.3",
    "react-native-linear-gradient": "^2.5.6",
    "react-native-safe-area-context": "^0.6.2",
    "react-navigation": "^4.0.10",
    "react-navigation-stack": "^2.0.8"
  },
  "devDependencies": {
    "@babel/core": "^7.7.7",
    "@babel/runtime": "^7.7.7",
    "@react-native-community/eslint-config": "^0.0.6",
    "babel-jest": "^24.9.0",
    "eslint": "^6.8.0",
    "jest": "^24.9.0",
    "metro-react-native-babel-preset": "^0.57.0",
    "react-test-renderer": "16.9.0"
  },
  "jest": {
    "preset": "react-native"
  }
}

Le projet de gradle

include ':app'
rootProject.name='Notes'


include ':hermes-engine'
project(':hermes-engine').projectDir = new File(rootProject.projectDir, '../node_modules/hermes-engine/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-linear-gradient'
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android')



// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
        mavenLocal()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}




apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"
    defaultConfig {
        applicationId ""
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

project.ext.react = [
        enableHermes: false,
]

def jscFlavor = 'org.webkit:android-jsc:+'
def enableHermes = project.ext.react.get("enableHermes", false)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation "com.facebook.react:react-native:+"
    implementation 'com.android.support:support-annotations:27.1.1'
    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-linear-gradient')

    if (enableHermes) {
        implementation project(':hermes-engine')
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }
}

Ceci est le code d'activité

package com.note

import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.facebook.react.ReactInstanceManager
import com.facebook.react.ReactRootView
import com.facebook.react.common.LifecycleState
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler
import com.facebook.react.shell.MainReactPackage
import com.facebook.soloader.SoLoader
import com.swmansion.gesturehandler.react.RNGestureHandlerPackage
import com.BV.LinearGradient.LinearGradientPackage

class ReactActivity : AppCompatActivity(), DefaultHardwareBackBtnHandler {

    private val OVERLAY_PERMISSION_REQ_CODE = 1

    private lateinit var mReactRootView: ReactRootView
    private lateinit var mReactInstanceManager: ReactInstanceManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        SoLoader.init(this, false)
        mReactRootView = ReactRootView(this)
        mReactInstanceManager = ReactInstanceManager.builder()
            .setApplication(application)
            .setCurrentActivity(this)
            .setApplication(application)
            .setBundleAssetName("aaaaaa.android.bundle")
            .addPackage(MainReactPackage())
            .addPackage(RNGestureHandlerPackage())
            .addPackage(LinearGradientPackage())
            .setInitialLifecycleState(LifecycleState.RESUMED)
            .build()
        // The string here (e.g. "MyReactNativeApp") has to match
        // the string in AppRegistry.registerComponent() in index.js
        mReactRootView.startReactApplication(mReactInstanceManager, "Notes", null)

        setContentView(mReactRootView)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.canDrawOverlays(this)) {
                val intent = Intent(
                        Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                        Uri.parse("package:$packageName")
                )
                startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE)
            }
        }
    }

    override fun invokeDefaultOnBackPressed() {
        super.onBackPressed()
    }

    override fun onBackPressed() {
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onBackPressed()
        } else {
            super.onBackPressed()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (!Settings.canDrawOverlays(this)) {
                    // SYSTEM_ALERT_WINDOW permission not granted
                }
            }
        }
        mReactInstanceManager?.onActivityResult(this,requestCode, resultCode, data)
    }
}

quelqu'un sait quelle est la solution?

Alejandro Gonzalez
la source

Réponses:

6

J'ai rencontré la même erreur. Pour le résoudre, assurez-vous d'installer le contexte de zone de sécurité native-react.

npm install react-native-safe-area-context

Ensuite, si vous utilisez React Native 0.61.X assurez-vous de faire a pod install. Il reliera tout ensemble.

Si vous utilisez React Native <0,6, vous devez effectuer la liaison manuellement avec react-native link react-native-safe-area-context

Mohamed Arradi Alaoui
la source
1
il me manquait l'étape d'installation du pod. Merci.
lawphotog
2

J'ai été fouillé et trouvé le suivant,

vous devez d'abord nettoyer le projet

Deuxième module d'importation au projet

include ':app'
rootProject.name='Notes'


include ':hermes-engine'
project(':hermes-engine').projectDir = new File(rootProject.projectDir, '../node_modules/hermes-engine/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-linear-gradient'
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android')

include ':react-native-linear-gradient'
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/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')

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation "com.facebook.react:react-native:+"
    implementation 'com.android.support:support-annotations:27.1.1'
    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-linear-gradient')
    implementation project(':react-native-safe-area-context')

    if (enableHermes) {
        implementation project(':hermes-engine')
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }
}


 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        SoLoader.init(this, false)
        mReactRootView = ReactRootView(this)
        mReactInstanceManager = ReactInstanceManager.builder()
            .setApplication(application)
            .setCurrentActivity(this)
            .setApplication(application)
            .setBundleAssetName("index.android.bundle")
            .addPackage(MainReactPackage())
            .addPackage(RNGestureHandlerPackage())
            .addPackage(LinearGradientPackage())
            .addPackage(SafeAreaContextPackage())
            .addPackage(SDKCorePackage())
            .setInitialLifecycleState(LifecycleState.RESUMED)
            .build()
        // The string here (e.g. "MyReactNativeApp") has to match
        // the string in AppRegistry.registerComponent() in index.js
        mReactRootView.startReactApplication(mReactInstanceManager, "Notes", null)

        setContentView(mReactRootView)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.canDrawOverlays(this)) {
                val intent = Intent(
                        Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                        Uri.parse("package:$packageName")
                )
                startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE)
            }
        }
    }

j'espère que ce sera utile, aussi ce lien m'a aidé

contexte de zone de sécurité natif réactif

Alejandro Gonzalez
la source
1

A travaillé pour moi pour la version ci-dessous et sur iOS

"react": "16.9.0",
 "react-native": "0.61.5",

Étape pour résoudre

-Arrêtez le Metro Bundler en cours d'exécution

-install pod pour ios

-ressayez de relancer l'application

J'espère que cela vous aidera!

sahu
la source
Android, pas iOS
JIMJI1005
0

Dans le cas où vous n'utilisez PAS ReactRootView (intégrant des applications existantes à React-Native) ...

Vous devez probablement encore ajouter votre package (les packages qui ne prennent pas encore en charge la liaison automatique, c'est-à-dire la nouvelle zone de sécurité , par exemple) pour MainApplication.java:

android/app/src/main/.../MainApplication.java

En plus, où les importations sont:

import com.th3rdwave.safeareacontext.SafeAreaContextPackage;

Ajoutez la classe SafeAreaContextPackage à votre liste de packages exportés.

@Override
protected List<ReactPackage> getPackages() {
    return Arrays.asList(
            new MainReactPackage(),
            /**other packages of yours**/
            new SafeAreaContextPackage()
    );
}
indéfini
la source
Mais le bundle est en réaction native, l'activité n'a pas ce contournement
Alejandro Gonzalez
En effet, l'Activité ne fonctionne pas. L'application fait: MainApplication (.java) | (.kt)
ofundefined
peut-être, dans mon cas, je dois ajouter la bibliothèque
Alejandro Gonzalez
Bien sûr, je suppose que vous intégrez une application Android native existante avec un projet natif réactif, non? Dans ce cas, vous suivez les documents officiels qui nous apprennent comment implémenter react-native sur des activités sans avoir React Application. Cela pourrait être inféré car je peux voir que vous déclarez manuellement mReactInstanceManagerce qui ferait à peu près la même chose que React Application.
ofundefined
C'est l'idée, car le projet de React Native n'est que le bundle, alors j'ai une application sous Android et iOS. ils sont le conteneur mais le code et la fonction sont natifs
Alejandro Gonzalez
0

Ci-dessous a fonctionné pour moi:

  1. npm install context-native-safe-area-context
  2. lien réactif natif contexte de zone de sécurité natif réactif
  3. Élément de liste
  4. à l'intérieur android gradlew propre
  5. npm start
  6. npm run android
Kapoor
la source