添加Firebase BoM至顶级build.gradle报错:找不到implementation()方法
问题
修改项目顶级build.gradle添加Firebase BoM后,抛出错误:
Could not find method implementation() for arguments [DefaultExternalModuleDependency{group='com.google.firebase', name='firebase-bom', version='31.3.0', configuration='default'}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
相关配置文件
修改前的顶级build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.4.2' apply false id 'com.android.library' version '7.4.2' apply false }
修改后的顶级build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.4.2' apply false id 'com.android.library' version '7.4.2' apply false } dependencies { // Import the Firebase BoM implementation platform('com.google.firebase:firebase-bom:31.3.0') // TODO: Add the dependencies for Firebase products you want to use // When using the BoM, don't specify versions in Firebase dependencies }
app模块的build.gradle
plugins { id 'com.android.application' } android { namespace 'com.example.delivery1' compileSdk 33 defaultConfig { applicationId "com.example.delivery1" minSdk 25 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildFeatures { viewBinding true } } dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' implementation 'androidx.navigation:navigation-fragment:2.5.3' implementation 'androidx.navigation:navigation-ui:2.5.3' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) classpath 'com.google.gms:google-services:4.3.15' }
解决办法
1. 修正顶级build.gradle
顶级配置文件仅负责声明全局插件,不能使用implementation关键字,需将google-services插件添加到plugins块中:
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.4.2' apply false id 'com.android.library' version '7.4.2' apply false // 添加google-services插件,apply false表示不在全局应用,仅让子模块可引用 id 'com.google.gms.google-services' version '4.3.15' apply false }
2. 调整app模块的build.gradle
- 将Firebase BoM的配置移到app模块的
dependencies块中,因为implementation是模块级依赖的专属关键字 - 在app模块的
plugins块中添加google-services插件 - 删除app模块
dependencies里错误的classpath 'com.google.gms:google-services:4.3.15',classpath仅能在顶级配置中声明插件依赖
修改后的app模块代码:
plugins { id 'com.android.application' // 应用google-services插件 id 'com.google.gms.google-services' } android { namespace 'com.example.delivery1' compileSdk 33 defaultConfig { applicationId "com.example.delivery1" minSdk 25 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildFeatures { viewBinding true } } dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' implementation 'androidx.navigation:navigation-fragment:2.5.3' implementation 'androidx.navigation:navigation-ui:2.5.3' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) // 在此添加Firebase BoM implementation platform('com.google.firebase:firebase-bom:31.3.0') }
错误原因
- 顶级
build.gradle属于项目级配置,没有Android插件提供的implementation方法,该关键字仅能在具体模块(如app)的dependencies块中使用 - app模块的
dependencies块不支持classpath,这个语法仅用于在顶级配置中声明插件依赖
内容的提问来源于stack exchange,提问作者Baalback
相关产品推荐
相关产品推荐

