Conhecendo comandos ADB
Tags: testing, braziliandevs, beginners, testdev
Published: 2021-05-18 19:35:18

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)
```

Continuando...
```
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.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wyjlejvinjrf5on9mieo.PNG)

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 ;)

Referências
* Android Studio: https://developer.android.com/studio?hl=pt-br
* ADB : https://developer.android.com/studio/command-line/adb.html
* Logcat: https://developer.android.com/studio/command-line/logcat
* Scrcpy: https://github.com/Genymobile/scrcpy