Votre app fonctionne en test mais plante une fois installée ? Voici par où commencer (et pourquoi ce n'est pas là que vous croyez)
Votre app FlutterFlow fonctionne en aperçu mais affiche un écran noir une fois installée ? Pourquoi les forums ne suffisent pas, et comment lire les logs pour trouver la vraie cause.
Vous avez construit votre application. Peut-être avec FlutterFlow, peut-être avec un autre outil. Elle tourne parfaitement dans l'aperçu, vous l'avez montrée autour de vous, vous en êtes fier. Puis vous générez l'APK, vous l'installez sur un vrai téléphone pour de bon, et l'écran reste noir après le splash. Rien. Plus aucune prise.
Si vous êtes en train de vous dire « mon app marche en test mais pas en apk », vous n'êtes pas seul, et surtout : vous n'avez rien cassé. Ce décalage entre l'environnement de test et l'application réellement installée est l'un des moments les plus déroutants pour un porteur de projet non développeur. Il l'est parce que tout vous dit que ça marche, sauf la seule version qui compte, celle qui finit entre les mains de vos utilisateurs.
La bonne nouvelle, c'est qu'il existe une façon fiable de savoir d'où vient le problème. La mauvaise, c'est que ce n'est presque jamais là où l'on croit. Voyons pourquoi, et par où commencer.
Pourquoi les réponses trouvées sur les forums ne suffisent pas
Cherchez « écran noir FlutterFlow » ou « apk plante flutterflow » et vous tomberez sur des dizaines de fils : GitHub, Reddit, groupes Facebook. Les réponses ne manquent pas. Le problème, c'est qu'elles se contredisent toutes.
Sur un même symptôme, l'écran noir après le splash, vous lirez : « enlève Stripe », « désactive le RevenueCat », « vide le cache », « supprime la couleur de fond du splash screen », « désactive tes extensions Chrome », « c'est un bug côté serveur du service de test, attends que ça revienne ». Chacune de ces réponses est vraie. Chacune a résolu le problème de la personne qui l'a écrite. Et chacune a échoué pour les dix suivantes qui l'ont essayée.
C'est le piège du symptôme partagé : un même écran noir peut avoir dix causes différentes. Appliquer au hasard la solution de quelqu'un d'autre, c'est jouer à la loterie avec votre application. Dans le meilleur des cas, ça ne change rien. Dans le pire, vous modifiez une configuration qui fonctionnait, et vous ajoutez un deuxième problème au premier.
Sur l'un de ces fils, un porteur de projet a résumé l'impasse mieux que personne. Après des semaines à essayer des correctifs trouvés en ligne sans jamais comprendre son écran gris, il a fini par écrire qu'il avait décidé d'aller chercher un vrai travail et d'apprendre à coder pour de bon. Il a abandonné son app. Pas parce que le problème était insoluble, mais parce qu'il n'a jamais su ce qu'était le problème.
Voilà ce que les forums ne vous diront pas : le diagnostic précède la solution. Avant de corriger quoi que ce soit, il faut savoir ce qu'on corrige. Et pour le savoir, on ne devine pas. On va lire ce que dit la machine.
Comment savoir d'où vient vraiment le plantage ?
Quand une application plante, elle ne se tait pas. Elle écrit, en temps réel, ce qui se passe à l'intérieur : chaque erreur, chaque composant qui refuse de démarrer, la ligne exacte où tout s'arrête. Ce flux s'appelle les logs. En mode test, votre outil vous les cache pour ne pas vous encombrer. Sur l'APK installé, ils existent toujours ; il suffit d'aller les regarder.
Voici comment lire ce que dit votre téléphone au moment précis du crash. Ça prend dix minutes la première fois, et ça vous évite des semaines à deviner.
1. Activez le mode développeur sur le téléphone. Allez dans les Paramètres, section « À propos du téléphone », et tapez sept fois de suite sur « Numéro de build ». Un message vous confirmera que vous êtes désormais développeur. Rien de dangereux : vous venez juste de déverrouiller un menu caché.
2. Activez le débogage USB. Dans les Paramètres, une nouvelle entrée « Options pour les développeurs » est apparue. Ouvrez-la et activez « Débogage USB ». C'est ce qui autorise votre ordinateur à écouter ce que raconte le téléphone.
3. Branchez le téléphone à l'ordinateur avec un câble USB. Le téléphone vous demandera d'autoriser la connexion : acceptez.
4. Lancez la lecture des logs. Deux chemins, selon votre confort. Le plus visuel : ouvrez Android Studio (gratuit), onglet « Logcat », et vous verrez le flux défiler. Le plus direct : dans un terminal, tapez la commande adb logcat. Le texte se met à défiler à toute vitesse, c'est normal, votre téléphone raconte tout ce qu'il fait.
5. Reproduisez le crash et lisez. Ouvrez votre application pendant que les logs défilent. Au moment où l'écran devient noir, une salve de lignes apparaît. Ce sont elles qui comptent. Cherchez les lignes qui commencent par E/ (E pour Error) et celles qui contiennent le nom de votre application. La cause réelle est là, écrite noir sur blanc, souvent le nom d'un composant précis suivi d'un message d'erreur.
Vous n'avez pas besoin de tout comprendre. Vous avez besoin d'une seule chose : le nom du coupable. Une fois que vous savez quel composant plante, vous ne cherchez plus au hasard, vous cherchez une réponse précise à une question précise. C'est toute la différence.
Un cas réel : quand même la bonne hypothèse était fausse
Un fondateur non développeur m'a écrit dans un groupe FlutterFlow. Son app était quasi finie : elle marchait en test, mais l'APK affichait un écran noir juste après le splash et la demande d'autorisation des notifications. Sa stack : Firebase, Stripe, AdMob, Make.
Je lui ai donné la méthode ci-dessus en premier, brancher et lire les logs, parce que l'erreur exacte s'y trouve. Puis je lui ai donné ma piste prioritaire. Avec cette configuration, le suspect numéro un est presque toujours Firebase mal configuré pour la version signée de l'app : les empreintes SHA-1 et SHA-256 oubliées dans la console. C'est l'erreur la plus courante avec cette stack, je l'avais vue des dizaines de fois. J'ai aussi mentionné une troisième piste : vérifier ce que fait la première page au chargement, au cas où elle attendrait une donnée qui n'arrive jamais en production.
Deux semaines plus tard, sa réponse : « Merci pour le conseil d'Android Studio, c'était le chargement de pub qui plantait. »
Ce n'était pas Firebase. Ma piste principale, celle que mon expérience désignait avec le plus de certitude, était fausse. C'était AdMob, le composant publicitaire qui s'initialisait mal au démarrage de la version installée. Je ne l'aurais jamais deviné. Personne ne l'aurait deviné.
Ce qui a résolu son problème, ce n'est pas mon hypothèse. C'est le fait qu'il soit allé lire les logs, qui lui ont donné le vrai nom du coupable en une ligne. La méthode avait raison là où l'expert se trompait.
Même un développeur expérimenté ne devine pas
On pourrait croire que l'expérience permet de sauter cette étape, qu'un bon développeur sent d'où vient le problème. J'ai appris le contraire à mes dépens.
Sur un de mes propres projets, des notifications push refusaient de partir sur certains iPhones seulement. Tout était pourtant en place : Firebase configuré, certificats Apple valides, permissions accordées par l'utilisateur. Rien à signaler, sur le papier. J'ai passé des heures à vérifier et re-vérifier ma configuration, convaincu que l'erreur venait de moi. Elle ne venait pas de moi. C'était un bug connu du côté d'iOS, documenté nulle part de façon claire, présent depuis neuf mois.
Je n'aurais jamais trouvé en devinant. Je l'ai trouvé en allant lire, en creusant les logs et les rapports jusqu'à tomber sur la trace du problème. La leçon est la même pour vous que pour moi : l'expérience ne remplace pas le diagnostic. Elle apprend juste à ne plus perdre de temps à deviner.
Ce qu'il faut retenir et ne pas faire
Si votre application fonctionne en test mais plante une fois installée, gardez trois réflexes.
D'abord, ne touchez à rien au hasard. Chaque « correctif » appliqué sans savoir pourquoi risque de casser ce qui marchait. Un forum n'a résolu que son cas, pas forcément le vôtre.
Ensuite, méfiez-vous de la spirale de l'IA. Demander à un assistant de corriger un bug qu'il ne peut pas voir, c'est le meilleur moyen d'en créer deux autres. L'IA ne lit pas vos logs ; elle propose des hypothèses plausibles, exactement comme un forum. Sans le vrai message d'erreur, elle devine, elle aussi.
Enfin, allez lire avant de corriger. Le téléphone connaît la réponse. La seule question est de savoir si vous la lui posez, ou si vous continuez à deviner à sa place.
Ce qui plante presque toujours dans ces cas-là, ce n'est pas ce que vous voyez à l'écran, c'est une couche invisible qui s'exécute en dessous : un service publicitaire, une brique d'authentification, une donnée attendue et absente. Ce sont ces couches qu'on ne voit pas qui décident si une app tient ou s'effondre en production.
J'ai réuni les six couches invisibles les plus fréquentes, celles qui font planter une app pourtant « finie », dans un guide de 14 pages. Si votre application bloque au moment de passer entre de vraies mains, c'est par là que je vous conseille de commencer.
Questions fréquentes
Pourquoi mon app marche en test mais pas en APK ? Parce que la version de test et la version installée ne s'exécutent pas dans les mêmes conditions. L'aperçu masque certaines erreurs, utilise une configuration différente et n'active pas toujours les mêmes composants (publicité, paiement, notifications). Un composant qui fonctionne en test peut échouer dans la version signée. Pour connaître la cause exacte, il faut lire les logs de l'application installée.
Comment lire les logs d'une application Android ?
Activez le mode développeur sur le téléphone (sept tapes sur « Numéro de build »), activez le débogage USB, branchez le téléphone à l'ordinateur, puis lancez Android Studio (onglet Logcat) ou la commande adb logcat dans un terminal. Reproduisez le crash et cherchez les lignes commençant par E/ au moment où l'écran devient noir.
Un écran noir après le splash, c'est forcément un bug de FlutterFlow ? Non. Le plus souvent, c'est un composant tiers mal initialisé dans la version installée : publicité, paiement, ou une donnée attendue au chargement de la première page. FlutterFlow n'est presque jamais la cause directe ; il assemble des briques dont l'une plante au démarrage. Seuls les logs disent laquelle.
Est-ce que je peux demander à l'IA de corriger ce genre de bug ? L'IA peut aider une fois que vous connaissez le message d'erreur exact. Sans lui, elle ne fait que proposer des hypothèses, comme un forum, et corriger à l'aveugle mène souvent à empiler les problèmes. Lisez les logs d'abord, donnez le vrai message d'erreur ensuite.
Pour aller plus loin : Pourquoi votre app IA bloque avant la production et E-mails Firebase en spam : diagnostic et solution.