由于 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

提问人:Thanhal P A 提问时间:11/6/2022 最后编辑:Thanhal P A 更新时间:6/23/2023 访问量:43331

问:

注意:错误可能会有所不同,但如果您在过去两天没有更改代码的情况下进行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:
javascript react-native gradle android-debug

评论


答:

96赞 Thanhal P A 11/6/2022 #1

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 库的分辨率使用里面的解析exclusiveContentnode_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

评论

0赞 Mathias Bradiceanu 11/6/2022
好的,再次感谢。但是伙计,你知道为什么吗?这是由于这一行的末尾吗?在+implementation "com.facebook.react:react-native:+"android/app/build.gradle
1赞 Thanhal P A 11/6/2022
这里提到的原因和所有原因:github.com/facebook/react-native/issues/35210
1赞 woodpecker 11/7/2022
stackoverflow.com/questions/74336482/......也解决了这个问题
0赞 Ravis Farooq 11/8/2022
我有 react native 0.66.3,我按照 react native 最新修复的建议用 0.66.5 更新了它。但不幸的是,它仍然不起作用,我得到任务“:app:checkDebugAarMetadata”的执行失败。> 执行 com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction 时发生故障 > 依赖项的 AAR 元数据 (META-INF/com/android/build/gradle/aar-metadata.properties) 中指定的 minCompileSdk (31) 大于此模块的 compileSdkVersion (android-30)
1赞 Thanhal P A 11/9/2022
@RavisFarooq请尝试通过将 in 文件更改为 ..... 来重建如果这不起作用,请恢复之前工作正常的更改和降级,并应用此处提到的解决方案,然后重试compileSdkVersionbuild.gradle31react-native0.66.3
6赞 Emmanuel Ang 11/9/2022 #2

在投票的答案上添加一些知识共享。

重申一下,正如@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 错误。

-1赞 HarshitMadhav 11/9/2022 #3

此修复程序有效:

失败原因: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 库的分辨率使用里面的解析exclusiveContentnode_modules

现在

react native 针对不同版本发布了一些补丁版本, 您可以将当前的 React Native 版本更新为 React Native 补丁版本,如此处所述If you dont want to put this fix

https://github.com/facebook/react-native/issues/35210

1赞 bennyman008 11/9/2022 #4

Facebook 发布了 >=0.63 的错误修复版本。您也可以升级而不是应用此修复程序。

https://github.com/facebook/react-native/issues/35210

0赞 KT_Royal 6/20/2023 #5

我尝试为我的 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”,并且工作正常。versionNameandroid/build.gradleversionNameversionName

评论

0赞 inyourdream 6/23/2023
这并不能提供问题的答案。一旦你有足够的声誉,你就可以对任何帖子发表评论;相反,提供不需要提问者澄清的答案。- 来自评论