You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:02:33