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:
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. ž
6 Réponses :
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.
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.
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.
👋
J'ai eu ce problème. quand j'ai ajouté le plugin apply: 'com.google.gms.google-services' dans gradle, cela a commencé à fonctionner.
Après des heures de lutte, je suis capable de trouver la solution.
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' }
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/
Merci beaucoup, j'ai suivi les documents et autres sources Stackoverflow, mais cela résout les problèmes.
google-services.json
depuis Firebaseapp/build.gradle
: dependencies { classpath 'com.google.gms:google-services:4.3.4' // ... }
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
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é
WidgetsFlutterBinding.ensureInitialized (); Firebase.initializeApp (); runApp (MaterialApp (debugShowCheckedModeBanner: false, home: MyApp ()));
dans la méthode principale
et mettez à jour tout le dans build.gaddle dans le répertoire du projet et de l'application.
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.