4
votes

Problème Flutter Firebase et Android - impossible d'initialiser. Impossible de trouver google-services.json avec les dernières instructions de migration exécutées

Je suis un développeur Flutter et depuis deux jours, j'essaie de faire fonctionner mon application pour Android . C'est une application assez volumineuse avec de nombreuses fonctionnalités différentes (principalement des cartes Google et Firebase) qui fonctionnent parfaitement sur iOS. Cependant, maintenant que j'essaie de faire fonctionner la partie Android, je ne parviens pas du tout à démarrer l'application en raison d'un problème Firebase .

FlutterFire est responsable de la plupart des packages Firebase et vient de publier quelques mises à jour . J'ai passé un certain temps à refactoriser mon projet pour me conformer à la plupart des changements de rupture. Le problème auquel je suis confronté a quelque chose à voir avec la nouvelle mise à jour. L'erreur que je reçois ne me rapproche malheureusement pas d'une solution. Je pense que cela a quelque chose à voir avec la partie Android qui ne parvient pas à trouver le google-services.json . Comme je l'ai mentionné, tout fonctionne bien sur iOS. Ma conclusion logique serait donc que le code Flutter convient également. Les problèmes de Google / StackOverflow / FlutterFire semblent tous me tromper sur des problèmes qui n'ont pas de réponse pour moi.

TL; DR Lors de la compilation sur Android, l'application Flutter ne démarre pas car Firebase ne trouve pas mon google-services.json. Voici le stacktrace:

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'
}

Jusqu'à présent, j'ai fait les choses suivantes:

  1. Suivez les instructions de migration sur https://firebase.flutter.dev/docs/migration/ .
  2. J'ai placé mon google-services.json dans android / app ainsi que android / app / src / main, android / app / src / profile et android / app / src / debug (je sais que les 3 derniers ne sont pas essentiels mais j'ai vu il a été mentionné plusieurs fois).
  3. Assurez-vous que j'appelle WidgetsFlutterBinding.ensureInitialized () avant d'appeler wait Firebase.initalizeApp () .
  4. Assurez-vous que j'appelle Firebase.initializeApp () avant d'appeler runApp () .
  5. Reconstruction du projet avec différentes versions de plugins dans mon pubspec.yaml et / ou à la fois mon application et mon app build.gradle .
  6. Je me suis abstenu plusieurs fois d'avoir jeté le bon vieux portable par la fenêtre.

Même lorsque je supprime tout mon code et que je laisse mon application avec rien de plus que le code suivant, j'obtiens toujours la même erreur.

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"

Mon app / build.gradle a la configuration suivante:

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'
}

Et les dépendances suivantes:

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
}

J'applique les plugins suivants:

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

Mon android / build.gradle doit suivre les dépendances (je les ai mises à jour vers des versions spécifiques et récentes pour tenter de résoudre ce problème sans succès):

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):

J'ai également mis à jour mon google-services.json plusieurs fois en téléchargeant la dernière version de Firebase, mais cela n'a pas non plus aidé. Je trouve bizarre de ne voir personne d'autre avec ce problème. J'espère que chacun de vous sera capable de comprendre ce qui se passe. Merci beaucoup d'avance.

Mise à jour : J'ai supprimé et ajouté quelques dépendances dans build.gradle (même si le guide de migration dit de les supprimer toutes, cela ne fonctionne pas toujours) et j'ai rétabli le projet Android en Java au lieu de Kotlin. Cela a permis de reconfigurer certains messages Firebase d'une meilleure manière. Cela semble avoir changé quelque chose mais me donne toujours une sorte d'erreur d'initialisation Firebase. [ERREUR: flutter / lib / ui / ui_dart_state.cc (166)] Exception non gérée: MissingPluginException (aucune implémentation trouvée pour la méthode Firebase # initializeCore sur le canal plugins.flutter.io/firebase_core) Je ne dormirai pas tant que je n'aurai pas résolu ce problème. ž


1 commentaires

J'ai apporté les modifications à mes fichiers Gradle comme suggéré dans la réponse de Muhammad, mais j'ai toujours eu la même erreur jusqu'à ce que je supprime et réinstallé l'application sur mon appareil. Ensuite, le problème a été résolu. Je pense que le rechargement à chaud n'installait pas les modifications apportées au gradle.


6 Réponses :


0
votes

Je vois trop de choses qui ne sont probablement pas correctes. Je ne suis pas sûr de l'étape 4 (assurez-vous d'appeler Firebase.initializeApp () avant d'appeler runApp ()), dans mon cas, j'initialise la base de feu après runapp.

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) {

Une autre chose que je vois est le lien que vous publiez, je vous recommande de le relire, à un moment donné, il disait:

Assurez-vous de ne pas importer manuellement de dépendances du SDK Firebase Android dans la section Dépendances de fichiers android / app / build.gradle {...}. par exemple, supprimez toutes les lignes similaires à: implementation 'com.google.firebase: firebase- {PRODUCT}: {VERSION}

Ce que je vois dans vos dépendances build.gradle. Votre grade est trop différent du mien, qui est plus proche de l'original de l'application de démarrage dans Android Studio.

J'espère que cela aidera un peu.


1 commentaires

Merci pour votre réponse! Parce que je vérifie la logique avant d'exécuter mon application, elle s'exécute avant runApp (). Les deux sont bien aussi longtemps que vous utilisez WidgetsFlutterBinding.ensureInitialized () dans mon cas ( stackoverflow.com/questions/63492211/… ). J'ai lu le guide plusieurs fois. J'ai ajouté ces dépendances après avoir essayé plusieurs choses, j'aurais dû le mentionner également - mon mauvais. J'ai modifié ma question avec la dernière mise à jour.



0
votes

J'ai fini par créer un nouveau projet en copiant soigneusement Firebase et plusieurs autres packages du projet d'origine. Après cela, j'ai copié chaque fichier dans lib / android avec leurs configurations respectives dans build.gradle et manifestes. Pour iOS, je viens de copier l'intégralité du projet et cela a fonctionné immédiatement.

Tout semble fonctionner maintenant dans le «nouveau» projet. Je ne sais toujours pas quel était le coupable depuis que j'ai copié le projet exact sur un nouveau. Quoi qu'il en soit, j'espère que cela aidera n'importe qui avec ce problème. J'ai perdu cinq jours là-dessus 😄, je souhaite que vous ne soyez pas la même qui que vous soyez.

👋


0 commentaires

0
votes

J'ai eu ce problème. quand j'ai ajouté le plugin apply: 'com.google.gms.google-services' dans gradle, cela a commencé à fonctionner.


0 commentaires

11
votes

Après des heures de lutte, je suis capable de trouver la solution.

  1. Tout d'abord, ajoutez le plugin 'google-services' en tant que dépendance à l'intérieur du fichier android / build.gradle:

            android {
                defaultConfig {
                    // ...
                    minSdkVersion 16
                    targetSdkVersion 28
                    multiDexEnabled true
                }
            }
    
            dependencies {
              implementation 'com.android.support:multidex:1.0.3'
            }
    
  2. Enfin, exécutez le plugin en ajoutant ce qui suit sous la ligne apply plugin: 'com.android.application', dans le fichier /android/app/build.gradle:

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

Construction pour Android # Ouvrez le fichier /android/app/build.gradle. Sous les dépendances, ajoutez le module multidex et activez-le dans defaultConfig:

           buildscript {
      dependencies {
        // ... other dependencies
        classpath 'com.google.gms:google-services:4.3.3'
      }
    }

source: https://firebase.flutter.dev/docs/installation/android/


1 commentaires

Merci beaucoup, j'ai suivi les documents et autres sources Stackoverflow, mais cela résout les problèmes.



0
votes
  1. Téléchargez le fichier google-services.json depuis Firebase
  2. ajoutez le plug-in google-services à votre fichier app/build.gradle : dependencies { classpath 'com.google.gms:google-services:4.3.4' // ... }
  3. Dans android/build.gradle ajoutez le apply plugin: 'com.google.gms.google-services' ci apply plugin: 'com.google.gms.google-services' dessus

android { //... }

Réf: https://developers.google.com/android/guides/google-services-plugin


0 commentaires

0
votes
  1. veuillez mettre à jour la dépendance du noyau de firebase_core: "0.5.2+1" vers firebase_core: "0.5.2+1" après cela, j'ai ajouté

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

    dans la méthode principale

  3. et mettez à jour tout le dans build.gaddle dans le répertoire du projet et de l'application.


0 commentaires