升级Gradle后React Native旧项目构建失败:无法解析:realm项目
React Native旧项目Gradle升级后Realm依赖解析失败问题
问题背景
维护旧版React Native项目时,升级Gradle版本后无法构建运行。已将旧版依赖转换为新版,但构建时出现无法解析:realm项目的报错。
原项目配置
app/build.gradle
buildscript { repositories { maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'io.fabric.tools:gradle:1.29.0' } } apply plugin: 'com.android.application' apply plugin: 'io.fabric' repositories { maven { url 'https://maven.fabric.io/public' } google() } compileSdk 33 defaultConfig { applicationId "com.amsec.cwII" minSdkVersion 16 targetSdkVersion 33 versionCode 11 versionName "3.1.1" ndk { abiFilters "armeabi-v7a", "x86" } multiDexEnabled true } ....... dependencies { implementation project(':react-native-device-info') implementation project(':react-native-sentry') implementation project(':react-native-keychain') implementation project(':react-native-fingerprint-scanner') implementation project(':realm') implementation project(':react-native-svg') implementation project(':react-native-vector-icons') implementation(project(':react-native-maps')) { exclude group: 'com.google.android.gms', module: 'play-services-base' exclude group: 'com.google.android.gms', module: 'play-services-maps' } implementation 'com.google.android.gms:play-services-base:18.1.0' implementation 'com.google.android.gms:play-services-maps:18.1.0' implementation 'com.google.android.gms:play-services-location:20.0.0' implementation fileTree(include: ['*.jar'], dir: 'libs') //noinspection GradleCompatible,GradleCompatible implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.facebook.react:react-native:' // compile project(':react-native-appstore-version-checker') // From node_modules implementation files('libs/jsoup-1.11.3.jar') implementation('com.crashlytics.sdk.android:crashlytics:17.2.2@aar') { transitive = true } } task copyDownloadableDepsToLibs(type: Copy) { from configurations.implementation into 'libs' }
根目录build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() mavenCentral() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:7.2.1' } } allprojects { repositories { mavenLocal() jcenter() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url "$rootDir/../node_modules/react-native/android" } } }
报错信息
> 无法解析配置':app:debugRuntimeClasspath'的所有任务依赖。 > 无法解析项目 :realm。 被以下项目依赖: project :app > 未找到项目:realm的匹配配置。消费者被配置为查找组件的运行时版本,最好是针对Android优化的,以及属性'com.android.build.api.attributes.BuildTypeAttr'值为'debug',属性'com.android.build.api.attributes.AgpVersionAttr'值为'7.2.1',但: - 没有可消费的配置具备这些属性。 * 尝试: > 使用--info或--debug选项获取更多日志输出。 > 使用--scan选项获取完整分析信息。 org.gradle.api.internal.tasks.TaskDependencyResolveException: 无法确定任务':app:mergeDebugAssets'的依赖项。 at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.getDependencies(CachingTaskDependencyResolveContext.java:71) at org.gradle.execution.plan.TaskDependencyResolver.resolveDependenciesFor(TaskDependencyResolver.java:46) at org.gradle.execution.plan.LocalTaskNode.getDependencies(LocalTaskNode.java:161) at org.gradle.execution.plan.LocalTaskNode.resolveDependencies(LocalTaskNode.java:129) at org.gradle.execution.plan.DefaultExecutionPlan.doAddNodes(DefaultExecutionPlan.java:186) at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:150) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.addEntryTasks(DefaultTaskExecutionGraph.java:146) at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:49) at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:51) at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:25) at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:59) at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:48) at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:51) at org.gradle.execution.DefaultBuildConfigurationActionExecuter.lambda$select$0(DefaultBuildConfigurationActionExecuter.java:38) at org.gradle.internal.Factories$1.create(Factories.java:31) at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:160) at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:147) )
更新后的根目录build.gradle
all sub-projects/modules. buildscript { ext.kotlinversion = "1.3.72" repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.2.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinversion" classpath "io.realm:realm-gradle-plugin:10.11.1" } } allprojects { repositories { mavenLocal() google() mavenCentral() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url "$rootDir/../node_modules/react-native/android" } } } task clean(type: Delete) { delete rootProject.buildDir }
解决方案
- 替换Realm依赖方式:将app/build.gradle中的
implementation project(':realm')替换为远程maven依赖,适配新Gradle的属性要求:implementation 'io.realm:realm-react-native:10.11.1' - 修正根配置注释错误:将更新后的根目录build.gradle第一行的无效文本改为正确注释:
// Top-level build file where you can add configuration options common to all sub-projects/modules. - 应用Realm插件:在app/build.gradle的
apply plugin: 'com.android.application'之后添加:apply plugin: 'realm-android' - 移除废弃的Fabric配置:Fabric已停止服务,删除app/build.gradle中所有Fabric/Crashlytics相关的仓库、插件和依赖配置
- 清理构建缓存并同步:执行命令清理缓存后重新构建:
./gradlew clean ./gradlew assembleDebug
内容的提问来源于stack exchange,提问作者Rojer75
相关产品推荐
相关产品推荐

