【问题标题】:Getting error while running `react-native run-android`运行“react-native run-android”时出错
【发布时间】:2021-09-13 08:30:11
【问题描述】:

在运行我的 react 本机代码 react-native run-android 时遇到错误。它工作正常。但是在从 git 和npm ci 获得新的拉动之后,在我运行之后,就会出现这个错误。

error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkDebugAarMetadata'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
   > The minCompileSdk (30) specified in a
     dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
     is greater than this module's compileSdkVersion (android-29).
     Dependency: androidx.core:core:1.7.0-alpha01.
     AAR metadata file: C:\Users\gauraab\.gradle\caches\transforms-2\files-2.1\9e02d64f5889006a671d0a7165c73e72\core-1.7.0-alpha01\META-INF\com\android\build\gradle\aar-metadata.properties.

【问题讨论】:

  • 今天大家都在面对它,我想这可能是因为我们的依赖关系。对次要版本/补丁版本的一些更新可能破坏了 android 版本?在依赖项中,我们可以尝试为我们的依赖项提供一个准确的稳定版本号。
  • Android Studio 升级到 4.2.2 后出现同样的问题
  • 尝试用稳定版1.6.0更改核心库
  • @UsamaAltaf 核心库在哪里定义?我在我的项目中找不到androidx.core:core:1.7.0-alpha01

标签: javascript android react-native android-sdk-2.3


【解决方案1】:

上面的单一解决方案都不起作用,但它们的组合对我有用,使用 RN 0.63.3 这是差异:

diff --git a/android/app/build.gradle b/android/app/build.gradle
index 9c014f8..1b59f65 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -139,6 +139,12 @@ def enableProguardInReleaseBuilds = false
  */
 def jscFlavor = 'org.webkit:android-jsc:+'
 
+configurations.all {
+   resolutionStrategy {
+     force 'androidx.core:core-ktx:1.6.0'
+   }
+}
+
 android {
     compileSdkVersion rootProject.ext.compileSdkVersion
 
diff --git a/android/build.gradle b/android/build.gradle
index a32892e..db64506 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -3,12 +3,13 @@
 buildscript {
     ext.kotlin_version = '1.4.0'
     ext {
-        buildToolsVersion = "29.0.2"
+        buildToolsVersion = "29.0.3"
         minSdkVersion = 21
-        compileSdkVersion = 30
+        compileSdkVersion = 29
         targetSdkVersion = 29
         androidXAnnotation = "1.1.0"
         androidXBrowser = "1.0.0"
+        androidXCore = "1.5.0"
     }
     repositories {
         google()

【讨论】:

    【解决方案2】:

    在 Gradle 中首先不要使用 + 来定义库的版本,尽量提供最新版本。

    如果您在主要 Gradle 依赖项中使用如下所示的 Core KTX

    implementation "androidx.core:core-ktx:+"
    

    把它换成

    implementation "androidx.core:core-ktx:1.6.0"
    

    昨天(2021 年 9 月 1 日)发布的 Core 和 Core-ktx 版本 1.7.0,这导致了问题。

    https://developer.android.com/jetpack/androidx/releases/core

    【讨论】:

    • 感谢 Guruprasad,它解决了这个问题。
    【解决方案3】:

    显然他们今天刚刚打破了这个。

    您可以通过将以下行添加到您的应用级 build.gradle 文件(在 android { } 块上方作为兄弟)来修复它:

    configurations.all {
        resolutionStrategy { force 'androidx.core:core-ktx:1.6.0' }
    }
    

    终于,Gradle 构建成功完成。参考。 https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

    【讨论】:

    • 这对我有用
    【解决方案4】:

    更新版本号以匹配官方模板 build.gradle 文件中显示的版本号对我有用: https://github.com/facebook/react-native/blob/master/template/android/build.gradle

     buildToolsVersion = "30.0.2"
     compileSdkVersion = 30
     targetSdkVersion = 30
     ndkVersion = "21.4.7075529"
    

    【讨论】:

      【解决方案5】:

      尝试将此添加到您的顶部build.gradle 底部的buildscript。这会将任何内容强制为特定版本。

      subprojects {
          project.configurations.all {
              resolutionStrategy.eachDependency { details ->
                  if (details.requested.group == 'androidx.core'
                          && !details.requested.name.contains('androidx') ) {
                      details.useVersion "1.5.0"
                  }
                  
                  if (details.requested.group == 'androidx.core-ktx'
                          && !details.requested.name.contains('androidx') ) {
                      details.useVersion "1.5.0"
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案6】:

        正如一些人所提到的,问题在于 RN 构建自动“升级”到 androidx.core:core:1.7.0-alpha01,这取决于 SDK 版本 30。

        修复

        解决方法就是在 build.gradle 中通过 androidXCore 指定 android 核心版本

        buildscript {
            ext {
                buildToolsVersion = "29.0.3"
                minSdkVersion = 23
                compileSdkVersion = 29
                targetSdkVersion = 29
                ndkVersion = "20.1.5948944"
                kotlin_version = "1.5.0"
                androidXCore = "1.5.0"
            }
        

        我是怎么想出来的

        弄清楚这一点很痛苦。我 grepped 的 gradle 文件会像这样自动升级包

        find . -name '*.gradle' -exec grep -H "\.+" {} \;
        

        node_modules/@react-native-community/netinfo/android/build.gradle发现下面sn-p

        def androidXCore = getExtOrInitialValue('androidXCore', null)
          if (supportLibVersion && androidXVersion == null && androidXCore == null) {
            implementation "com.android.support:appcompat-v7:$supportLibVersion"
          } else {
            def defaultAndroidXVersion = "1.+"
            if (androidXCore == null) {
              androidXCore = androidXVersion == null ? defaultAndroidXVersion : androidXVersion
            }
            implementation "androidx.core:core:$androidXCore"
          }
        }
        

        【讨论】:

        • 2021 React-native MVP
        • 在此之后我的发布版本的大小增加了 2 倍。
        【解决方案7】:

        这是我所做的屏幕截图,它运行完美。 将这些行从

         compileSdkVersion = 29
         targetSdkVersion = 29
        

         compileSdkVersion = 30
         targetSdkVersion = 30
        

        并将这一行从

        implementation 'androidx.appcompat:appcompat:1.+'
        

        实现 'androidx.appcompat:appcompat:1.3.0'

        【讨论】:

        • 我只能通过调整 'androidx.appcompat:appcompat:1.3.0' 来构建,将 compileSdkVersion 和 targetSdkVersion 保留为 29 - 因此避免升级 React Native NPM 包。
        【解决方案8】:

        编译版本的简单解决方法

        • compileSdkVersion=29 更改为compileSdkVersion=30 并同步。

        如果你不愿意更改编译版本,那么

         configurations.all {
                resolutionStrategy {
                    force 'androidx.core:core-ktx:1.6.0'
                }
            }
        

        将上述代码添加到 build.gradleandroid 并应用此

        implementation 'androidx.core:core-ktx:1.7.0-alpha01'

        【讨论】:

          【解决方案9】:

          观察相同的核心库依赖会导致所有的 Gradle 构建问题。

          另外,clean projectInvalidate Caches/Restart... 选项在这里也无济于事。

          影响依赖:'androidx.core:core-ktx:1.7.0-alpha01'

          这个导致问题的依赖,因为我在build.gradle文件中使它稳定,然后添加了一个新行来解决依赖冲突:

          configurations.all {
             resolutionStrategy {
               force 'androidx.core:core-ktx:1.6.0'
             }
          }
          

          【讨论】:

          • 您是否尝试将 compileSdkVersion=29 更改为 compileSdkVersion=30
          • @ChandrasekarG 对于我们大多数人来说,这种问题类型是最近才出现的,准确地说是从昨天开始。 TBH,我还没有尝试升级compileSdkVersion,将尝试检查。
          【解决方案10】:

          对我来说,问题是由 react-native-netinfo 的旧 version 4.0.0 引起的,它被配置为自动获取最新发布的 androidx.core 包......所以在这种情况下它确实 我意识到androidx.core.core-1.7.0-alpha01 已在问题开始出现时发布。

          为了解决这个问题,我将我的 react-native-netinfo 包从 4.0.0 更新为 6.0.0,这个问题已经为我解决了。

          【讨论】:

            【解决方案11】:

            我遇到了同样的问题。就是今天。当我尝试在本地运行时,我得到了完全相同的错误。为了让它再次运行,我将文件 android > build.gradle 中的字段 compileSdkVersiontargetSdkVersion 从 29 更新为 30。然后,它可以再次运行。如果这个答案适合你,你可以这样。但是,就我个人而言,我正在寻找解决方案而不更改值 compileSdkVersiontargetSdkVersion

            更新:只需更改compileSdkVersion

            【讨论】:

            • compileSdkVersion=29 到 compileSdkVersion=30
            • 0.64.5 会将所有 sdk 版本更新到 30,因此您可以使用 ReactNative 升级工具将它们全部升级到 30。
            【解决方案12】:

            问题正是我的猜测。因此,今天对 android 依赖项的次要版本/补丁版本的一些更新导致了这一切。

            为了解决这个问题,对于 build.gradle 文件中的依赖项,如果您已指定它在每次构建时采用最新的次要/补丁版本,请使其采用精确的稳定版本。

            例如,我的 appcompact 依赖是,

            implementation "androidx.appcompat:appcompat:1.+
            

            这意味着它可以更新到 1.2.x 或 1.3.x 等。当此类版本更新发布时。我将其更改为依赖于如下所示的确切稳定版本,

            implementation "androidx.appcompat:appcompat:1.3.0"
            

            希望这能解决每个人的问题。

            【讨论】:

            • 你知道它是哪个依赖吗?因为我已经用implementation 'androidx.appcompat:appcompat:1.1.0-rc01' 指定了。但还是出现同样的错误
            • 可能是 rc 构建导致了这种情况。总的来说,rc 构建非常有问题。你能尝试一个稳定的构建吗?
            • 你用过implementation "com.facebook.react:react-native:+"吗?你指定了吗,版本?
            • 我不使用 react-native。我的是一个原生的安卓项目。所以,我相信你不必改变它,因为这对我来说并没有破坏。
            • 我尝试将 androidx.appcompat:appcompat:1.1.0-rc01 更改为 androidx.appcompat:appcompat:1.3.0(就像您所做的那样)。但是,还是报错
            【解决方案13】:

            我只是将 compileSdkVersion=29 更改为 compileSdkVersion=30 我的问题解决了。它的工作原理

            【讨论】:

              猜你喜欢
              • 2018-05-20
              • 1970-01-01
              • 2020-12-29
              • 2019-06-10
              • 1970-01-01
              • 2020-07-27
              相关资源
              最近更新 更多