运行“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.gradle
内android
并应用此
implementation 'androidx.core:core-ktx:1.7.0-alpha01'
【讨论】:
【参考方案9】:观察相同的核心库依赖会导致所有的 Gradle 构建问题。
另外,clean project
或 Invalidate 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 中的字段 compileSdkVersion
和 targetSdkVersion
从 29 更新为 30。然后,它可以再次运行。如果这个答案适合你,你可以这样。但是,就我个人而言,我正在寻找解决方案而不更改值 compileSdkVersion
和 targetSdkVersion
更新:只需更改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”时出错的主要内容,如果未能解决你的问题,请参考以下文章