Desenvolvimento Android com Kotlin e Compose
Use ao construir aplicativos Android com Kotlin, Jetpack Compose, MVVM, Hilt, Room 3, DataStore, Paging 3 ou projetos multi-módulo. Dispara em solicitações para criar projetos Android, telas, ViewModels, repositórios, módulos de funcionalidade, ou perguntas sobre padrões de arquitetura Android.
Referência Rápida
| Tarefa | Arquivo de Referência |
|---|---|
| Estrutura do projeto e módulos | modularization.md |
| Camadas de arquitetura (Domínio, Dados, UI, Comum, ...) | architecture.md |
| Padrões Compose, Motion Material, animação, modificadores, estabilidade | compose-patterns.md |
| Acessibilidade, TalkBack, rótulos, regiões ativas, verificações a11y do Espresso | android-accessibility.md |
| Notificações, serviços em primeiro plano, mídia/áudio, PiP, compartilhamento | android-notifications.md |
| Sincronização de dados e padrões offline-first | android-data-sync.md |
| Temas Material 3, tokens de espaçamento, ajuste de categoria, cores dinâmicas | android-theming.md |
| Navigation3, navegação adaptativa, níveis de qualidade para telas grandes | android-navigation.md |
| Melhores práticas Kotlin, interoperabilidade com ciclo de vida de View | kotlin-patterns.md |
| Melhores práticas de Corrotinas | coroutines-patterns.md |
| Gradle, sabores de produto, BuildConfig, desempenho de build | gradle-setup.md |
| Abordagem de teste | testing.md |
| Internacionalização e localização | android-i18n.md |
| Ícones, especificações do launcher adaptativo, desenho personalizado | android-graphics.md |
| Permissões em tempo de execução | android-permissions.md |
| Padrões de delegação Kotlin | kotlin-delegation.md |
| Relatório de falhas | crashlytics.md |
| Diretrizes do StrictMode | android-strictmode.md |
| Dependências multi-módulo | dependencies.md |
| Qualidade de código (Detekt) | code-quality.md |
| Cobertura de código (JaCoCo) | android-code-coverage.md |
Segurança, Play Integrity (Standard/Classic), decodificação no servidor, requestHash/nonce, política em níveis, remediação; Gerenciador de Credenciais; verificações locais de root como complemento | android-security.md |
| Padrões de design | design-patterns.md |
| Desempenho, Play Vitals, relatórios opcionais em CI (API Play Developer Reporting), inicialização, recomposição, travamentos, bateria | android-performance.md |
| Depuração, níveis de Logcat, ANR, padrões de erro do Gradle, R8, vazamentos de memória | android-debugging.md |
| Guias de migração (XML, RxJava, Navigation, Compose, Room 2→3) | migration.md |
Árvore de Decisão do Fluxo de Trabalho
Criando um novo projeto?
→ Comece com assets/settings.gradle.kts.template para configurações e includes de módulo
→ Comece com assets/libs.versions.toml.template para o catálogo de versões
→ Copie todos os arquivos de assets/convention/ para build-logic/convention/src/main/kotlin/
→ Crie build-logic/settings.gradle.kts (veja assets/convention/QUICK_REFERENCE.md)
→ Adicione includeBuild("build-logic") ao settings.gradle.kts raiz
→ Adicione entradas de plugin ao gradle/libs.versions.toml (veja assets/convention/QUICK_REFERENCE.md)
→ Copie assets/proguard-rules.pro.template para app/proguard-rules.pro
→ Leia modularization.md para estrutura e tipos de módulo
→ Use gradle-setup.md para arquivos de build e lógica de build
Configurando arquivos de build Gradle?
→ Use gradle-setup.md para padrões de build.gradle.kts de módulo
→ Use gradle-setup.md → "Desempenho de Build" para fluxo de otimização, diagnósticos e solução de gargalos
→ Copie plugins de convenção de assets/convention/ para build-logic/ no seu projeto
→ Veja assets/convention/QUICK_REFERENCE.md para instruções de configuração e exemplos
→ Copie assets/proguard-rules.pro.template para app/proguard-rules.pro para regras do R8
Configurando qualidade de código / Detekt?
→ Use code-quality.md para configuração do plugin de convenção Detekt
→ Comece com assets/detekt.yml.template para regras e habilite regras do Compose
Adicionando ou atualizando dependências?
→ Siga dependencies.md
→ Atualize assets/libs.versions.toml.template se a dependência estiver faltando
Adicionando um novo módulo de funcionalidade? → Siga a nomenclatura de módulos em modularization.md → Implemente a Apresentação no módulo de funcionalidade → Siga o fluxo de dependências: Funcionalidade → Core/Domínio → Core/Dados
Construindo telas/componentes de UI?
→ Leia compose-patterns.md para arquitetura de tela, estado, componentes, modificadores
→ Use compose-patterns.md -> Gerenciamento de Estado -> "UX de carregamento e atualização" para layout estável durante carregamentos e atualizações (evite spinners de tela cheia que limpam o contexto)
→ Use android-theming.md para cores, tipografia e formas do Material 3
→ Sempre alinhe o código Kotlin com kotlin-patterns.md
→ Crie Tela + ViewModel + UiState no módulo de funcionalidade
→ Use componentes compartilhados de core/ui quando possível
Lidando com Estado e Eventos?
→ Use StateFlow para estado; Channel + receiveAsFlow() para comandos estritos de UI de uso único; SharedFlow para eventos multicast ou com replay (veja coroutines-patterns.md)
→ Sobreviva à morte do processo com SavedStateHandle (veja compose-patterns.md)
Configurando o tema do app (cores, tipografia, formas)?
→ Siga android-theming.md para temas do Material 3 e cores dinâmicas
→ Use funções de cores semânticas de MaterialTheme.colorScheme (nunca cores fixas); pareie cada preenchimento com seu parceiro on* - veja Regras de Pareamento de Cores
→ Declare o conjunto completo de cores M3 em Color.kt (containers de superfície, dim/bright, *Fixed/*FixedDim) para que a cor dinâmica e variantes de contraste permaneçam consistentes - veja Referência Completa de Funções de Cor e Hierarquia de Containers de Superfície
→ Expresse profundidade primeiro através do tom do container, use sombras apenas para componentes que flutuam sobre conteúdo arbitrário - veja Elevação Tonal vs Sombras
→ Use outline para bordas interativas/foco, outlineVariant para divisores decorativos - veja outline vs outlineVariant
→ Suporte temas claro/escuro com alternância de preferência do usuário
→ Habilite cor dinâmica (Material You) para API 31+, harmonize cores de marca/extendidas contra primary - veja Harmonização de Cores de Marca
→ Honre o controle deslizante de contraste do sistema no Android 14+ (API 34) fornecendo variantes de esquema de Contraste Médio/Alto e lendo UiModeManager.getContrast() - veja Preferência de Contraste do Usuário
→ Para substituições de paleta específicas de região (escopos destrutivos, barras de ferramentas sobre mídia), use um MaterialTheme aninhado com colorScheme.copy(...) - veja Temas com Escopo
→ Escolha Card / OutlinedCard / ElevatedCard pela separação de superfície, não pela importância, e sobrescreva formas no nível do token - veja Variantes de Card e Padrões de Forma de Componente
Escrevendo qualquer código Kotlin? → Sempre siga kotlin-patterns.md → Garanta que as práticas estejam alinhadas com architecture.md, modularization.md e compose-patterns.md
Configurando as camadas de dados/domínio?
→ Leia architecture.md
→ Hilt @Binds, escopos e antipadrões de DI: architecture.md -> Camada de Domínio -> "Configuração de Injeção de Dependência"
→ Crie interfaces de Repositório em core/domain
→ Crie implementações em core/data usando Room 3/Retrofit/DataStore
→ Use DataStore para pares chave-valor simples, Room 3 para dados relacionais complexos (DAOs suspend / Flow, SQLiteDriver)
Implementando Listas e Rolagem?
→ Use LazyColumn/LazyRow com chaves estáveis e contentType (veja compose-patterns.md)
→ Para grandes conjuntos de dados, use Paging 3 (veja compose-patterns.md -> "Paging 3")
Lidando com Navegação? → Use Navigation3 para navegação adaptativa (veja android-navigation.md) → Evite antipadrões de navegação (veja android-navigation.md -> "Antipadrões de Navegação")
Otimizando Desempenho?
→ Siga a Lista de Verificação de Desempenho em android-performance.md
→ Se o usuário solicitar vitals do Play Console automatizados (CI/Slack, sem interface do Play Console), use android-performance.md → Opcional: observabilidade de Play Vitals (API Play Developer Reporting)
→ Use BasicTextField2 para entrada de texto de alta frequência
Testando? → Leia testing.md para filosofia e padrões de teste → Use Turbine para testar emissões de Flow (veja testing.md -> "Testando Emissões de Flow com Turbine") → Crie Reposit