Depurar app no celular Android sem deixar a porta aberta depois
Ligue a depuração USB, autorize só o seu computador, capture o log certo com adb e desligue tudo ao terminar. O aparelho real mostra o que o emulador esconde.
O app passou em todos os testes no emulador e, no celular da cliente, fecha ao abrir a câmera. O emulador não tem a câmera de verdade, não tem a economia de bateria agressiva do fabricante e não tem a tela pequena com fonte grande. A resposta curta: ligue a depuração USB no aparelho só durante a sessão de teste, autorize apenas o seu computador, capture o log com adb e desligue a depuração quando guardar o telefone.
O erro clássico não é ligar a depuração. É esquecer ligada no celular pessoal, aquele com banco, e-mail e WhatsApp, autorizado para "sempre" em qualquer notebook que já encostou nele. A ferramenta é de bancada, não de uso diário.
O que a depuração USB realmente abre
Com a depuração ligada, o Android aceita comandos do adb (Android Debug Bridge) vindos de um computador autorizado. Esse computador consegue instalar e remover apps, abrir um shell no aparelho, ler o log do sistema inteiro, tirar captura de tela e conceder permissões a apps. É exatamente o que você precisa para depurar, e exatamente o que você não quer disponível para qualquer máquina.
A proteção é a autorização por chave. Na primeira conexão, o computador apresenta uma chave RSA e o celular pergunta se confia nela, mostrando a impressão digital. Se você marcar "Sempre permitir neste computador", aquela chave fica guardada no aparelho. A partir daí, aquele computador entra sem perguntar, mesmo meses depois, mesmo se estiver infectado.
O log também é um ponto sensível. O logcat mostra mensagens de todos os apps, não só do seu. Se algum app, inclusive o seu em modo debug, registra token ou dado pessoal, ele aparece ali para quem estiver conectado. Por isso o tema conversa com log que não carrega senha nem token.
Como preparar o aparelho para a sessão de teste
Vamos usar um caso que atravessa o texto: o app br.com.lojasol.app, feito em .NET MAUI, fecha ao tirar foto do comprovante num Android de entrada. No emulador, funciona.
- No celular, abra Configurações > Sobre o telefone e toque sete vezes em Número da versão (o nome e o caminho variam por fabricante). Isso libera as Opções do desenvolvedor.
- Em Opções do desenvolvedor, ligue Depuração USB.
- Conecte o cabo. No computador, rode
adb devices. O aparelho aparece comounauthorizedaté você aceitar o diálogo no celular. - No diálogo, confira se é o seu computador. Só marque "Sempre permitir" se a máquina for sua e de mais ninguém.
- Rode de novo
adb devices. Agora o estado deve serdevice. - Instale e rode o build de debug. Em MAUI,
dotnet build -t:Run -f net9.0-android(troque pelo framework de destino do seu projeto) compila, instala e abre no aparelho conectado.
> adb devices
List of devices attached
R58M1234ABC unauthorized
> adb devices
List of devices attached
R58M1234ABC device
Sem cabo também dá. No Android 11 ou superior, a Depuração por Wi-Fi fica nas mesmas Opções do desenvolvedor e usa um código de pareamento. Você roda adb pair com o IP e a porta mostrados na tela de pareamento e depois adb connect com o IP e a porta da tela principal. Use isso só em rede que você controla, nunca no Wi-Fi do café.
Capturar o log que interessa
O logcat sem filtro despeja milhares de linhas por minuto. O truque é limpar antes, reproduzir o problema e filtrar pelo processo do seu app.
# limpa o buffer antes de reproduzir
adb logcat -c
# descobre o PID do app (abra o app antes)
adb shell pidof br.com.lojasol.app
# filtra pelo PID retornado e salva em arquivo
adb logcat --pid=12345 > lojasol-camera.log
# erros de qualquer processo, útil quando o app morre e o PID some
adb logcat *:E
No nosso caso, o log mostrou a exceção logo depois de pedir a câmera: o app tentava gravar a foto numa pasta que só existia em versões antigas do Android. No emulador, com outra versão do sistema, o caminho existia. Esse é o tipo de bug que só o aparelho real conta.
Testar permissão e bateria de propósito
Três situações quebram apps em celular de verdade e quase nunca no emulador: permissão negada, processo morto pela economia de bateria e tela com fonte aumentada. Você pode provocar as duas primeiras pelo adb.
# revoga a permissão de câmera para ver como o app reage
adb shell pm revoke br.com.lojasol.app android.permission.CAMERA
# simula o aparelho desconectado da tomada
adb shell dumpsys battery unplug
# força o modo de repouso profundo (Doze)
adb shell dumpsys deviceidle force-idle
# devolve a bateria ao estado real
adb shell dumpsys battery reset
Se o app trava ao perder a permissão em vez de explicar o que falta, o bug é seu, não do aparelho. Se uma tarefa some no Doze, leia por que o serviço em segundo plano para de rodar antes de tentar contornar o sistema.
Como encerrar a sessão sem deixar rastro
- Desinstale o build de debug se o aparelho não for de teste:
adb uninstall br.com.lojasol.app. Build de debug costuma ter log mais verboso e configuração de desenvolvimento. - Nas Opções do desenvolvedor, toque em Revogar autorizações de depuração USB. Isso apaga as chaves de todos os computadores que você autorizou.
- Desligue Depuração USB e Depuração por Wi-Fi.
- Se o aparelho é pessoal, desligue as Opções do desenvolvedor inteiras. Alguns apps de banco reclamam ou se recusam a abrir com elas ligadas, e isso é um aviso, não implicância.
O ideal é ter um aparelho de teste separado, barato, sem contas pessoais, com o Android mais comum entre seus usuários. Nele a depuração pode ficar ligada, porque não há nada de valor para proteger além do próprio app.
Quando o bug está no celular do cliente
Não peça para o cliente ligar a depuração USB e mandar o celular, nem para instalar ferramenta de acesso remoto. Você estaria pedindo para ele abrir o aparelho inteiro. Peça o modelo, a versão do Android, o passo a passo e a hora exata do erro.
Para ter o log sem a bancada, o app precisa registrar falhas por conta própria: um serviço de relatório de falhas, como Crashlytics ou Sentry, ou um arquivo de log do próprio app que a pessoa envia por um botão "Enviar diagnóstico". Esse log deve conter o que ajuda a reproduzir, nunca senha, token ou documento. Sobre onde esse arquivo pode ficar, veja onde o app Android guarda dados.
Erros comuns
- Marcar "Sempre permitir" em computador compartilhado: qualquer pessoa ou malware naquela máquina ganha shell no seu celular sempre que o cabo encostar.
- Deixar a depuração ligada no celular pessoal: a próxima autorização vira uma decisão tomada às pressas, num diálogo que você aceita sem ler.
- Ler o logcat sem filtro e concluir pelo primeiro erro vermelho: o erro pode ser de outro app, e você perde horas no lugar errado.
- Usar depuração por Wi-Fi em rede pública: o pareamento existe, mas você está expondo um serviço de administração numa rede que não controla.
- Testar só com todas as permissões concedidas: o usuário real nega a câmera, e o app fecha em vez de explicar.
- Pedir ao cliente que ligue a depuração: você transfere o risco para quem não sabe avaliá-lo e ainda não resolve o problema de reproduzir o caso.
Checklist
adb devicesmostra o aparelho comodevice, e só depois de você aceitar a chave.- O log foi capturado com
adb logcat -cantes e filtro por PID depois. - O app foi testado com a permissão principal revogada.
- O app foi testado com a bateria simulada fora da tomada e em Doze.
- Ao terminar, as autorizações de depuração foram revogadas.
- Depuração USB e por Wi-Fi estão desligadas no aparelho pessoal.
- Existe um caminho para o cliente enviar diagnóstico sem ligar a depuração.
Pegue o celular que está no seu bolso agora e abra as Opções do desenvolvedor. A depuração USB está ligada, e quantos computadores ainda têm autorização para entrar nele sem perguntar?
Referência: https://learn.microsoft.com/pt-br/dotnet/maui/android/device/setup