Esta lista compila erros críticos a evitar ao desenvolver apps Android. Violar estes leva a crashes, vulnerabilidades segurança, ANRs, memory leaks, e rejeição Play Store.
Threading e Ciclo de Vida
- Não bloqueie a thread principal (UI). Rede, DB, I/O arquivo, computação pesada → use Coroutines (Dispatchers.IO), RxJava, ExecutorService, ou WorkManager.
- Não passe objetos Context entre framework e AndroidX Architecture Components (ViewModel, LiveData). Use Application context ou AndroidViewModel.
Segurança e Privacidade
- Não acesse dados sensíveis (contatos, localização, microfone) sem permissão runtime e rationale claro para usuário.
- Não exponha ContentProvider a outros apps a menos que explicitamente requerido (android:exported="false" por default; defina true apenas com permissões granulares).
- Não conceda mais permissões que necessário. Siga princípio menor privilégio; remova não usados.
- Não permita usuários alterarem escopo de permissões concedidas dinamicamente de formas que quebram suposições.
- Não armazene PII ou segredos em cleartext (SharedPreferences, arquivos, logs). Use EncryptedSharedPreferences, Keystore, Jetpack Security.
- Não confie em SharedPreferences padrão para dados sensíveis.
- Não armazene senhas, tokens, API keys no código, assets, ou git. Use secure enclave, troca token backend, ou Android Keystore.
- Não inclua API keys em commits git. Use gradle properties (local.properties) + secrets plugin, ou injeção segredos CI.
ContentProvider e Dados
- Não use instâncias estáticas em ContentProvider; é singleton gerenciado pelo sistema.
- Não torne ContentProvider gravável por default. Exija signature/permission.
- Não permita apps conectarem via internet do usuário sem consentimento explícito do usuário e network security config.
- Não armazene arquivos temporários no diretório raiz do app. Use cacheDir ou externalCacheDir; são auto-limpos.
Arquitetura e APIs
- Não use reflection para chamar APIs hidden/framework. Mudam entre versões; apps quebram. Use SDK público ou equivalentes Jetpack.
- Não hardcode URLs, usernames, passwords, segredos. Use BuildConfig, arquivos resources, ou delivery config seguro.
- Não use múltiplas permissões simultaneamente sem fluxo claro consentimento usuário (dialog runtime permissions por grupo).
Por Que Isso Importa
Estes padrões causam:
- ANRs (thread principal bloqueada).
- Violações segurança (keys vazadas, providers expostos).
- Crashes em updates OS (reflection, APIs hidden).
- Violações política (rejeição Play Store por permissões amplas, tráfego cleartext).
- Pesadelos manutenção (configs hardcoded, estado estático).
Siga Core App Quality Guidelines e Security Best Practices Android. Rode lint, detekt, e checagens OWASP MASTG no CI.