我尝试打开一个包,但是当 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 许可协议
我遇到了同样的错误。为了解决它,请确保安装 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
手动进行链接