Comandos ágeis e importantes do Android SDK
Opa, Androiders. Hoje trago um tema interessante e que pode ser um auxiliador do desenvolvimento de nossas aplicações. Para quem tem familiaridade com comandos no terminal, serão informações valiosas e bem explicadas para o uso amplo de cada funcionalidade e para quem não é familiarizado, mão na massa para se tornar um expert no assunto.
Normalmente utilizamos a IDE do Android Studio ou até outras plataformas para o desenvolvimento (seja nativo ou híbrido) e não nos damos conta do poder de cada componente que compõe o suporte de desenvolvimento das aplicações Android. O Android Debug Bridge (ADB) possui várias funcionalidades que podem ser utilizadas para determinados fins, bem como o emulator, sqlite3, PackageManager e ActivityManager que são ferramentas dentro do Android SDK poderosas e manipuláveis.
Neste tópico vamos discutir um pouco sobre as possibilidades para cada uma dessas ferramentas e como você pode tirar proveito delas de uma forma breve e efetiva.
Android Debug Bridge (ADB)
O Android Debug Brigde, ou comumente chamado de ADB, é uma ferramenta poderosa de comunicação com seu dispositivo Android, seja ele físico ou virtual. Ele possui várias funcionalidades úteis que não se limitam apenas à IDE. Segue abaixo alguma de suas possibilidades:
Consulta de comandos em geral e versão do ADB
adb help
Consulta de dispositivos conectados ao ADB
adb devices
Conectar dispositivo com base no IP
adb connect [ip-do-dispositivo]
Desconectar dispositivo com base no IP
adb disconnect [ip-do-dispositivo]
Derrubar o servidor do ADB (resolve problemas de conexão com dispositivo)
adb kill-server
Reiniciar o servidor do ADB (resolve problemas de conexão com dispositivo)
adb start-server [ip-do-dispositivo]
Instalar aplicação em APK presente no desktop
adb install [caminho-da-apk]
Desinstalar aplicação diretamente no dispositivo com base no package
adb uninstall [nome-do-pacote]
Enviar arquivos para o dispositivo
adb push [caminho-do-arquivo-no-desktop] [caminho-no-dispositivo]
Receber arquivos do dispositivo (salvo no diretório que o terminal está apontando)
adb pull [caminho-do-arquivo-no-dispositivo]
Root de dispositivo (permitido apenas para alguns, útil para análises mais específicas e complexas)
adb root
Unroot de dispositivo
adb unroot
Acessar o shell do dispositivo (navegação de pastas e arquivos na raiz do dispositivo)
adb shell
Sair do shell
exit
Ferramentas internas do Shell
Acessando o shell do dispositivo, o desenvolvedor passa a ter vários recursos em mãos provenientes do dispositivo para aperfeiçoar suas análises e manipulações. É possível navegar pelos arquivos do dispositivo de pastas root, verificar conteúdos de aplicações, coletar logs, dentre várias possibilidades. Abaixo listei algumas linhas de comando que podem te ajudar no processo de desenvolvimento:
Logcat
Acessar o logcat do dispositivo
logcat
Acessar o logcat do dispositivo filtrado por palavra-chave
logcat | grep [palavra-chave]
Dumpsys
Acessar o relatório de activities inicializadas no dispositivo (rodando, pausadas, resumidas etc)
dumpsys activity activities
Mostrar as activities em execução no dispositivo de forma resumida
dumpsys activity | grep “Run #”
Mostrar as activities e componentes de interface em execução
dumpsys window windows | grep “Window #”
PackageManager
Listar usuários do seu dispositivo
pm list users
Listar pacotes de aplicações no dispositivo
pm list packages
Listar pacotes de aplicações no dispositivo com filtro (-s para aplicações do sistema operacional, e -3 para aplicações de terceiros, instaladas pela Google Play ou externas)
pm list packages [-s | -3]
Localizar o caminho para o diretório de uma determinada aplicação
pm path [pacote-da-aplicação]
Desinstalar uma aplicação do dispositivo
pm uninstall [pacote-da-aplicação]
ActivityManager
Inicializar activity com base no seu caminho (presente no AndroidManifest.xml)
am start -n [nome-do-pacote/.nome-da-activity]
am start -n nome-do-pacote.br.com.example/.nome-da-activity
Inicializar activities com base numa action
am start -a android.intent.action.VIEW geo:0,0?q=
am start -a android.intent.action.VIEW https://gok.digital
am start -a android.intent.action.CALL -d tel:[numero-de-celular]
Inicializar activity com base no seu caminho (presente no AndroidManifest.xml) e enviando parâmetros por Intent (chamar o comando am help para ver outros tipos de variável e combinações com mais de um extra)
am start -n [nome-do-pacote/.nome-da-activity] –es [chave-do-extra-do-tipo-string] [valor-para-o-extra-string]
am start -n [nome-do-pacote/.nome-da-activity] –ei [chave-do-extra-do-tipo-int] [valor-para-o-extra-int]
am start -n [nome-do-pacote/.nome-da-activity] –ez [chave-do-extra-do-tipo-boolean] [valor-para-o-extra-boolean]
Inicializar serviço de uma determinada aplicação (presente no AndroidManifest.xml)
am startservice [nome-do-pacote/.nome-da-classe]
Encerrar serviço de uma determinada aplicação (presente no AndroidManifest.xml)
am stopservice [nome-do-pacote/.nome-da-classe]
Inicializar BroadcastReceiver de uma determinada aplicação passando a action equivalente (presente no AndroidManifest.xml)
am broadcast -a [action]
Finalizar qualquer serviço em background
am force-stop
Finalizar serviços de uma aplicação em específico
am force-stop [pacote-da-aplicação]
Monkey
Inicializar uma categoria específica da aplicação (presente no AndroidManifest.xml)
monkey -p [pacote-do-app] -c [categoria]
monkey -p br.com.example.example -c android.intent.category.LAUNCHER
Informação útil
Quando for utilizar as ferramentas dentro do shell do dispositivo, você pode, tanto acessar o shell antes para então chamar a ferramenta em questão (inicializar uma activity, por exemplo), conforme o exemplo abaixo:
adb shell
am start -n nome-do-pacote.br.com.example/.nome-da-activity
Quanto é possível interpolar essas duas linhas de comando em uma:
adb shell am start -n nome-do-pacote.br.com.example/.nome-da-activity
adb shell logcat | grep [palavra-chave]
A escolha vai de sua preferência e/ou necessidade de ainda ter acesso ao shell ou não. Ambos os métodos são funcionais e te entregam o resultado esperado.
Conclusão
Percebe-se que o Android SDK tem ferramentas poderosas e principalmente efetivas para usos mais específicos e também para toda a composição do próprio sistema operacional. Utilizar esses artifícios no processo de desenvolvimento traz mais agilidade quando praticado e te torna mais experiente e conhecedor do sistema para qual desenvolvemos nossas aplicações.
Há uma infinidade de possibilidades quando o Android SDK é explorado, cada desenvolvedor se apega ao que precisa e entende. A troca de conhecimento nesse sentido é essencial para compreender a usabilidade e construir uma lógica efetiva no cenário de desenvolvimento.
Espero que este conteúdo seja relevante para sua jornada! Salve este conteúdo para ter sempre em mãos e fique atento ao blog com novas publicações que serão muito pertinentes e informativas.