Conhecendo comandos ADB
Olá QAs, tudo massa? Vamos ao nosso próximo tópico e vamos de participação especial.
Tema de hoje: Conhecendo comandos ADB
Participação: Gutemberg Ferreira
Bio: www.linkedin.com/in/gutembergbritoferreira
Após a instalação e configuração do ambiente de desenvolvimento Android utilizando os links oficiais disponibilizados pela Google (Android Studio, Sdk Android e Commandline Tools) é possível utilizar algumas ferramentas que lhe ajudarão no desenvolvimento de aplicativos. A ferramenta em questão desse artigo é o ADB ou Android Debug Bridge, que funciona através de comandos executados em um terminal e permite que seja realizada a comunicação entre o computador e o dispositivo, seja ele real (ex.: smartphone) ou emulado, e essa comunicação pode ocorrer através cabo USB, Wi-Fi e Conexão Ethernet. É importante salientar: para que a comunicação ocorra com um dispositivo real é necessário que o mesmo possua o “Modo desenvolvedor” e “Depuração USB” ativos respectivamente. Não é uma configuração difícil de ser ativada e é possível encontrar vários tutoriais de como fazer o procedimento.
Deixando de lado a parte técnica de como instalar e configurar o Android Studio, e puxando a sardinha para o lado de Qualidade de Software, essa ferramenta se torna um verdadeiro canivete suíço nas mãos de um QA e ajuda muito nas tarefas diárias de quem testa aplicações Android, como por exemplo na coleta de logs de aplicações, instalação e remoção de aplicativos, coleta de informações dos aplicativos instalados, envio e coleta de arquivos diversos, gravar um vídeo ou realizar a captura da tela (printscreen), além de outras tarefas. Vamos listar abaixo, os comandos mais utilizados diariamente e como a ferramenta pode ajudar. Todos os comandos listados, além de outros, podem ser melhor estudados através da documentação disponibilizada no link: https://developer.android.com/studio/command-line/adb.html .
COMANDOS
- adb connect device_ip:port
Primeiramente, para realizar a comunicação com dispositivos reais através de uma conexão Ethernet ou Wi-Fi é necessário realizar esse comando para que seja possível utilizar os demais comandos citados a seguir. Onde adb connect são comandos padrões da ferramenta, device_ip é o ip do dispositivo dentro da rede na qual ele está conectado e port é a porta de comunicação, geralmente já pré configurado nos dispositivos com o valor 5555, não sendo necessário passar esse parâmetro.
- adb devices -l
Comando utilizado para saber quais dispositivos estão conectados ao servidor ADB. Como resposta ao comando é exibida uma lista onde consta o número de série do dispositivo, o dispositivo em questão e o estado da conexão (possuindo estados como offline, device e no-permission).
- adb kill-server e adb start-server
São comandos utilizados caso ocorra algum problema com a comunicação entre o dispositivo e o computador, sendo utilizado primeiro o comando adb kill-server para que o processo do adb seja encerrado e as conexões estabelecidas sejam forçadas a se encerrarem, e logo após o comando adb start-server para que a o serviço seja iniciado novamente e a conexão seja estabelecida.
- adb install .apk
Comando utilizado para realizar a instalação de um aplicativo através do seu arquivo de instalação .apk, é um comando muito útil pois não necessita de interação com o dispositivo, e como muitas das vezes (senão todas rs) os aplicativos desenvolvidos são disponibilizados através de uma outra plataforma sem ser o Google Play (Ex: Appcenter, email, pendrive, um local na intranet da empresa), então é necessário copiar esse aplicativo para o dispositivo e então abrir o gerenciador de arquivos e iniciar o processo de instalação (vários passos e muita paciência), já com esse comando, basta passar o local onde o apk se encontra e aguardar a finalização do apk.
- adb logcat
“O Logcat é uma ferramenta de linha de comando que despeja um registro de mensagens do sistema, incluindo stack traces, quando o dispositivo gera um erro e mensagens que você escreveu no app com a classe Log.” Como é citada na documentação, com esse comando é possível realizar a leitura das mensagens do sistema, mensagens de log, requisições sendo feitas ao ao realizar determinada ação e a captura de erros específicos(FATAL EXCEPTION, NULLPOINTEREXCEPTION, FATAL ERROR) dentro da aplicação ajudando o desenvolvedor a encontrar um caminho para resolução do problema.
Exemplo de erro FATAL EXCEPTION em uma aplicação:
18745–18745/com.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app, PID: 18745
java.lang.NullPointerException
at com.appFunction(PayViewModel.kt:83)
at com.appRequest(PayViewModel.kt:73)
at com.app.onRequest(Pay.kt:54)
at com.app.onRequest(Pay.kt:24)
- adb pull remote local e adb push local remote
Comandos utilizados para realizar transferências de arquivos entre o dispositivo e o computador. Para copiar um arquivo do dispositivo para o computador é usado o comando adb pull remote local, onde remote é o local onde se encontra o arquivo ou pasta no dispositivo a ser copiada, e local é o diretório onde será realizado a cópia no computador.
Ex.: adb pull /sdcard/foo.txt foo.txt
Para realizar a ação inversa, copiar um arquivo ou pasta do computador para o dispositivo usa-se o comando adb push local remote
Ex.: adb push foo.txt /sdcard/foo.txt
adb shell
Com esse comando é possível iniciar o shell do sistema operacional e realizar comandos do dispositivo. Como são várias opções de comandos e cada uma tem um cenário específico a ser usada, trago as que mais ajudam nas tarefas de testes:
- adb shell pm list packages
Exibe uma lista com todos os pacotes instalados no dispositivo, ajuda a identificar o nome correto dos pacotes. Ex: com.app4point.app
- adb shell dumpsys window windows | grep -E ‘mCurrentFocus’
Comando usado para listar o nome do pacote da aplicação que estiver rodando em primeiro plano.
- adb uninstall package
Usado para desinstalar aplicativos através do nome do pacote.
- adb shell screencap filename
Comando usado para realizar uma captura da tela do dispositivo. Onde filename seria o local onde arquivo será salvo no dispositivo.
Ex.: adb shell screencap /sdcard/screen.png
- adb shell screenrecord filename
Comando usado para gravar a tela do dispositivo em um arquivo MPEG-4. A gravação pode ser interrompida através do comando Control+C do teclado, tem um limite padrão de 3 minutos de gravação e também aceita um valor de limite passado através de parâmetro — time-limit.
Ex.: adb shell screenrecord /sdcard/demo.mp4
Fim da linha?
Com certeza NÃO! O ADB é apenas uma das ferramentas disponibilizadas pelo SDK, e os comandos citados não são apenas esses, cada comando especificado na documentação tem um cenário que pode ser usado e vai depender também de um pouco de conhecimento técnico sobre comandos linux ( pois o android é um sistema operacional que roda em cima do kernel do linux), ainda mais para combinação de comandos shell, praticar esses comandos é fundamental para um bom entendimento, então tente executá-los e veja o que acontece, afinal “o preço da perfeição é a prática constante” (Andrew Carnegie).
Bônus
- Scrcpy
A ferramenta scrcpy fornece a exibição e controle da tela do dispositivo conectado (espelhamento), funciona em windows, linux e mac e pode auxiliar também na gravação de vídeos para coleta de evidências, controlar as interações com o sistema através do mouse, controlar a orientação e tamanho da tela, além de outros comandos disponíveis na documentação.
Agradeço a oportunidade, fiquem com Deus, e em tempos de pandemia, cuidem da sua e da saúde de sua família.
Este post é apenas um pedacinho da Área de Qualidade de Software, busque, qualifique-se e lembre sempre: a base em Teste de Software te levará a lugares que jamais imaginou.
Obrigado e até a próxima ;)