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

React Native构建Gradle遇namespace设置过晚错误,求解决方案

解决React Native Firebase构建时的"设置namespace时机过晚"错误

错误场景与信息

在执行React Native项目构建、清理或Gradle同步时,出现以下错误:

> Configure project :react-native-firebase_app
:react-native-firebase_app package.json found at /Users/{name}/Documents/GitHub/{project}/node_modules/@react-native-firebase/app/package.json

FAILURE: Build failed with an exception.

- 位置:
构建文件 '/Users/{name}/Documents/GitHub/{project}/node_modules/@react-native-firebase/app/android/build.gradle' 第66行

- 问题:
评估项目 ':react-native-firebase_app' 时出错。

> 设置namespace时机过晚
> 该项目已读取配置,无法再设置。
> 建议将此调用移至评估阶段,或使用variant API。

相关配置文件

@react-native-firebase/app/android/build.gradle

import io.invertase.gradle.common.PackageJson

buildscript {
    // The Android Gradle plugin is only required when opening the android folder stand-alone.
    // This avoids unnecessary downloads and potential conflicts when the library is included as a
    // module dependency in an application project.
    if (project == rootProject) {
        repositories {
            google()
            mavenCentral()
        }

        dependencies {
            classpath("com.android.tools.build:gradle:8.1.2")
        }
    }
}

plugins {
    id "io.invertase.gradle.build" version "1.5"
}

def packageJson = PackageJson.getForProject(project)
def firebaseBomVersion = packageJson['sdkVersions']['android']['firebase']
def playServicesAuthVersion = packageJson['sdkVersions']['android']['playServicesAuth']
def jsonMinSdk = packageJson['sdkVersions']['android']['minSdk']
def jsonTargetSdk = packageJson['sdkVersions']['android']['targetSdk']
def jsonCompileSdk = packageJson['sdkVersions']['android']['compileSdk']

project.ext {
    set('react-native', [
            versions: [
                    android: [
                            minSdk: jsonMinSdk,
                            targetSdk: jsonTargetSdk,
                            compileSdk: jsonCompileSdk,
                    ],

                    firebase: [
                            bom: firebaseBomVersion,
                    ],

                    play: [
                            "play-services-auth": playServicesAuthVersion,
                    ],
            ],
    ])
}

apply from: file('./firebase-json.gradle')

// If data collection isn't specifically disabled, default is enabled
String dataCollectionDefaultEnabled = 'true'

if (rootProject.ext && rootProject.ext.firebaseJson) {
    if (rootProject.ext.firebaseJson.isFlagEnabled('app_data_collection_default_enabled', true) == false) {
        dataCollectionDefaultEnabled = 'false'
    }
}

android {
    def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger()

    // Set namespace here
    if (agpVersion >= 7) {
        namespace 'io.invertase.firebase'
    }

    defaultConfig {
        multiDexEnabled true
        manifestPlaceholders = [
                firebaseJsonDataCollectionDefaultEnabled: dataCollectionDefaultEnabled
        ]
    }

    buildFeatures {
        // AGP 8 no longer builds config by default
        buildConfig true
    }

    lintOptions {
        disable 'GradleCompatible'
        abortOnError false
    }

    if (agpVersion < 8) {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_11
            targetCompatibility JavaVersion.VERSION_11
        }
    }

    sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/reactnative/java']
        }
    }
}

repositories {
    google()
    mavenCentral()
}

dependencies {
    implementation platform("com.google.firebase:firebase-bom:${ReactNative.ext.getVersion("firebase", "bom")}")
    implementation "com.google.firebase:firebase-common"
    implementation "com.google.android.gms:play-services-auth:${ReactNative.ext.getVersion("play", "play-services-auth")}"
}

ReactNative.shared.applyPackageVersion()
ReactNative.shared.applyDefaultExcludes()
ReactNative.module.applyAndroidVersions()
ReactNative.module.applyReactNativeDependency("api")

项目根build.gradle

buildscript {
    ext {
        buildToolsVersion = "34.0.0"
        minSdkVersion = 21
        compileSdkVersion = 34
        targetSdkVersion = 34
        ndkVersion = "25.1.8937393"
        kotlinVersion = "1.8.0" // Make sure this matches the version you wish to use
    }
    ext.kotlin_version = "1.8.0"
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:8.4.1"
        classpath "com.google.gms:google-services:4.4.0"
        classpath "com.facebook.react:react-native-gradle-plugin:+"
    }
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'  
apply plugin: 'com.facebook.react.rootproject'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    namespace {namespace} 

    defaultConfig {
        applicationId {same as namespace}
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
    }


    buildFeatures {
        viewBinding true
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}"
    implementation project(':react-native-firebase_app')
}

gradle/wrapper/gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

已尝试无效操作

  • 删除并重装node_modules
  • 升级Gradle版本与Android Studio
  • 注释@react-native-firebase/app的build.gradle中部分代码(可完成同步但无法构建)

有效解决方案

方案1:升级@react-native-firebase/app到适配AGP 8.x的版本

当前项目使用的Android Gradle Plugin(AGP)版本为8.4.1,现有@react-native-firebase/app版本的build.gradle配置不兼容AGP 8.x的namespace设置规则。直接升级@react-native-firebase/app到支持AGP 8.x的最新版本(如v18及以上),即可解决兼容性问题。

方案2:手动修改@react-native-firebase/app的build.gradle(临时修复)

如果暂时无法升级库,可通过以下步骤调整配置:

  1. 打开node_modules/@react-native-firebase/app/android/build.gradle,删除buildscript块中的AGP依赖(库作为模块被引入时无需单独配置AGP,将使用项目的AGP版本):
// 删除这段代码
buildscript {
    if (project == rootProject) {
        repositories {
            google()
            mavenCentral()
        }

        dependencies {
            classpath("com.android.tools.build:gradle:8.1.2")
        }
    }
}
  1. 调整namespace的设置时机,将原来android块内的namespace判断代码移到android块外,确保AGP读取配置前完成设置:
// 在android块之前添加这段代码
def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger()
if (agpVersion >= 7) {
    project.android.namespace = 'io.invertase.firebase'
}

android {
    // 移除原来的if (agpVersion >=7) { namespace ... }代码
    // 保留其他原有配置
}
  1. 执行Gradle同步,重新尝试构建。

方案3:降级AGP版本至与库兼容

将项目的AGP版本降级到和@react-native-firebase/app中声明的8.1.2版本,确保版本一致:

  1. 修改项目根build.gradle中的AGP依赖版本:
classpath "com.android.tools.build:gradle:8.1.2"
  1. 修改gradle/wrapper/gradle-wrapper.properties中的Gradle版本(AGP 8.1.x对应Gradle 8.2):
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip
  1. 执行Gradle同步,重新尝试构建。

内容的提问来源于stack exchange,提问作者dachil1pil1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:34:50