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

Flutter接入Firebase后无法在物理真机启动应用问题求助

Flutter接入Firebase后assembleDebug任务静默终止问题排查

问题背景

  • 作为Flutter与Firebase开发新手,接入Firebase前可正常在物理真机运行Flutter应用完成UI测试;接入Firebase后,按原有方式启动应用时,gradle task 'assemble debug'任务执行不到1分钟就直接终止,无任何反馈或错误信息输出。
  • 已参照Google服务插件官方配置指引完成Gradle配置,涉及两个核心配置文件:
    1. 项目根目录build.gradle配置如下:
    buildscript {
        ext.kotlin_version = '1.6.10'
        repositories {
            google()
            mavenCentral()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:7.1.1'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
            classpath 'com.google.gms:google-services:4.3.12'
        }
    }
    
    allprojects {
        repositories {
            google()
            mavenCentral()
        }
    }
    
    rootProject.buildDir = '../build'
    subprojects {
        project.buildDir = "${rootProject.buildDir}/${project.name}"
    }
    subprojects {
        project.evaluationDependsOn(':app')
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    
    1. app目录下build.gradle配置如下:
    def localProperties = new Properties()
    def localPropertiesFile = rootProject.file('local.properties')
    if (localPropertiesFile.exists()) {
        localPropertiesFile.withReader('UTF-8') { reader ->
            localProperties.load(reader)
        }
    }
    
    def flutterRoot = localProperties.getProperty('flutter.sdk')
    if (flutterRoot == null) {
        throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
    }
    
    def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
    if (flutterVersionCode == null) {
        flutterVersionCode = '1'
    }
    
    def flutterVersionName = localProperties.getProperty('flutter.versionName')
    if (flutterVersionName == null) {
        flutterVersionName = '1.0'
    }
    
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
    
    android {
        compileSdkVersion flutter.compileSdkVersion
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        kotlinOptions {
            jvmTarget = '1.8'
        }
    
        sourceSets {
            main.java.srcDirs += 'src/main/kotlin'
        }
    
        defaultConfig {
            applicationId "com.sabra.cadre_permanence_marjane"
            minSdkVersion flutter.minSdkVersion
            targetSdkVersion flutter.targetSdkVersion
            versionCode flutterVersionCode.toInteger()
            versionName flutterVersionName
        }
    
        buildTypes {
            release {
                signingConfig signingConfigs.debug
            }
        }
    }
    
    flutter {
        source '../..'
    }
    
    dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    }
    
  • 曾尝试手动修改google-services.json文件中client数组各成员的package_name字段,使其与应用包名匹配,需要确认该操作是否存在问题。
  • 已排查确认Flutter可正常识别已连接的物理设备。

解决方案

1. 手动修改google-services.json的操作完全错误

google-services.json是Firebase控制台根据注册应用时填写的包名、签名信息自动生成的校验配置文件,手动修改文件内任何字段都会导致配置校验失败、加载异常,直接触发构建流程静默崩溃。
正确操作是:回到Firebase控制台,确认注册的Android应用包名和项目中applicationId字段值com.sabra.cadre_permanence_marjane完全一致,重新下载未经过任何修改的google-services.json文件,放到android/app目录下,不要放在其他路径。

2. 修正Gradle插件应用顺序

当前app目录下的Gradle插件声明顺序错误,这是接入google-services后构建无报错终止的最常见诱因。com.google.gms.google-services插件必须在所有其他Android相关插件之后声明,当前配置把它放在了最开头,直接调整插件声明块顺序即可:

// 调整后的插件顺序
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
// 注意:google-services插件必须放在最后一行
apply plugin: 'com.google.gms.google-services'

3. 补充最低版本兼容配置

Flutter默认生成的项目minSdkVersion为16,而Firebase核心库要求最低minSdkVersion为21,需要在app目录build.gradle的defaultConfig块中手动指定:

defaultConfig {
  applicationId "com.sabra.cadre_permanence_marjane"
  minSdkVersion 21 // 替换原来的flutter.minSdkVersion
  targetSdkVersion flutter.targetSdkVersion
  versionCode flutterVersionCode.toInteger()
  versionName flutterVersionName
}

4. 清理缓存重新构建

完成上述修改后,在项目根目录执行以下命令清理旧构建缓存,重新拉取依赖运行:

flutter clean
flutter pub get
flutter run

5. 仍失败时的错误排查方式

如果执行完上述操作后构建还是无输出终止,进入android目录执行带完整日志的构建命令,即可看到被Flutter构建流程吞掉的具体错误信息:

cd android
./gradlew assembleDebug --stacktrace --info

常见的剩余诱因包括:本地网络无法拉取Google Maven仓库依赖、磁盘剩余空间不足导致Gradle进程被系统强制杀死。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:51:19