Módulo 02 de 12

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.

Hardware-Backed Keystore: Utilize sempre 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_IMAGES e READ_MEDIA_VIDEO para 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.

Ciclo de Vida de Compras (Acknowledge): Toda transação concluída no Google Play Billing deve ser confirmada (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 purchaseToken diretamente na API androidpublisher.
  • 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.