Anti-pattern del Codice Android Mobile: Cosa NON Fare
Questo elenco raccoglie errori critici da evitare durante lo sviluppo di app Android. Violarli porta a crash, vulnerabilità di sicurezza, ANR, perdite di memoria e rifiuto da parte del Play Store.
Threading e Ciclo di Vita
- Non bloccare il thread principale (UI). Rete, DB, I/O file, calcoli pesanti → usa Coroutine (Dispatchers.IO), RxJava, ExecutorService o WorkManager.
- Non passare oggetti Context tra framework e AndroidX Architecture Components (ViewModel, LiveData). Usa Application context o AndroidViewModel.
Sicurezza e Privacy
- Non accedere a dati sensibili (contatti, posizione, microfono) senza permesso di runtime e chiara giustificazione all'utente.
- Non esporre ContentProvider ad altre app a meno che non sia espressamente richiesto (android:exported="false" di default; imposta true solo con permessi granulari).
- Non concedere più permessi del necessario. Segui il principio del minimo privilegio; rimuovi
inutilizzati. - Non permettere agli utenti di modificare dinamicamente lo scopo dei permessi concessi in modi che infrangono le assunzioni.
- Non memorizzare PII o segreti in chiaro (SharedPreferences, file, log). Usa EncryptedSharedPreferences, Keystore, Jetpack Security.
- Non fare affidamento su SharedPreferences predefiniti per dati sensibili.
- Non memorizzare password, token, chiavi API in codice, asset o git. Usa secure enclave, scambio token backend o Android Keystore.
- Non includere chiavi API nei commit git. Usa gradle properties (local.properties) + secrets plugin, o iniezione segreti CI.
ContentProvider e Dati
- Non usare istanze statiche in ContentProvider; è un singleton gestito dal sistema.
- Non rendere ContentProvider scrivibile di default. Richiedi firma/permesso.
- Non permettere alle app di connettersi tramite internet dell'utente senza consenso esplicito dell'utente e configurazione sicurezza di rete.
- Non memorizzare file temporanei nella directory root dell'app. Usa cacheDir o externalCacheDir; vengono cancellati automaticamente.
Architettura e API
- Non usare reflection per chiamare API nascoste/framework. Cambiano tra le versioni; le app si rompono. Usa SDK pubblico o equivalenti Jetpack.
- Non hardcodare URL, nomi utente, password, segreti. Usa BuildConfig, file risorsa o consegna configurazione sicura.
- Non usare più permessi contemporaneamente senza un flusso di consenso utente chiaro (dialogo permessi di runtime per gruppo).
Perché è Importante
Questi pattern causano:
- ANR (thread principale bloccato).
- Violazioni di sicurezza (chiavi trapelate, provider esposti).
- Crash agli aggiornamenti OS (reflection, API nascoste).
- Violazioni di policy (rifiuto Play Store per permessi ampi, traffico in chiaro).
- Incubi di manutenzione (config hardcoded, stato statico).
Segui le Core App Quality Guidelines di Android e le Security Best Practices. Esegui lint, detekt e controlli OWASP MASTG in CI.