运行 `react-native run-android` 时出现错误

48

在运行我的React Native代码时,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构建?在依赖项中,我们可以尝试为我们的依赖项提供确切的稳定版本号。 - ChandrasekarG
更新 Android Studio 到 4.2.2 后出现了同样的问题。 - MagogCZ
1
尝试使用稳定版本1.6.0更改核心库。 - Usama Altaf
5
@UsamaAltaf,核心库定义在哪里?我在我的项目中找不到androidx.core:core:1.7.0-alpha01 - Akza
12个回答

29

正如某些人提到的那样,问题在于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"
    }

我是如何解决这个问题的

解决这个问题很痛苦。我使用grep查找gradle文件,以便自动升级软件包,就像这样:

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

node_modules/@react-native-community/netinfo/android/build.gradle 中找到以下片段

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"
  }
}

1
2021年React-native MVP - Denis Tsoi
我的发布版本在这之后增加了2倍的大小。 - Rohit Aggarwal
谢谢!这对我很有帮助。我还使用了 ./gradlew:app:dependencies> dependencies.txt(来自 https://dev59.com/xVEG5IYBdhLWcg3wRYpA#69031232),这帮助我找到了强制 core 1.7 的随机依赖项。我不得不查阅多种解决方案,最终发现是 Intercom 在10.6.2和10.6.3之间推出的“activity-compose”升级导致的。我将其固定为10.6.2。如果它是本机包,则可以使用此存储库浏览器轻松找到要降级的版本:https://mvnrepository.com/artifact/io.intercom.android/intercom-sdk-base/10.6.2 - 它显示依赖关系。 - Nabil Freeman

22

这对我起作用了。 - kojo justine

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

更新:只需更改 compileSdkVersion 即可。


将compileSdkVersion=29修改为compileSdkVersion=30 - Abhigyan Gaurav
0.64.5 将更新所有 SDK 版本至 30,因此您可以使用 ReactNative 升级工具一次性将它们全部升级到 30。 - Victor Sheyanov

5
这是我完成的截图,它运行得非常完美。 将这些行更改为
 compileSdkVersion = 29
 targetSdkVersion = 29

to

 compileSdkVersion = 30
 targetSdkVersion = 30

并且将此行更改为

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

实现 implementation 'androidx.appcompat:appcompat:1.3.0'

在此输入图片描述


我只需要调整'androidx.appcompat:appcompat:1.3.0'就能构建成功,将compileSdkVersion和targetSdkVersion保持在29不变 - 这样就避免了升级React Native NPM包。 - Mr Chris

5

首先,永远不要使用“+”来定义Gradle中库的版本号,尝试始终提供最新版本。

如果您正在使用以下方式在主Gradle依赖项中使用Core KTX:

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

只需将其替换为

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

核心和核心-ktx版本1.7.0于昨天(2021年9月1日)发布,这导致了一些问题。

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


3

对我来说,这个问题是由于react-native-netinfo的旧版本4.0.0配置为自动选择最新发布的androidx.core软件包所致...因此,在这种情况下,它确实发生了。

我意识到在问题开始出现时刚刚发布了androidx.core.core-1.7.0-alpha01

因此,为了解决这个问题,我将我的react-native-netinfo软件包从版本4.0.0更新到6.0.0,并且问题得到了解决。


1
问题就是我所猜测的。因此,今天安卓依赖项的一些次要版本/修补程序版本更新导致了所有这些问题。
为了解决这个问题,在你的build.gradle文件中的依赖项中,如果你指定它每次构建时都采用最新的次要/修补程序版本,请将其改为采用确切的稳定版本。
例如,我的appcompact依赖项是:
implementation "androidx.appcompat:appcompat:1.+

这意味着它可以在发布1.2.x或1.3.x等版本更新时进行更新。我将其更改为依赖于确切的稳定版本,如下所示,
implementation "androidx.appcompat:appcompat:1.3.0"

希望这对每个人都解决了问题。

enter image description here


你知道是哪个依赖项吗?因为我已经使用了implementation 'androidx.appcompat:appcompat:1.1.0-rc01'指定了它,但仍然遇到相同的错误。 - Akza
可能是rc版本构建引起了这个问题。通常来说,rc版本构建非常容易出现bug。你能试一下稳定版本吗? - ChandrasekarG
1
你使用了implementation "com.facebook.react:react-native:+"吗?你指定了它的版本吗? - Akza
我不使用React-Native。我的项目是原生的安卓项目。因此,我相信你不必更改它,因为这对我没有影响。 - ChandrasekarG
我尝试将androidx.appcompat:appcompat:1.1.0-rc01更改为androidx.appcompat:appcompat:1.3.0(就像你所做的一样)。但是,仍然出现错误。 - Akza
显示剩余3条评论

0

请尝试在您的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"
            }
        }
    }
}

0

0

以上任何单一解决方案都不起作用,但它们的组合对我有用,使用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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接