Programação Por Equipe DevBras

Capa do artigo: Depurar app no celular Android sem deixar a porta aberta depois

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.

  1. 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.
  2. Em Opções do desenvolvedor, ligue Depuração USB.
  3. Conecte o cabo. No computador, rode adb devices. O aparelho aparece como unauthorized até você aceitar o diálogo no celular.
  4. No diálogo, confira se é o seu computador. Só marque "Sempre permitir" se a máquina for sua e de mais ninguém.
  5. Rode de novo adb devices. Agora o estado deve ser device.
  6. 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

  1. 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.
  2. 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.
  3. Desligue Depuração USB e Depuração por Wi-Fi.
  4. 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 devices mostra o aparelho como device, e só depois de você aceitar a chave.
  • O log foi capturado com adb logcat -c antes 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?

Avalie este artigo

Referência: https://learn.microsoft.com/pt-br/dotnet/maui/android/device/setup