Olá, Hackernoon! Meu nome é Alexander Karpenko e trabalho como engenheiro de controle de qualidade na . Eu preparei este artigo para especialistas iniciantes em controle de qualidade. Abaixo, mostrarei como usar o (ADB) em testes de aplicativos móveis e por que ele é necessário em primeiro lugar. inDrive Android Debug Bridge Imagino que você já tenha conhecimento básico sobre fundamentos de teste, então vou pular o processo de preparação e configuração de projetos. Os recursos do ADB estão em constante expansão, mas vou compartilhar algumas técnicas valiosas que irão melhorar seu fluxo de trabalho diário. Como minha história é sobre testes de aplicativos móveis, vou me concentrar no macOS, que permite que você trabalhe de maneira eficaz com todas as plataformas móveis populares. Para outros sistemas operacionais, os exemplos podem ser um pouco diferentes, mas espero que os usuários do Windows não usem isso contra mim. Para começar, vamos tocar nos comandos mais básicos para garantir que os pontos posteriores sejam apresentados em uma sequência lógica. Exibindo uma lista de dispositivos conectados e conectando-se ao dispositivo Normalmente, trabalhamos com um dispositivo, mas às vezes vários dispositivos estão conectados, por exemplo, via TCP/IP. Nesse caso, temos que especificar manualmente o dispositivo no qual queremos executar o comando. Exibir a lista de todos os dispositivos conectados para obter um identificador — exibe a lista de dispositivos conectados (usar a opção abre uma lista estendida de propriedades). Isso é útil se vários dispositivos estiverem conectados e não for imediatamente claro qual deles precisamos. adb devices -l Para informar ao ADB qual dispositivo visar, o número de série do dispositivo deve ser especificado após a opção : -s , onde é o número de série do dispositivo da lista e é o comando a ser executado no dispositivo. adb -s <serial_number> <command> <serial_number> <command> Por exemplo, instalar um aplicativo em um dispositivo específico da lista: adb -s 32312b96 install user/download/app.apk Outro cenário frequente é quando a operação envolve simultaneamente um dispositivo real e um emulador, por exemplo, para as diferentes funções de executor/originador. Nesse caso, os dispositivos são facilmente distinguíveis não por seu número de série, mas com base nas opções após o comando adb. Exemplo: —d —e — o comando será executado no dispositivo real, com a opção no emulador. adb —d install user/download/app.apk —е Também podemos nos conectar ao dispositivo por TCP/IP quando ele usa a mesma rede Wi-Fi. Para fazer isso, conecte o dispositivo ao PC com um cabo e altere o modo de operação do dispositivo de USB para TCP/IP usando o comando: adb tcpip 5555 Determine o endereço IP do dispositivo por qualquer método disponível Por exemplo, através das configurações do telefone em Informações Gerais ou com o comando: adb shell ifconfig wlan0 Se o seu dispositivo já estiver desconectado do PC neste momento, certifique-se de especificar adicionalmente o S/N do dispositivo. Em seguida, nos conectamos a ele: adb connect ip_address:5555 O dispositivo pode ser desabilitado com o comando: adb disconnect ip_address:5555 — para desabilitar todos os nossos dispositivos TCP/IP. adb disconnect Para retornar ao modo USB, use o comando: (minúsculas são importantes). adb usb Instalar e desinstalar o aplicativo e localizar o pacote no dispositivo O aplicativo é instalado usando o comando: , onde é o caminho absoluto para nosso arquivo de aplicativo APK. adb install <apk_path> <apk_path> Aqui estão algumas opções úteis após o comando de instalação que são frequentemente usadas: — reinstala com uma versão rebaixada. Caso contrário, haverá uma falha (erro) ). —d [INSTALL_FAILED_VERSION_DOWNGRADE] — reinstala o aplicativo com os dados salvos. —r — concede todas as permissões especificadas no manifesto do aplicativo durante o processo de instalação. —g Por exemplo, um aplicativo instalado com esta opção não solicitará que você permita o acesso à geolocalização ou espaço de armazenamento para baixar fotos. O aplicativo é desinstalado com base no nome do pacote. Para fazer isso, você precisa saber como o aplicativo está registrado no sistema. Use o Shell e o Gerenciador de Pacotes (pm). Execute o seguinte comando para exibir a lista de todos os aplicativos instalados: adb shell pm list packages A lista pode ser filtrada pelo nome do aplicativo. Você precisará disso se a lista for muito grande, mas sabemos qual palavra está contida no nome do pacote: adb shell pm list packages | grep com.myApp Você também pode enviar para um arquivo separado e encontrar o pacote necessário lá: adb shell pm list packages > /Users/username/packages.txt Agora que sabemos como descobrir o nome do pacote do aplicativo, vamos voltar a como removê-lo do dispositivo. Isso pode ser feito usando o comando: adb uninstall com.myApp — exclui o aplicativo, mas salva os dados e os arquivos de cache. adb uninstall -k com.myApp Vou apresentar separadamente um comando que muitas vezes pode ser útil: — limpa o cache e os dados do aplicativo. adb shell pm clear com.myApp Baixando o arquivo APK do dispositivo Acho que é uma situação rara de se encontrar. Mas isso pode ser útil para alguém, assim como já foi para mim. Todos os aplicativos instalados armazenam seus arquivos APK na pasta /data/app. Como você sabe o nome do pacote, pode encontrar o local onde o aplicativo está instalado e baixar seu APK de lá. Para fazer isso, execute o seguinte comando: — exibe o diretório de instalação do aplicativo. adb shell pm path com.myApp Isso pode não parecer tão apresentável: package:/data/app/~~YcTsnr19yQR6ENa0q2EMag==/com.myApp—IHasf91SDB0erQLagc8j0Q==/base.apk Mas é exatamente assim que precisamos que esse caminho pareça. Vamos avançar um pouco e ver como podemos copiar o arquivo que precisamos para o PC a partir do telefone. Isso pode ser feito usando o comando: , onde é a saída do nosso comando anterior, é o caminho no PC para onde você deseja copiar nosso arquivo. adb pull <crazyPath> /Users/username/ <crazyPath> /Users/username/ Campos de texto Vamos falar brevemente sobre a verificação de campos de texto. Por exemplo, você deve verificar o limite do número máximo de caracteres que podem ser inseridos em um campo de texto. Se você usar um único dispositivo, diferentes conjuntos de dados transferidos podem ser armazenados no telefone ou na nuvem. No entanto, se o teste tiver que ser feito em dispositivos diferentes, os dados do teste podem ser armazenados no PC e transferidos para os dispositivos por meio dos seguintes comandos: adb shell input text <text> Exemplo: — a string "test test" será inserida. Substitua os espaços pelos caracteres especiais , caso contrário, apenas a parte anterior ao espaço será enviada ao dispositivo. Se usarmos caracteres especiais como no texto que está sendo transmitido, eles devem ser marcados inserindo uma barra invertida ( ) na frente deles. adb shell input text test%stest %s !@# \ Por exemplo, o comando: exibirá na tela adb shell input text test\!\@\#\$%stest “test!@#$ test” (ADB não funciona com caracteres cirílicos e gera um erro NullPointerException). O conteúdo de uma área de transferência pode ser transferido desta forma: adb shell input text $(pbpaste) Lembre-se de que alguns caracteres podem não ser transmitidos conforme aparecem no PC. O problema pode ser resolvido usando um editor de texto streaming (sed). Aqui está um exemplo de um comando estendido onde substituímos todos os espaços no buffer pelos caracteres especiais necessários para garantir que o texto seja transferido para o dispositivo da maneira correta: adb shell input text $(pbpaste | sed -e 's/ /\%s/g') é o texto contido no buffer. pbpaste A —permite que você execute os comandos necessários para editar o texto. ”—e” é o modelo (padrão) a ser usado. “s/take this/change_it_to/option” é o sinalizador para substituir todas as correspondências de um modelo específico, sem exceção. /g Links profundos Lembre-se de que é melhor quando o teste é feito em um ambiente o mais próximo possível da vida real, mas é útil saber que essa opção também está disponível. Essa estratégia ajudará você a verificar os links profundos para as telas necessárias, quando várias telas forem usadas, ou se tivermos problemas com a infraestrutura e nenhuma notificação push chegar, ou se nenhuma delas chegou ainda, mas você precisa verificar como o aplicativo se comporta. Você também pode verificar se o aplicativo funciona corretamente e não trava se um link profundo inválido aparecer no alerta de notificação por push. Ou ao lidar com uma situação em que seguimos um link profundo para uma tela que não existe mais, ou cujo status mudou, ou se não deveríamos ter acesso a essa tela em primeiro lugar, porque o alerta de envio foi no notificações por um longo tempo. Pode haver muitas situações como esta. No Shell ADB, podemos usar o Activity Manager (AM) para executar comandos. Iniciamos nossa atividade e enviamos o deep link que queremos verificar. O deep link geralmente contém o caractere “&”, que separa as telas. Portanto, ao abrir através de um terminal, uma barra invertida (\) deve ser inserida na frente dele. adb shell am start -W -a android.intent.action.VIEW -d “myApp://open/client/trip\&last_trip=test” com.myApp — chama o Activity Manager. am — aguardando o download antes de executar um comando. W — determina qual ação deve ser tomada. Neste caso, é . a action.View — dados necessários para a execução. Nesse caso, estamos falando do deep link em si e depois do aplicativo que deve ser usado para abri-lo. d Pode ser necessário reinserir as aspas manualmente ou substituí-las por aspas simples ao transferir o comando para o terminal. Se houver um erro de sintaxe, você poderá receber uma mensagem apropriada. Criando capturas de tela e gravando vídeos da tela do dispositivo Use este comando para tirar uma captura de tela: adb shell screencap -p <device_path/screenshot_name.png> Exemplo: — faz uma captura de tela e salva um arquivo chamado no dispositivo na pasta . adb shell screencap -p /sdcard/screencap.png screencap.png /sdcard/screencap.png Você pode salvar a captura de tela em seu computador da seguinte maneira: — por padrão, o arquivo é copiado para o diretório do usuário atual, ou seja, . adb pull /sdcard/screencap.png /Users/username/screencap.png Ou você pode executar o comando inteiro de uma só vez: adb shell screencap -p /sdcard/screencap.png && adb pull /sdcard/screencap.png Nas versões mais recentes do ADB, o seguinte comando pode ser usado para obter uma captura de tela: — o arquivo de captura de tela também aparecerá no diretório do usuário atual no PC. adb exec—out screencap —p > screen.png O caminho padrão pode ser alterado manualmente sendo adicionado ao final do comando: — e a captura de tela aparecerá na pasta . adb exec—out screencap -p > downloads/test/screen.png /Users/username/downloads/test/screen.png Se estiver interessado, você também pode automatizar um pouco esse processo adicionando um alias a . No macOS, você pode usar o Automator Service para criar e configurar teclas de atalho. bash_profile Use este comando para gravar um vídeo: . adb shell screenrecord device_path Exemplo: — use este comando para iniciar a gravação da tela do dispositivo com base nas configurações padrão por três minutos e salve o resultado no arquivo no dispositivo. adb shell screenrecord /sdcard/screenrecord.mp4 /sdcard/screenrecord.mp4 Você pode especificar manualmente o tempo de gravação usando o interruptor (em segundos, mas a duração da gravação ainda é limitada a 180 segundos). —time—limit time A gravação pode ser interrompida antes do tempo pressionando CTRL + C O arquivo também pode ser copiado usando o comando pull, de maneira semelhante ao procedimento de captura de tela. Você também pode verificar os recursos adicionais desse utilitário usando a opção . Aliás, é capaz de alterar a resolução de gravação e taxa de bits, bem como adicionar dados adicionais para o relatório de bug. --help É útil usar a opção , que adiciona informações sobre o sistema usado para a gravação como o primeiro quadro do vídeo. -bugreport Agora que abordamos como baixar algum conteúdo do dispositivo, vamos nos concentrar um pouco em como fazer upload de algo para ele. Abrimos no nosso PC, ajustamos o formato e o conteúdo, fizemos o download para o nosso telefone e verificamos se o aplicativo responde corretamente a formatos desconhecidos e limites de tamanho excessivo. Para fazer upload de um arquivo para o seu telefone a partir do seu PC, você pode usar este comando: adb push /Users/username/file <device_path> Vamos executar o comando: — isso copiará nosso arquivo para o cartão SD do telefone. adb push /Users/username/screen.png sdcard screen.png Verificando se o estado do aplicativo foi restaurado após sua exclusão pelo sistema Outro exemplo de experiência diz respeito a verificar se o estado do aplicativo foi restaurado após sua exclusão pelo sistema. Recolher o aplicativo, encerrar o processo - esta ação simula a situação em que o sistema interrompe o processo porque não há memória suficiente disponível: adb shell am kill com.myApp Execute-o novamente e verifique se tudo está funcionando bem. Nos deparamos com este cenário: um usuário minimiza um aplicativo enquanto está em uma determinada tela. Depois de um tempo, o sistema desacelera o processo e armazena em cache seu estado. Quando o usuário tenta expandir o aplicativo, ele falha. Isso acontece quando os dados do cache são acessados, pois os fragmentos estão restaurando sua pilha e seu estado, mas o cache já está vazio. Infelizmente, esse bug passou despercebido durante a fase de testes, pois não o havíamos encontrado antes, e acabou entrando em produção. Agora que você sabe que é possível, pode garantir que não repetirá nossos erros. Histórico É uma boa ideia verificar os logs ao tentar descobrir o que causou a falha de um aplicativo. Se você deseja salvar o conteúdo do buffer de log atual, isso pode ser feito usando o seguinte comando: — exibe logs em tempo real. adb logcat — exibe informações de log no momento em que o comando é executado, sem adicionar eventos reais no dispositivo. Também é possível enviar o log para um arquivo separado usando o comando: (o arquivo é criado no diretório do usuário atual). adb logcat —d adb logcat —d > file.log E o comando irá gravar o log diretamente no arquivo, adicionando todos os eventos reais no dispositivo. adb logcat >> file.log Existem vários níveis em ordem crescente de prioridade: V — Verbose, D — Debug, I — Info, W — Warn, E — Error, F — Fatal, S — Silent, por exemplo: — produzirá logs com erros e um nível superior. adb logcat '*:E' Agora vamos nos deter brevemente na formatação e filtros de saída. Você pode alterar o formato da saída para o console usando a opção -v, por exemplo: — emite logs sequencialmente registrando pontos de tempo. adb logcat -v time — exibe cada nível de logs em uma cor diferente (o que é útil durante a leitura). adb logcat -v color — exibe a prioridade do processo, tag e PID. adb logcat -v brief Cada mensagem de log possui um tag e sua respectiva prioridade. Você pode usá-los para reduzir a quantidade de saída para o console: — exibirá os eventos analíticos que enviamos por meio do serviço swrve. O parâmetro indica que a saída de log está limitada à expressão de filtro que especificamos explicitamente. adb logcat SwrveSDK:I '*:S' *:S (-s) E como sempre, você pode usar o utilitário grep para filtrar a saída: adb logcat '*:E' —v color | grep com.myApp Tradicionalmente, para obter mais informações, você sempre pode recorrer ao seu assistente adb logcat --help Agora vamos ver como usá-lo Por exemplo, se um bug for reproduzido enquanto o dispositivo não estiver conectado, você pode conectá-lo imediatamente e redirecionar o log para um arquivo. Para depuração adicional, antes de coletar logs, você pode pré-limpar o buffer de log antes de reproduzir o bug para eliminar dados supérfluos. Isso pode ser feito através do comando: , então reproduzimos o bug e executamos adb logcat —c adb logcat —d Para aqueles que gostam de vasculhar pilhas de logs, há outra ferramenta a considerar - ADB bugreport. Essa ferramenta permite criar arquivos zip com informações completas de depuração em formato de texto simples ( ). .txt — cria um arquivo zip no diretório especificado. adb bugreport /Users/username Copia todas as informações sobre o dispositivo, como dumpstate, dumpsys e dados logcat para a pasta especificada. Por padrão, os relatórios de erros são armazenados em /bugreports e podem ser visualizados por meio de: adb shell ls /bugreports/ As informações mais importantes para nós estão armazenadas em bugreport-BUILD_ID-DATE.txt O monitoramento de falhas e ANR (Application Not Responding) é outra ferramenta interessante para trabalhar com falhas. Execute-o usando este comando: e, em seguida, reproduzimos nosso crash. O console exibirá informações sobre a falha sem nenhum detalhe redundante e três opções para continuar nossos esforços de monitoramento: . adb shell am monitor (c)ontinue: show crash dialog, (k)ill: immediately kill app, (q)uit: finish monitoring emuladores Exibindo uma lista de emuladores configurados: emulator -list-avds Rodando o emulador precisamos: emulator @avdname Ao trabalhar com emuladores, às vezes é necessário reiniciar os serviços e o servidor deve ser reinicializado assim que o emulador for iniciado, mas muitas vezes até um comando é suficiente: . Se isso não ajudar, execute o script inteiro: adb kill-server — exibe uma lista de emuladores configurados. emulator -list-avds — para o servidor. adb kill-server (ou )— onde é o nome do emulador. emulator -avd avdname emulator @avdname avdname — reinicia o servidor. adb start—server — exibe a lista de dispositivos conectados onde nosso emulador perdido deve aparecer. adb devices Para os mais preguiçosos, um emulador pode ser criado a partir da linha de comando. Por exemplo, o seguinte comando cria um emulador chamado "test" usando uma imagem de sistema x86 com API 25:): avdmanager create avd —n test —k "system—images;android—25;google_apis;x86" Se a imagem desejada não estiver disponível, você pode pré-instalá-la com o comando: sdkmanager --install "system—images;android—25;google_apis;x86" — exibe uma lista de imagens disponíveis para download sdkmanager --list | grep system—images Com emuladores, às vezes também ocorrem problemas “fantasmas” durante a operação, e um comando usado com frequência que ajuda aqui é “inicializar a frio” o emulador sem abrir o instantâneo automático. O instantâneo feito na saída será o seguinte: emulator @avdname —no—snapshot—load Aqui estão mais algumas opções úteis a serem consideradas ao iniciar o emulador: — nenhum instantâneo automático será salvo -no-snapshot-save — nenhum instantâneo será baixado ou salvo -no-snapshot Se o emulador ainda não funcionar corretamente, pode ser limpo usando a opção que retorna o emulador ao seu estado original: -wipe-data A criação de instantâneos é um recurso muito útil para salvar os diferentes estados do dispositivo. Manualmente, isso pode ser feito nas configurações do emulador ou executando este comando: — salva o estado do emulador onde é o nome do snapshot a ser armazenado no dispositivo adb emu avd snapshot save test test — executa nosso emulador chamado @avd e exibe a lista de instantâneos no console emulator @avdname —snapshot—list Em seguida, você pode carregar um instantâneo salvo anteriormente usando este comando: — onde é o nome de um snapshot salvo anteriormente adb emu avd snapshot load test test — exclui o instantâneo chamado adb emu avd snapshot delete test teste Também é possível executar imediatamente o emulador com o instantâneo que precisamos: emulator @avdname -snapshot test Você também pode usar o comando para obter um instantâneo do dispositivo: pull adb emu avd snapshot pull test /Users/username/ Nosso emulador pode ser operado através do console . Mas primeiro você tem que instalá-lo. A maneira mais fácil de fazer isso é através do gerenciador de pacotes de , se você o tiver. Se não, então é hora de descobrir o que é e como usá-lo. Portanto, instale o usando o comando: telnet brew telnet brew install telnet. Em seguida, execute nosso emulador e, em outra aba do terminal, conecte-se a ele com o comando: Exemplo: telnet localhost port, — conecta-se ao nosso emulador que usa a porta 5554 telnet localhost 5554 Depois de concluir o comando, podemos fazer todo tipo de coisas úteis com nosso emulador, incluindo trabalhar com geo (por exemplo, o comando definirá nosso local desejado nas coordenadas especificadas), a rede ou a bateria, enquanto um a lista completa de comandos, como sempre, pode ser encontrada em help. geo fix 40.748840 -73.984279 Por exemplo, o mesmo procedimento com snapshots é um tanto simplificado, enquanto os comandos descritos na seção anterior são reduzidos a . avd snapshot <command> Alterando a resolução no dispositivo O gerenciador de janelas (wm) possui alguns comandos úteis para garantir que os elementos na tela do dispositivo sejam exibidos corretamente. Eles permitem ajustar a resolução da densidade de pixels para que você possa percorrer todas as opções necessárias de tamanhos de tela e ver como nosso app se adapta a eles, sem ter o número adequado de dispositivos em mãos: — define a resolução de tela personalizada, com uma largura de 1080 e uma altura de 1920. adb shell wm size 1080x1920 — redefine todas as nossas configurações alteradas. adb shell wm size reset — altera a densidade de pixels, onde o valor mínimo é 72. Quanto maior o valor, maiores os elementos na tela. adb shell wm density X — redefine todas as nossas configurações alteradas. adb shell wm density reset Se executarmos nossos comandos sem nenhum argumento, obteremos de volta a resolução atual da tela e a densidade de pixels do dispositivo/emulador conectado. Macaco Separadamente, podemos citar o Monkey - uma ferramenta que gera eventos aleatórios do usuário no emulador ou dispositivo, como cliques, toques e gestos, além de vários eventos no nível do sistema que se assemelham aos movimentos de um macaco bobo. O macaco pode ser usado para testes de estresse. — exibe todos os parâmetros do Monkey. adb shell monkey Exemplo de cenário completo: adb shell monkey ——throttle 100 ——pct—syskeys 0 —p com.myApp —v 10 A tecla — define o atraso entre as ações em milissegundos. Como o Macaco realiza todas as ações rapidamente, esse switch (tecla) costuma ser usado quando queremos controlar visualmente o que está acontecendo na tela. --throttle A tecla — define a porcentagem de botões do sistema que serão pressionados durante um cenário. Neste exemplo, é definido como 0, o que implica que nenhum botão do sistema será pressionado. --pct-syskeys A opção — o nome do pacote que está sendo transmitido -p A opção — o número de ações a serem executadas -v Permissões do aplicativo Normalmente, as operações envolvidas aqui implicam na revogação de permissões do app, porque as permissões geralmente são concedidas por meio de uma solicitação do app - algo que pode ser feito de maneira rápida e fácil - enquanto a revogação de permissões é feita por meio de configurações do sistema. — exibe uma lista de permissões de aplicativos disponíveis, por exemplo, permissões de obrigatórias que são concedidas ao instalar o aplicativo, permissões de tempo de — permissões solicitadas em um momento específico, por exemplo, ao acessar o armazenamento de arquivos. Observe que, se uma permissão estiver faltando na lista de permissões solicitadas, você não poderá conceder acesso a ela. adb shell dumpsys package com.MyApp | grep permission install permissions runtime permissions Portanto, o seguinte comando deve ser executado para revogar a permissão do nosso aplicativo: , exemplo: adb shell pm revoke packageName permissionName — revoga o acesso de à câmera. Assim que retornarmos ao aplicativo e tentarmos usar a câmera por meio dele, veremos um novo pedido de permissão. adb shell pm revoke com.MyApp android.permission.CAMERA com.myApp O comando grant dá permissão ao aplicativo, por exemplo: — concede acesso à câmera do telefone para nosso aplicativo. adb shell pm grant com.myApp android.permission.CAMERA a bateria Vamos dar uma breve olhada aqui na bateria e no modo de espera. — exibe informações sobre a bateria. adb shell dumpsys battery — define o nível de carga da bateria, onde X é a porcentagem de carga. adb shell dumpsys battery set level X — simula uma bateria desconectada. adb shell dumpsys battery unplug — redefine todas as nossas configurações alteradas. adb shell dumpsys battery reset Agora vamos ver os modos de espera. A partir do Android 6, existe a função conhecida como Doze Mode, para economizar bateria e prolongar a vida útil da bateria, limitando a atividade do aplicativo após o usuário não interagir com o dispositivo por algum tempo e quando o dispositivo não estiver carregando. O sistema sai periodicamente do modo Soneca para concluir tarefas pendentes em segundo plano. App Standby é outro recurso similar do Android. Ao contrário do modo Doze, ele rastreia o estado de um aplicativo específico que ficou ocioso por um determinado período de tempo e, em seguida, ativa o modo de espera. Nosso trabalho é garantir que o aplicativo se recupere normalmente após sair desses dois modos de economia de energia, que não trave, que as notificações continuem chegando, etc. Para alternar o dispositivo para o modo Doze, execute os seguintes comandos: — desconecta a bateria . adb shell dumpsys battery unplug — o comando pode ter que ser executado várias vezes até que seja exibido: . adb shell dumpsys deviceidle step Stepped to deep: IDLE Depois de todas as rotinas que fizemos com a bateria, o melhor é executar o comando: — que retorna ao seu estado original. adb shell dumpsys battery reset Este comando também pode ser usado para forçar o dispositivo no modo Doze: — às vezes, antes disso, você deve executar o comando: adb shell dumpsys deviceidle force—idle adb shell dumpsys deviceidle enable. Você pode reativá-lo no modo Doze com o comando: - e não se esqueça de redefinir o status da bateria: adb shell dumpsys deviceidle unforce . adb shell dumpsys battery reset Agora um pouco sobre App Standby. Para implantar o aplicativo neste modo, os seguintes comandos precisam ser executados: — desconecta a bateria como no caso anterior. adb shell dumpsys battery unplug — implementa o aplicativo no modo App Standby. adb shell am set—inactive com.myApp true Em seguida, tire nosso aplicativo do modo App Standby usando este comando: . adb shell am set—inactive com.myApp false Você pode verificar o status do aplicativo executando este comando: adb shell am get—inactive com.myApp Mais alguns comandos úteis a serem considerados — reinicia o dispositivo (relevante também para o dispositivo real). adb reboot — exibe informações completas sobre um aplicativo específico. adb shell dumpsys package com.myApp — para verificar o uso de memória do aplicativo no dispositivo, desde o espaço ocupado até a exibição dos bancos de dados usados por este aplicativo, bem como o caminho até eles. adb shell dumpsys meminfo com.myApp — mostra uma lista de propriedades de dispositivo disponíveis (fabricante, modelo de dispositivo, especificações de hardware, etc.) adb shell getprop Exiba a lista de atividades acessíveis para o aplicativo: . adb shell dumpsys package com.myApp | grep —i Activity Exiba o nome da atividade em execução: . adb shell dumpsys window | grep Focused Execute a atividade de aplicativo selecionada: — desta forma você pode executar qualquer aplicativo instalado, incluindo aplicativos do sistema. Exemplo: adb shell am start -n com.android.settings/.Settings exibe as configurações do telefone. adb shell am start —n com.myApp/.ActivityClass Faça uma chamada para o número de telefone especificado: . adb shell am start —a android.intent.action.CALL tel:+790900000XX Abra uma página em seu navegador da Web: adb shell am start —a android.intent.action.VIEW 'https://indriver.com' Pensamentos finais Gostaria de salientar que é impossível reunir todos os recursos do Android Debug Bridge em um artigo ou realizar um estudo completo sobre eles. As mudanças ocorrem constantemente: o que funciona hoje pode parar de funcionar amanhã de repente, e a necessidade de conhecimento de certas ferramentas surgirá à medida que buscamos soluções para questões específicas. Mas posso dizer com confiança que o material que cobrimos hoje é suficiente para você começar e continuar por um tempo. Boa sorte em seus empreendimentos e espero que goste de mergulhar no excitante mundo dos testes de software!