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

如何解决运行“react-native run-android”时出错

运行我的本机代码 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.

解决方法

正如一些人提到的,问题是 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"
    }

我是怎么想出来的

弄清楚这一点很痛苦。我搜索了会像这样自动升级软件包的 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"
  }
}
,

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

的解决方案

更新:只需更改 compileSdkVersion

,

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

 compileSdkVersion = 29
 targetSdkVersion = 29

 compileSdkVersion = 30
 targetSdkVersion = 30

并将这一行更改为

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

实现 'androidx.appcompat:appcompat:1.3.0'

enter image description here

,

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

您可以通过在 build.gradle 文件中添加以下行来修复它:

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

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

,

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

要解决此问题,对于 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

,

对我来说,这个问题是由 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,这个问题已为我解决。

,

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

,

观察到相同的核心库依赖会导致所有的 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'
   }
}
,

使用 complie 版本的简单解决方法

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

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

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

build.gradle 内的 android 中添加上述代码并应用此代码

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

,

尝试将其添加到 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"
            }
        }
    }
}
,

更新版本号以匹配官方模板 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"
,

我已经将 compileSdkVersion 更改为 30 并且它正在运行

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?