Anti-patterns code mobile Android : ce qu'il NE FAUT PAS faire
Cette liste compile les erreurs critiques à éviter lors du développement d'apps Android. Les violer mène à crashes, vulnérabilités sécurité, ANR, fuites mémoire, et rejet Play Store.
Threading et cycle de vie
- Ne bloquez PAS le thread principal (UI). Réseau, BD, I/O fichiers, calcul lourd → utilisez Coroutines (Dispatchers.IO), RxJava, ExecutorService, ou WorkManager.
- Ne passez PAS d'objets Context entre framework et composants AndroidX Architecture (ViewModel, LiveData). Utilisez Contexte Application ou AndroidViewModel.
Sécurité et vie privée
- N'accédez PAS aux données sensibles (contacts, localisation, micro) sans permission runtime et justification claire utilisateur.
- N'exposez PAS ContentProvider aux autres apps sauf requis explicitement (android:exported="false" par défaut ; true seulement avec permissions granulaires).
- N'accordez PAS plus de permissions que nécessaire. Suivez principe moindre privilège ; supprimez
inutilisés. - N'autorisez PAS utilisateurs à changer portée permissions accordées dynamiquement de façon à casser hypothèses.
- Ne stockez PAS PII ou secrets en clair (SharedPreferences, fichiers, logs). Utilisez EncryptedSharedPreferences, Keystore, Jetpack Security.
- Ne comptez PAS sur SharedPreferences par défaut pour données sensibles.
- Ne stockez PAS mots de passe, tokens, clés API dans code, assets, ou git. Utilisez enclave sécurisée, échange token backend, ou Android Keystore.
- N'incluez PAS clés API dans commits git. Utilisez propriétés gradle (local.properties) + plugin secrets, ou injection secrets CI.
ContentProvider et données
- N'utilisez PAS d'instances statiques dans ContentProvider ; c'est un singleton géré par système.
- Ne rendez PAS ContentProvider inscriptible par défaut. Exigez signature/permission.
- N'autorisez PAS apps à se connecter via Internet utilisateur sans consentement explicite utilisateur et config sécurité réseau.
- Ne stockez PAS fichiers temporaires dans répertoire racine app. Utilisez cacheDir ou externalCacheDir ; ils sont auto-nettoyés.
Architecture et APIs
- N'utilisez PAS la réflexion pour appeler APIs framework/cachées. Elles changent entre versions ; apps cassent. Utilisez SDK public ou équivalents Jetpack.
- Ne codez PAS en dur URLs, noms utilisateur, mots de passe, secrets. Utilisez BuildConfig, fichiers ressources, ou livraison config sécurisée.
- N'utilisez PAS plusieurs permissions simultanément sans flux consentement utilisateur clair (dialogue permissions runtime par groupe).
Pourquoi cela importe
Ces patterns causent :
- ANRs (thread principal bloqué).
- Violations sécurité (clés fuitées, providers exposés).
- Crashes sur MAJ OS (réflexion, APIs cachées).
- Violations politiques (rejet Play Store pour permissions larges, trafic clair).
- Cauchemars maintenance (configs codées en dur, état statique).
Suivez les Core App Quality Guidelines et Security Best Practices Android. Lancez lint, detekt, et vérifications OWASP MASTG en CI.
