kDebugMode étant un constante, le compilateur peut supprimer du code: Tree Shaking. Il faut donc l'utiliser pour réduire la taille de la compilation release.
J'ai vérifié en recherchant des chaînes de caractères dans app-release.apk/lib/x86_64/libapp.so : elles ne sont pas présentent si encapsulées dans un if( kDebugMode ){}
Pour compiler une release un peu plus légère
$ flutter build apk 23M app-release.apk # installed: 43.19 MB $ flutter build apk --split-debug-info=/tmp 22M app-release.apk # installed: 42.17 MB $ flutter build appbundle 42M app-release.aab $ flutter build appbundle --split-debug-info=/tmp 40M app-release.aab
On ne peut pas avoir de secret stocké dans l'App, c'est certain. 😉
Par contre on peut le cacher pour le rendre plus difficile à découvrir.
flutter build apk \ --release \ --obfuscate \ --split-debug-info=./debug_info \ --dart-define=API_URL=https://myapi.com \ --dart-define=API_KEY=super_secret_key
const apiUrl = String.fromEnvironment('API_URL'); const apiKey = String.fromEnvironment('API_KEY');
Mais dans la vraie vie on préférera mettre les secrets dans un fichier, en oubliant pas d'informer git de l'ignorer.
flutter build apk \ --release \ --obfuscate \ --split-debug-info=./debug_info \ --dart-define-from-file=config.prod.json
Et le fichier config.prod.json
{ "API_URL": "https://myapi.com", "API_KEY": "super_secret_key", "FEATURE_X": "true", "CLIENT_ID": "xyz-123" }
Les notifications locales sont basées sur un tâche de fond périodique (Workmanager).
| Device | width | height |
|---|---|---|
| iPhone SE | 375.00 | 667.0 |
| Galaxy A41 | 411.43 | 866.29 |
| AVD small phone | 360.0 | 592.00 |
| AVD medium phone | 411.43 | 866.29 |
| AVD Pixel 8 Pro | 448.00 | 949.33 |
| AVD Pixel Tablet | 1280.00 | 800.00 |
Le conteneur du ListView doit pouvoir géré que la hauteur n'est pas connue à priori, voir le_rendu_plante_sans_rien_dans_la_debug_console.
Différence entre Future et Microtask : Mastering Flutter Microtasks for Optimal Performance. En conclusion, dans l' Event loop la Microtask est prioritaire par rapport à la Future.
Pour notamment:
Voir aussi
Les “testeurs externes” voient les nouvelles versions après plusieurs heures/jours, tant que le build est “En attente de vérification” il ne les voient pas … 😩
How to use remote access to Codemagic virtual MacOS build machine, la VM reste allumée 20 minutes. 🚀 500 minutes gratuites. 🍀
clients VNC : Remmina
3 méthodes pour Android emulator access to local server. Le plus simple est d'utiliser https://10.0.2.2:3000.
Pour avoir un network_security_config.xml personnalisé:
Dans AndroidManifest.xml
<manifest> <application ... android:networkSecurityConfig="@xml/network_security_config"> </application> </manifest>
Ensuite dans android/app/src/main/res/xml/network_security_config.xml, par exemple:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> <domain-config cleartextTrafficPermitted="true"> <!-- for android emulator the 10.0.2.2 is our localhost 127.0.0.1 --> <domain includeSubdomains="true">10.0.2.2</domain> </domain-config> </network-security-config>
https://codewithandrea.com/articles/flutter-deep-links/
List de tous les deep links (prefered apps) du système (émulateur) :
adb shell dumpsys package domain-preferred-apps
If you are using VS Code, open a terminal inside your project and then:
cd android folder./gradlew signingReport