Flutter Firebase和Android问题-无法初始化找不到执行了最新迁移说明的google-services.json 只需使缓存无效并重新启动 Android Studio

问题描述

我是 Flutter 的开发人员,在过去的两天里,我一直在尝试让我的应用在 Android 上运行。这是一个很大的应用程序,具有很多不同的功能(大多数是Google地图和Firebase),可以在iOS上正常运行。但是,由于某些 Firebase 问题,现在我试图使Android部分正常工作,但我似乎根本无法启动该应用。

FlutterFire 负责大多数Firebase程序包,他们刚刚发布了几个更新。我花了很多时间重构我的项目以适应大多数重大更改。我面临的问题与新更新有关。不幸的是,我遇到的错误并没有使我更接近解决方案。我认为这与Android部分无法找到 google-services.json 有关。正如我提到的,iOS上一切正常。因此,我的逻辑结论是Flutter代码也很好。 Google / StackOverflow / FlutterFire问题似乎都将我误导了对我没有答案的问题。

TL; DR 编译为Android时,Flutter App无法启动,因为Firebase找不到我的google-services.json。这是堆栈跟踪:

E/flutter (15568): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: [core/not-initialized] Firebase has not been correctly initialized. Have you added the "google-services.json" file to the project? 
E/flutter (15568):     
E/flutter (15568):     View the Android Installation documentation for more information: https://firebaseextended.github.io/flutterfire/docs/installation/android
E/flutter (15568):     
E/flutter (15568): #0      MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:86:9)
E/flutter (15568): <asynchronous suspension>
E/flutter (15568): #1      Firebase.initializeApp (package:firebase_core/src/firebase.dart:43:25)
E/flutter (15568): #2      mainCommon (package:userapp/main/main_common.dart:31:18)
E/flutter (15568): #3      main (package:userapp/main/main_dev.dart:6:9)
E/flutter (15568): #4      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:233:25)
E/flutter (15568): #5      _rootRun (dart:async/zone.dart:1190:13)
E/flutter (15568): #6      _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (15568): #7      _runZoned (dart:async/zone.dart:1630:10)
E/flutter (15568): #8      runZonedGuarded (dart:async/zone.dart:1618:12)
E/flutter (15568): #9      _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:225:5)
E/flutter (15568): #10     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
E/flutter (15568): #11     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
E/flutter (15568):

到目前为止,我已经做了以下事情:

  1. 遵循https://firebase.flutter.dev/docs/migration/上的迁移说明
  2. 将我的 google-services.json放在android / app 以及android / app / src / main,android / app / src / profile和android / app / src / debug中(我知道后三个不是必不可少的,但我已经看到过几次了。)
  3. 请确保在调用await Firebase.initalizeApp()之前先调用 WidgetsFlutterBinding.ensureInitialized()
  4. 请确保在致电 runApp()之前先致电 Firebase.initializeApp()
  5. 在我的 pubspec.yaml 和/或我的 application app 构建中使用不同版本的插件重建了项目。 gradle
  6. 把好旧的笔记本电脑丢到窗外使我无数次。

即使我删除了所有代码,并让我的应用只剩下以下代码,我仍然遇到相同的错误。

WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());

我的 app / build.gradle 具有以下配置:

compileSdkVersion 29

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

lintOptions {
    disable 'InvalidPackage'
}

defaultConfig {
    applicationId "stackoverflow.example.package"
    minSdkVersion 21
    targetSdkVersion 29
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}

以及以下依赖项:

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.firebase:firebase-messaging:20.2.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.android.support:multidex:2.0.1'
    implementation 'com.google.firebase:firebase-perf:19.0.6'
}

我应用了以下插件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.firebase-perf'
apply plugin: 'com.google.firebase.crashlytics'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

我的 android / build.gradle 必须遵循以下依赖关系(我已将它们更新为特定版本和最新版本,以解决此问题,但未成功):

dependencies {
    classpath 'com.android.tools.build:gradle:3.5.4'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61"
    classpath 'com.google.gms:google-services:4.3.3'
    classpath 'com.google.firebase:perf-plugin:1.3.1'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.1'
}

我还多次更新了google-services.json,从Firebase下载了最新版本,但这也无济于事。我发现没有其他人遇到这个问题很奇怪。我希望你们中的任何一个都能弄清楚发生了什么。提前谢谢。

更新我在build.gradle中删除并添加了一些依赖项(即使迁移指南说要全部删除,但这并不总是可行)并恢复了android项目返回Java而不是Kotlin。这样可以更好地重新配置一些Firebase消息传递。这似乎已经改变了一些东西,但仍然给了我一些Firebase初始化错误。 [错误:flutter / lib / ui / ui_dart_state.cc(166)]未处理的异常:MissingPluginException(在通道plugins.flutter.io/firebase_core上未找到方法Firebase#initializeCore的实现) 我要等到解决这个问题才能睡觉。

解决方法

经过数小时的努力,我能够找出解决方案。

  1. 首先,将“ google-services”插件作为依赖项添加到 android / build.gradle文件:

               buildscript {
          dependencies {
            // ... other dependencies
            classpath 'com.google.gms:google-services:4.3.3'
          }
        }
    
  2. 最后,通过在/android/app/build.gradle文件中的应用插件行“ com.android.application”下面添加以下内容来执行插件:

    apply plugin: 'com.google.gms.google-services'
    

Building for Android# 打开/android/app/build.gradle文件。在依赖项下添加multidex模块,并在defaultConfig中启用它:

        android {
            defaultConfig {
                // ...
                minSdkVersion 16
                targetSdkVersion 28
                multiDexEnabled true
            }
        }

        dependencies {
          implementation 'com.android.support:multidex:1.0.3'
        }

来源:https://firebase.flutter.dev/docs/installation/android/

,

就个人而言,@MuhammadAmjad 的回答显示我在应用程序级别的 graddle 文件中缺少一行。具体来说,我错过了以下内容:

apply plugin: 'com.google.gms.google-services'

我不确定这是怎么发生的,但 Google 用于安装 Firebase 的另一个页面缺少此详细信息。我建议遇到此问题的人尽快查看这是否是罪魁祸首,以防他们与我有同样的问题,这将为他们节省大量时间。再次感谢@MuhammadAmjad

,

我按照这些步骤(Brian 和 Muhammed 上面说的)并执行

flutter build apk --debug
flutter build apk --profile
flutter build apk --release

然后,运行应用程序!它对我有用!

,

我看到太多可能不正确的事情。 我不确定第4步(请确保在调用runApp()之前先调用Firebase.initializeApp()),在这种情况下,我会在runapp之后初始化firebase。

void main() {
  initializeDateFormatting().then((_) => runApp(MyApp()));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      // Initialize FlutterFire
      future: Firebase.initializeApp(),builder: (context,snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {

我看到的另一件事是您发布的链接,建议您重新阅读一次,在某些方面它说:

确保您在android / app / build.gradle文件依赖项{...}部分中手动导入任何Firebase Android SDK依赖项。 例如删除类似于以下内容的所有行:实现'com.google.firebase:firebase- {PRODUCT}:{VERSION}

我在您的build.gradle依赖项中看到了这一点。 您的选择与我的完全不同,最接近Android Studio中启动应用程序中的原始设置。

希望能有所帮助。

,

我最终创建了一个新项目,仔细复制了原始项目中的firebase和多个其他软件包。之后,我将每个文件复制到lib / android中,并将它们各自的配置复制到build.gradle和manifests中。对于iOS,我只是复制了整个项目,并且可以立即工作。

现在一切似乎都在“新”项目中工作了。自从我将确切的项目复制到新项目之后,仍然完全不确定罪魁祸首是什么。无论如何希望这对解决此问题的任何人都有帮助。我在这个?上浪费了五天,无论您是谁,我都希望自己不一样。

?

,

我有那个问题。当我在gradle中添加应用插件:“ com.google.gms.google-services”时,它开始工作。

,
  1. 从firebase下载google-services.json文件
  2. 将google-services插件添加到您的app/build.gradle文件中: dependencies { classpath 'com.google.gms:google-services:4.3.4' // ... }
  3. android/build.gradle中的上方添加apply plugin: 'com.google.gms.google-services'

android { //... }

参考:https://developers.google.com/android/guides/google-services-plugin

,
  1. 请将Firebase核心依赖项更新为firebase_core: "0.5.2+1" 之后,我添加了

  2. WidgetsFlutterBinding.ensureInitialized(); Firebase.initializeApp(); runApp(MaterialApp(debugShowCheckedModeBanner:false,home:MyApp()));

    在主要方法中

  3. 并更新项目和应用目录中的所有build.gaddle。

,

只需使缓存无效并重新启动 Android Studio

我没有提供同步 gradle 文件的可能性(如 Google 文档所指定),所以我怀疑这与应用程序在某种程度上使用旧的 gradle 文件有关。

我使用 File->Invalidate Cache and Restart 解决了这个问题。

根据经验,在 IT 领域,重新启动可以解决 50% 的问题。

,

我也在解决这个问题,我遵循了布赖恩的解决方案,但它对我不起作用。然后我只是将我的 Gradle 包装器版本从 6.8.3 降级到 6.5,然后我的应用程序开始正常工作。

所以我的建议只是遵循 Brian 的回答,如果它对您不起作用,请尝试降级或升级您的 Gradle 版本。

,

添加依赖

类路径 'com.google.gms:google-services:4.3.8'

project/build.gradle

然后添加应用插件

应用插件:'com.google.gms.google-services'

您可以将其粘贴在底部或与其他应用插件一起粘贴。

project/android/app/build.gradle

这个对我有用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...