📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.
v1.0 — Android Nativo, Kotlin, Jetpack Compose Declarativo, Navigation Compose, BiometricPrompt e Android Keystore de Hardware
Série Prática Android Clássico — Projeto 11 de 21
- P10: Arena Social com Firebase Suite
- ➡️ P11 (este): Guilda dos Heróis com Navigation & Biometria
- P12: Batcomputer com Injeção Hilt & Sensores
- P13: TARDIS Panel com DataStore Preferences
- P14: Portais Dimensionais com Notificações Push
O projeto Guilda dos Heróis une a modernidade visual do Jetpack Compose à segurança biométrica de nível bancário no Android. A aplicação utiliza o Navigation Compose para estruturar um grafo de navegação modular entre Lista de Heróis, Ficha Detalhada e a cobiçada “Sala dos Tesouros”. O acesso a essa área restrita exige validação biométrica rigorosa via BiometricPrompt com fallback para credenciais do dispositivo, integrada a chaves criptográficas geradas no hardware seguro Android Keystore.
Todos os composables, gráficos de navegação e serviços de segurança estão contidos na subpasta canônica mobile-android-kotlin/:
catalogo_projetos/android_p11_herois_biometria/
├── assets/
│ ├── mockup_guilda_fluxo.svg
│ ├── screenshot_01_lista_herois.svg
│ ├── screenshot_02_detalhe_heroi.svg
│ ├── screenshot_03_biometria_prompt.svg
│ └── screenshot_04_sala_tesouros.svg
├── mobile-android-kotlin/
│ ├── app/
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/br/com/curso/guildaherois/
│ │ │ │ ├── security/
│ │ │ │ │ └── BiometriaManager.kt
│ │ │ │ ├── ui/
│ │ │ │ │ └── NavGraph.kt
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ └── build.gradle
│ ├── gradle/
│ ├── build.gradle
│ ├── gradlew
│ ├── settings.gradle
│ └── README.md
└── index.md
| ID | Persona | Narrativa da Funcionalidade | Critério de Aceitação Principal | Prioridade |
|---|---|---|---|---|
| US-01 | Jogador / Líder de Guilda | Quero navegar pela lista de heróis lendários com animação de transição suave. | Navegação declarativa estruturada via rotas do Navigation Compose. | Alta |
| US-02 | Jogador / Líder de Guilda | Quero acessar a Sala dos Tesouros autenticando com minha impressão digital ou Face Unlock. | Abertura do diálogo nativo BiometricPrompt em menos de 500ms. |
Alta |
| US-03 | Jogador / Líder de Guilda | Quero poder digitar o PIN do aparelho caso a leitura biométrica falhe ou não esteja disponível. | Suporte ao autenticador BIOMETRIC_STRONG ou DEVICE_CREDENTIAL. |
Alta |
| US-04 | Oficial de Segurança | Quero que nenhuma chave mestra de desbloqueio fique armazenada em texto plano. | Uso do Android Keystore Provider gerando chaves no enclave criptográfico. | Média |
| US-05 | Desenvolvedor Mobile | Quero que a rota da Sala dos Tesouros seja inacessível via deep link sem a autenticação prévia. | Proteção de rota orientada a guardas de estado antes da composição de tela. | Baixa |
NavHost) com rotas tipadas para Lista, Detalhe e Sala dos Tesouros.BiometricManager.canAuthenticate().BiometricPrompt.PromptInfo com título, subtítulo e cancelamento.onAuthenticationSucceeded.NavController).flowchart TD
Leader([fa:fa-user Líder de Guilda])
Bio[(fa:fa-fingerprint Sensor Biométrico)]
Vault[(fa:fa-gem Sala dos Tesouros)]
subgraph AppGuilda ["🏰 Guilda dos Heróis (mobile-android-kotlin)"]
UC01["Explorar Lista de Heróis"]
UC02["Solicitar Acesso ao Cofre"]
UC03["Disparar BiometricPrompt"]
UC04["Validar Impressão Digital"]
UC05["Liberar Sala dos Tesouros"]
end
Leader --> UC01
Leader --> UC02
UC02 --> UC03
UC03 --> Bio
Bio --> UC04
UC04 -->|Sucesso| UC05
UC05 --> Vault
| ID Requisito | História de Usuário | Artefato de Código | Teste de Aceitação |
|---|---|---|---|
| RF-01 | US-01 | mobile-android-kotlin/app/.../NavGraph.kt |
testNavGraphRouteDestinations() |
| RF-02 | US-02 | mobile-android-kotlin/app/.../BiometriaManager.kt |
testCanAuthenticateHardwareCheck() |
| RF-03 | US-02, US-03 | mobile-android-kotlin/app/.../BiometriaManager.kt |
testPromptInfoConfiguration() |
| RF-04 | US-02, US-05 | mobile-android-kotlin/app/.../MainActivity.kt |
testTreasuryAccessRequiresAuth() |
| RF-05 | US-04 | mobile-android-kotlin/app/.../BiometriaManager.kt |
testKeystoreAes256Encryption() |
BiometriaManager.kt)ℹ️ O trecho de código que ficava aqui não correspondia ao código do projeto e foi retirado. Consulte os arquivos em
mobile-android-kotlin.
cd catalogo_projetos/android_p11_herois_biometria/mobile-android-kotlin
./gradlew installDebug
| Checkpoint | Meta Técnica | Critério de Aceite | Status |
|---|---|---|---|
| CP-01 | Navigation Compose | Grafo de navegação funcional com rotas desacopladas | PASS ✅ |
| CP-02 | Disponibilidade Biometria | BiometricManager identificando suporte do hardware |
PASS ✅ |
| CP-03 | Callback de Autenticação | Desbloqueio da tela apenas após sinal positivo do sensor | PASS ✅ |
| CP-04 | Fallback de Senha | PIN do sistema operacional habilitado como alternativa | PASS ✅ |
| CP-05 | Suíte de Testes Automatizados | Testes de unidade e UI Compose aprovados com 100% de sucesso | PASS ✅ |