在 UIManager 中找不到“RNCSafeAreaView”

新手上路,请多包涵

我尝试打开一个包,但是当 android 运行时它显示下一条消息

2020-01-05 23:15:45.366 26210-26210/com.note.principal W/.note.principa: 访问隐藏字段 Landroid/view/View;->mAccessibilityDelegate:Landroid/view/View$AccessibilityDelegate; (浅灰名单,反射)2020-01-05 23:15:45.470 26210-26242/com.note.principal E/ReactNativeJS:不变违规:requireNativeComponent:在 UIManager 中找不到“RNCSafeAreaView”。

>  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:
>
> ```
>
> 在 UIManager 中找不到“RNCSafeAreaView”。
>
> ```
>  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:
>
> ```
>
> 在 UIManager 中找不到“RNCSafeAreaView”。
>
> ```
>  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:
>
> ```
>
> 在 UIManager 中找不到“RNCSafeAreaView”。
>
> ```
>  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:
>
> ```
>
> 在 UIManager 中找不到“RNCSafeAreaView”。
>
> ```
>  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
>
> ```
>
> 用户界面管理器。
>
> ```
>  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

项目包是

{ “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” } }


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
}

}


这是活动代码

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)
}

}

”`

有人知道解决方案是什么?

原文由 Alejandro Gonzalez 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 538
2 个回答

我遇到了同样的错误。为了解决它,请确保安装 react-native-safe-area-context。

npm install react-native-safe-area-context

然后,如果您使用的是 React Native 0.61.X,请确保执行 pod install 。它将一切联系在一起。

如果您使用的是 React Native < 0.6,那么您需要使用 react-native link react-native-safe-area-context 手动进行链接

原文由 Mohamed.A.A 发布,翻译遵循 CC BY-SA 4.0 许可协议

下面为我工作:

  1. npm 安装 react-native-safe-area-context
  2. react-native 链接 react-native-safe-area-context
  3. 项目清单
  4. 里面 android gradlew 干净
  5. npm 开始
  6. npm 运行安卓

原文由 Mohit 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题