react-native-safe-area-context 抛出“未解析的引用:”错误

sut*_*her 6 react-native react-navigation-v6

升级react-native-navigationreact-native-safe-area-context后尝试升级时出现以下错误

Note: Recompile with -Xlint:deprecation for details.
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.kt: (12, 34): Unresolved reference: R
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.kt: (15, 34): Unresolved reference: getInsets
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.kt: (16, 24): Unresolved reference: Type
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.kt: (17, 28): Unresolved reference: Type
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.kt: (18, 28): Unresolved reference: Type
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.kt: (55, 50): Unresolved reference: R
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.kt: (8, 37): Unresolved reference: FabricViewStateManager
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.kt: (9, 37): Unresolved reference: FabricViewStateManager
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.kt: (19, 66): Unresolved reference: HasFabricViewStateManager
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.kt: (24, 41): Unresolved reference: FabricViewStateManager
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.kt: (26, 3): 'getFabricViewStateManager' overrides nothing
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.kt: (26, 45): Unresolved reference: FabricViewStateManager
e: /home/me/myProject/node_modules/react-native-safe-area-context/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewManager.kt: (71, 10): Unresolved reference: fabricViewStateManager

FAILURE: Build failed with an exception.
Run Code Online (Sandbox Code Playgroud)

我的构建脚本:

buildscript {
    ext {
        buildToolsVersion = "29.0.2"
        minSdkVersion = 16
        compileSdkVersion = 29
        targetSdkVersion = 29
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath('com.android.tools.build:gradle:3.5.3')
    }
}
Run Code Online (Sandbox Code Playgroud)

sut*_*her 16

简短的解决方案:

\n

如果您使用ReactNative <= 0.63,请安装react-native-safe-area-context在V3(例如3.4.1)中,因为它与v4不兼容safe-area-context

\n
\n

漫长而痛苦的旅程,这也解决了我途中的一些其他错误:

\n

这可以帮助我解决它:

\n

首先,设置您的构建脚本版本:

\n
    \n
  • minSdkVersion = 24(即 Android 7 [nougat])
  • \n
  • 目标SdkVersion =
  • \n
  • compileSdkVersion = 31(此处设置最新可能)
  • \n
\n

解释这些版本的作用:\n| 标题 | 另一个标头 |\n| -------- | -------------- |\n| minSdkVersion | 设置您希望应用程序支持的最低 Android 版本。但请记住,您的应用程序\xe2\x80\x99s minSdkVersion 必须至少与您的依赖要求一样高
Google Play 商店还使用此来确定应用程序可以在用户\xe2\x80\x99s 设备中使用安装在 |\n| 目标SdkVersion | 这是 Android 提供前向兼容性的主要方式,除非更新 targetSdkVersion,否则不应用行为更改 |\n| 编译SdkVersion| 是您的应用程序将使用的版本进行编译。更改此值不会更改运行时行为,您的compileSdkVersion不包含在您的APK中|

\n

如果您想了解更多相关信息,请参阅此处

\n

注意:如果您增加compileSdkVersion,请确保您还在电脑上安装了新的SDK。\n就我而言,我错过了这一点,并收到了一个无帮助的错误,例如:

\n
* Where:\nBuild file \'/home/me/myProject/android/app/build.gradle\' line: 130\n\n* What went wrong:\nA problem occurred evaluating project \':app\'.\n> No signature of method: build_bzoaxr1mlfb80yiyz2yt0w97u.android() is applicable for argument types: (build_bzoaxr1mlfb80yiyz2yt0w97u$_run_closure1) values: [build_bzoaxr1mlfb80yiyz2yt0w97u$_run_closure1@1068678f]\n\n
Run Code Online (Sandbox Code Playgroud)\n

例如在 Android-Studio 中它看起来像这样:在此输入图像描述

\n

然后看看升级gradle-plugin。

\n

https://developer.android.com/studio/releases/gradle-plugin.html#updating-gradle

\n

升级 Gradle 后,出现此错误:

\n
10:01   Gradle sync failed: Could not get unknown property \'compile\' for configuration container of type org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer. (3 s 273 ms)\n
Run Code Online (Sandbox Code Playgroud)\n

所以我已经from configurations.compile改为implementationandroid/app/build.gradle

\n
* Where:\nBuild file \'/home/me/myProject/android/app/build.gradle\' line: 130\n\n* What went wrong:\nA problem occurred evaluating project \':app\'.\n> No signature of method: build_bzoaxr1mlfb80yiyz2yt0w97u.android() is applicable for argument types: (build_bzoaxr1mlfb80yiyz2yt0w97u$_run_closure1) values: [build_bzoaxr1mlfb80yiyz2yt0w97u$_run_closure1@1068678f]\n\n
Run Code Online (Sandbox Code Playgroud)\n

然后gradle-sync成功,没有错误。

\n

正如我在中所做的那样,android studio我已经清除了项目 buy run > clean project,但您也可以转到/android并运行./gradlew clean

\n

但当我尝试启动应用程序时,遇到了问题。在 stackoverflow 上搜索了一下,原因似乎是 RN 仍然与 Gradle7 不兼容。\n所以回到 6.9:

\n
10:01   Gradle sync failed: Could not get unknown property \'compile\' for configuration container of type org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer. (3 s 273 ms)\n
Run Code Online (Sandbox Code Playgroud)\n

我还必须将 build:gradle-tools 更改为 4.2.2

\n
dependencies {\n        classpath(\'com.android.tools.build:gradle:4.2.2\')\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 谢谢你!!我所做的只是将react-native-safe-area-context从4.1.2版本降级到3.4.1,所有令人讨厌的gradle错误和失败的构建都消失了! (2认同)