Desenvolvimento & Boas Práticas (Target SDK 36+)
Construa um aplicativo com arquitetura limpa, alta performance de UI (Android Vitals), suporte nativo ao Edge-to-Edge e padrões rigorosos de criptografia local via Hardware Keystore.
2.1. Target SDK 36, Edge-to-Edge & Android Vitals
O Google Play exige que novos aplicativos e atualizações sejam direcionados às versões recentes do Android (Target SDK 35/36+). Além da compilação, o algoritmo do Google Play monitora ativamente as métricas do Android Vitals (taxa de crashes e ANRs — Application Not Responding) para definir o ranqueamento orgânico na loja.
Cold Start Rápido (< 1.5s)
Evite inicializar múltiplos SDKs síncronos na thread principal (Main/UI Thread) durante a Splash Screen. Use a API SplashScreen oficial do AndroidX e adie carregamentos pesados com inicialização preguiçosa (lazy loading).
Edge-to-Edge Obrigatório
No Android 15+ (SDK 35/36), as janelas operam em tela cheia por padrão (edge-to-edge). Utilize SafeAreaView ou WindowInsetsCompat para evitar que botões inferiores fiquem sobrepostos à barra de gestos do sistema.
Dark Mode & Contraste WCAG
Garanta suporte a temas Claro e Escuro automáticos (useColorScheme()) com proporção mínima de contraste de 4.5:1 para textos normais, prevenindo reprovações em testes automatizados de acessibilidade do Pre-launch Report.
Limites do Android Vitals
Mantenha a taxa de falhas percebidas pelo usuário abaixo de 1,09% e a taxa de ANR abaixo de 0,47%. Acima desses limites, o Google Play reduz a visibilidade do app e exibe alertas na ficha da loja.
Configuração Recomendada do build.gradle (Nível do App)
android {
namespace = "br.com.fabricamanual.meuapp"
compileSdk = 36
defaultConfig {
applicationId = "br.com.fabricamanual.meuapp"
minSdk = 24 // Android 7.0+ (Cobertura > 97% dos dispositivos ativos)
targetSdk = 36 // Conformidade total com políticas Play Console 2026
versionCode = 12
versionName = "1.2.0"
}
buildTypes {
release {
isMinifyEnabled = true // Ofuscação R8 + redução de tamanho do AAB
isShrinkResources = true // Remove recursos gráficos não utilizados
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
ndk {
debugSymbolLevel = "FULL" // Gera símbolos nativos para desofuscar crashes no Play Console
}
}
}
}
2.2. Segurança, Criptografia Local & LGPD
Dados sensíveis (tokens JWT, chaves de sessão, credenciais biométricas ou dados clínicos/financeiros como nos projetos PetMed e Quantum Vault) nunca devem ser gravados em texto puro em AsyncStorage ou SharedPreferences convencional.
expo-secure-store (React Native), flutter_secure_storage (Flutter) ou Jetpack DataStore + Tink AES-256-GCM (Kotlin Nativo) para armazenar tokens de autenticação protegidos pelo chip de segurança do aparelho.
| Tipo de Dado | Armazenamento Inseguro (Evitar) | Padrão Recomendado (Segurança Play Store) |
|---|---|---|
| Tokens JWT / Refresh Token | AsyncStorage / SharedPreferences |
SecureStore / Android Keystore (AES-256-GCM) |
| Fotos e Mídia do Usuário | READ_EXTERNAL_STORAGE amplo |
Android Photo Picker (sem permissão invasiva de galeria) |
| Banco de Dados Local | SQLite sem criptografia para dados sensíveis | SQLCipher (AES-256) com chave derivada no Keystore |
| Tráfego de Rede (API) | HTTP texto claro (usesCleartextTraffic="true") |
HTTPS obrigatório (TLS 1.3) + network_security_config.xml |
-
Substituição de Permissões de Mídia pelo Photo Picker: A partir de 2025/2026, o Google Play restringe severamente
READ_MEDIA_IMAGESeREAD_MEDIA_VIDEOpara apps que precisam apenas de upload pontual (como foto de avatar ou anexo de receita). Utilize o Android Photo Picker nativo, que dispensa permissões em tempo de execução. -
Exclusão de Conta In-App e Web: Todo aplicativo que permite criação de conta deve disponibilizar um botão direto na tela de "Perfil / Configurações" para exclusão definitiva da conta e dados vinculados, além de uma URL pública acessível sem login.
2.3. Monetização & Google Play Billing Library (v8.0+)
Se o aplicativo comercializar produtos digitais, pacotes de créditos (como os planos PRO e BUSINESS do TestPool) ou assinaturas recorrentes, é estritamente obrigatório utilizar o sistema de faturamento oficial do Google Play.
acknowledgePurchase) ou consumida (consumeAsync) em até 72 horas. Caso contrário, o Google Play estorna automaticamente a compra ao usuário por considerar que o produto digital não foi entregue.
-
Validação Server-Side (RTDN): Nunca valide assinaturas apenas no cliente mobile. Configure as Real-time Developer Notifications (RTDN) via Google Cloud Pub/Sub para que seu backend valide o
purchaseTokendiretamente na APIandroidpublisher. -
Botão "Restaurar Compras": Inclua sempre uma opção visível na tela de planos para sincronizar assinaturas ativas quando o usuário trocar de aparelho ou reinstalar o aplicativo.