运行“react-native run-android”时出错

Posted

技术标签:

【中文标题】运行“react-native run-android”时出错【英文标题】:Getting error while running `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 【参考方案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 我的问题解决了。它的工作原理

【讨论】:

以上是关于运行“react-native run-android”时出错的主要内容,如果未能解决你的问题,请参考以下文章

JMeter笔记15 | JMeter场景运行

JMeter笔记15 | JMeter场景运行

在 spyder IDE 中,运行选择工作正常,运行文件保持运行/挂起

关于运行osgi插件时和运行环境相关的问题

运行里面怎么以管理员身份运行

linux下如何运行程序?