React Native编译报错:app:checkDebugDuplicateClasses,Firebase类重复排查无效
React Native编译报错:com.google.firebase.iid.FirebaseInstanceIdReceiver类重复
编译React Native应用时,执行:app:checkDebugDuplicateClasses任务失败,原因是新增其他团队提供的组件后,出现重复的com.google.firebase.iid.FirebaseInstanceIdReceiver类,分别来自firebase-iid-20.1.5.aar和firebase-messaging-23.4.1.aar。尝试在app/build.gradle中配置排除firebase-iid依赖,但编译仍报错,需解决依赖重复问题以完成编译。
项目配置信息
项目根目录build.gradle
buildscript { ext { buildToolsVersion = "34.0.0" minSdkVersion = 24 compileSdkVersion = 34 targetSdkVersion = 34 ndkVersion = "26.1.10909125" kotlinVersion = "1.9.22" RNNKotlinVersion = kotlinVersion } subprojects { subproject -> afterEvaluate{ if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion } } } } repositories { google() mavenLocal() mavenCentral() maven { url 'https://maven.google.com' } } dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") classpath 'com.google.gms:google-services:4.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1' } allprojects { repositories { google() mavenLocal() jcenter() mavenCentral() maven { url "$rootDir/../node_modules/react-native/android" } maven { url 'https://maven.google.com/' name 'Google' } maven { url 'https://jitpack.io' } maven { url 'https://api.mapbox.com/downloads/v2/releases/maven' authentication { basic(BasicAuthentication) } credentials { username = '******' password = '**************' } } maven { credentials { username '************' password '************' } url '************' } }} } apply plugin: "com.facebook.react.rootproject"
app/build.gradle
apply plugin: "com.android.application" apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.crashlytics' apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" import com.android.build.OutputFile apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" react { } def enableProguardInReleaseBuilds = false def jscFlavor = 'org.webkit:android-jsc:+' android { ndkVersion rootProject.ext.ndkVersion buildToolsVersion rootProject.ext.buildToolsVersion compileSdk rootProject.ext.compileSdkVersion namespace "com.*******" defaultConfig { applicationId "com.*******" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.4" missingDimensionStrategy 'react-native-camera', 'general' } signingConfigs { debug { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' v1SigningEnabled false v2SigningEnabled false enableV3Signing true enableV4Signing true } release { storeFile file('******') storePassword '********' keyAlias '*******' keyPassword '********' v1SigningEnabled false v2SigningEnabled false enableV3Signing true enableV4Signing true } } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.debug minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } } dependencies { implementation("com.facebook.react:react-android") implementation project(':react-native-orientation') implementation project(':react-native-gesture-handler') implementation project(':react-native-vector-icons') implementation 'com.google.android.gms:play-services-maps:18.2.0' implementation project(':react-native-material-letter-icon') if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") } else { implementation jscFlavor } } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
解决方案
- 定位依赖来源:执行
./gradlew app:dependencies(Windows系统用gradlew.bat app:dependencies),查看完整依赖树,确认是新增组件还是其他依赖引入了旧版firebase-iid。 - 全局排除firebase-iid:在
app/build.gradle的android块外添加全局排除规则,确保所有依赖都不引入旧版iid:configurations.all { exclude group: 'com.google.firebase', module: 'firebase-iid' } - 使用Firebase BOM统一版本:在
app/build.gradle的dependencies中引入Firebase BOM,自动统一所有Firebase组件版本,避免版本冲突:dependencies { // 新增BOM依赖 implementation platform('com.google.firebase:firebase-bom:32.7.0') // 其他Firebase组件无需指定版本 implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-crashlytics' // 原有依赖... } - 针对新增组件排除依赖:如果确认是新增组件引入了旧版
firebase-iid,在该组件的依赖声明中直接排除:implementation project(':新增组件的名称') { exclude group: 'com.google.firebase', module: 'firebase-iid' } - 清理缓存重新编译:执行
./gradlew clean清理编译缓存,再重新执行编译命令,避免缓存残留导致的问题。
内容的提问来源于stack exchange,提问作者Emmanuel Tamburini
相关产品推荐
相关产品推荐

