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(临时修复)
如果暂时无法升级库,可通过以下步骤调整配置:
- 打开
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") } } }
- 调整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 ... }代码 // 保留其他原有配置 }
- 执行Gradle同步,重新尝试构建。
方案3:降级AGP版本至与库兼容
将项目的AGP版本降级到和@react-native-firebase/app中声明的8.1.2版本,确保版本一致:
- 修改项目根build.gradle中的AGP依赖版本:
classpath "com.android.tools.build:gradle:8.1.2"
- 修改gradle/wrapper/gradle-wrapper.properties中的Gradle版本(AGP 8.1.x对应Gradle 8.2):
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip
- 执行Gradle同步,重新尝试构建。
内容的提问来源于stack exchange,提问作者dachil1pil1
相关产品推荐
相关产品推荐

