提问人:Thanhal P A 提问时间:11/6/2022 最后编辑:Thanhal P A 更新时间:6/23/2023 访问量:43331
由于 React Native 版本 0.71.0-rc.0 的发布,React Native Android 构建失败并出现不同的错误,过去几天代码没有任何更改
React Native Android build failure with different errors without any changes in code for past days due to publish of React Native version 0.71.0-rc.0
问:
注意:错误可能会有所不同,但如果您在过去两天没有更改代码的情况下进行android构建时遇到任何错误
我的错误 - 无法安装应用程序。 错误:命令失败:./gradlew app:installDebug -PreactNativeDevServerPort=8081
error Failed to install the app. Make sure you have the Android development environment set up:
Error: Command failed: ./gradlew app:installDebug
-PreactNativeDevServerPort=8081
FAILURE: Build failed with an exception.
* Where: Build file '/Users/....../node_modules/react-native-month-year-picker/android/build.gradle' line: 115
* What went wrong: A problem occurred configuring project ':react-native-month-year-picker'.
> Could not resolve all files for configuration ':react-native-month-year-picker:implementation'.
> Could not resolve com.facebook.react:react-native:+.
Required by:
project :react-native-month-year-picker
> Cannot choose between the following variants of com.facebook.react:react-native:0.71.0-rc.0:
- debugVariantDefaultRuntimePublication
- releaseVariantDefaultRuntimePublication
All of them match the consumer attributes:
- Variant 'debugVariantDefaultRuntimePublication' capability com.facebook.react:react-native:0.71.0-rc.0:
答:
Android 的构建失败是由于 React Native 版本 0.71.0-rc0
的发布。
注意:错误可能有所不同,但如果您在过去两天没有更改任何代码的情况下遇到 android 构建失败,这将是解决方案
在尝试这些方法之前,请恢复您所做的所有更改: https://stackoverflow.com/a/74371195/10657559
方法 1
将此修复程序添加到您的 android -> build.gradle 文件中,如下所示:
buildscript {
// ...
}
allprojects {
repositories {
exclusiveContent {
filter {
includeGroup "com.facebook.react"
}
forRepository {
maven {
url "$rootDir/../node_modules/react-native/android"
}
}
}
// ...
}
}
此修复程序将应用一个解析规则,该规则将强制 React Native Android 库的分辨率使用里面的解析exclusiveContent
node_modules
方法 2
如果您的 gradle 不支持上述功能,请将其添加到您的 android -> build.gradle 文件中,如下所示:
def REACT_NATIVE_VERSION = new File(['node', '--print',"JSON.parse(require('fs').readFileSync(require.resolve('react-native/package.json'), 'utf-8')).version"].execute(null, rootDir).text.trim())
buildscript {
// ...
}
allprojects {
configurations.all {
resolutionStrategy {
force "com.facebook.react:react-native:" + REACT_NATIVE_VERSION
}
}
// ...
}
参考:自 2022 年 11 月 4 日以来发生的 Android 构建失败的修复和更新 #35210
评论
+
implementation "com.facebook.react:react-native:+"
android/app/build.gradle
compileSdkVersion
build.gradle
31
react-native
0.66.3
在投票的答案上添加一些知识共享。
重申一下,正如@Thanhal发布的那样,解决方案和官方解释可以在这里找到: Android 构建失败 未找到 com.facebook.react:react-native:0.71.0-rc.0 的匹配变体。
错误发生后,我需要回答的最大问题是:
在 package.json 中指定了我的 react-native 版本后,为什么我的项目仍然下载另一个 react-native 版本?
我什至曾经确保我得到的是正确的版本npm install --save-exact
我收到的错误消息让我更加困惑:
该类从 ~/.gradle/caches/transforms-3/9a8c596b7e1788d5bad7c80991eefff1/transformed/jetified-kotlin-stdlib-1.6.10.jar!/kotlin/Unit 加载.class e: .../node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt: (351, 32): 类 'kotlin.Unit“是使用不兼容的 Kotlin 版本编译的。其元数据的二进制版本为 1.6.0,预期版本为 1.4.1。
不知何故,Kotlin 也成了我的一个问题。
谁/什么在要求最新的 react-native?
就我而言,这里的问题不在于我的项目正在使用的 react-native 版本。这是关于我的图书馆正在使用什么。
react-native 团队一直在 NPM 包 (node_modules/react-native/android/) 中发布一个 Maven 存储库,直到 .大多数库的 build.gradle 都配置为引用此目录。这是通过在库的 build.gradle 中声明一个自定义存储库来完成的:0.71.0-rc.0
maven {
url "$rootDir/../node_modules/react-native/android"
}
但是在库的 build.gradle 文件中,声明了更多的存储库,可能如下所示:
repositories {
maven {
url "$rootDir/../node_modules/react-native/android"
}
google()
mavenLocal()
mavenCentral()
}
然后,将库的依赖项声明为:
dependencies {
implementation 'com.facebook.react:react-native:+'
}
由于 “+” 作为 react-native 依赖项的版本,Gradle 将从各种声明的存储库中获取最新的 react-native 版本。
由于过去 react-native 是随 npm 包一起提供的,因此 Gradle 将始终将 react-native 包含在 .然而,现在 react-native 团队正在将库发布到包括 MavenCentral 在内的公共存储库,Gradle 尊重“+”并改用 MavenCentral 上的版本。node_modules
为什么我收到 Kotlin 错误?
我的项目使用旧版本的 react-native,从 0.68 版开始,react-native 开始使用 Kotlin 版本 1.6.10(请参阅更改历史记录)。所以是的,react-native 版本的差异也会导致 Kotlin 错误。
此修复程序有效:
失败原因:Android 的构建失败是由于将 React Native 版本 0.71.0-rc0 发布到 Maven 并且因此,当 gradle 同步时,它选择了这个 0.71.0-rc0 版本的 react-native,而不是您当前的 react-native 版本。
使其在不升级 react-native 版本的情况下工作,并通过在 build.gradle 中添加它,这可以工作(是否启用 hermes,以及 flipper)
exclusiveContent {
// We get React Native's Android binaries exclusively through npm,
// from a local Maven repo inside node_modules/react-native/.
// (The use of exclusiveContent prevents looking elsewhere like Maven Central
// and potentially getting a wrong version.)
filter {
includeGroup "com.facebook.react"
}
forRepository {
maven {
url "$rootDir/../node_modules/react-native/android"
}
}
}
最后一个片段如下所示
allprojects {
repositories {
exclusiveContent {
// We get React Native's Android binaries exclusively through npm,
// from a local Maven repo inside node_modules/react-native/.
// (The use of exclusiveContent prevents looking elsewhere like Maven Central
// and potentially getting a wrong version.)
filter {
includeGroup "com.facebook.react"
}
forRepository {
maven {
url "$rootDir/../node_modules/react-native/android"
}
}
}
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
修复后,gradle 清理并重建。然后你就可以反应本机运行android成功了。
此修复程序将应用一个解析规则,该规则将强制 React Native Android 库的分辨率使用里面的解析exclusiveContent
node_modules
现在
react native 针对不同版本发布了一些补丁版本,
您可以将当前的 React Native 版本更新为 React Native 补丁版本,如此处所述If you dont want to put this fix
https://github.com/facebook/react-native/issues/35210
Facebook 发布了 >=0.63 的错误修复版本。您也可以升级而不是应用此修复程序。
https://github.com/facebook/react-native/issues/35210
我尝试为我的 React Native 应用程序生成一个 APK,但我不知道是什么问题导致新创建的 APK 文件与以前的 APK 相比没有变化。
我正在使用该命令创建APK。./gradlew assembleRelease
我删除了该文件并运行以下命令:android/app/src/main/assets/index.android.bundle
npx 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
我还清理了项目并重建了它,但问题仍然存在。
我已经修好了。问题出在文件中。我使用的是“4.0.2”,现在我已将其更改为“4.0.3”,并且工作正常。versionName
android/build.gradle
versionName
versionName
评论