Maneja de manera automática tu android con ADB

Tiempo de lectura: 15 minutos.

Público objetivo: Desarrolladores.

Nivel:  Básico.

Pre-requisito:  S.O Linux - Adroid studio - java.

Meta:  Aprender y utilizar algunos comandos básicos para realizar automatizaciones básicas en nuestro dispositivo móvil con android

Fecha publicación: 10 de Febrero de 2018.

Introducción:

Hola de nuevo! y un muy feliz año! 2018. En este blog les traigo una herramienta algo rudimentaria pero poderosa para (hacer pendejadas) automatizar procesos en nuestros dispositivos móviles.

ADB

Android Debug Bridge (adb) es una herramienta de tipo CLI (línea de comandos) que permite comunicarse con un dispositivo con S.O android. ADB facilita una variedad de acciones en nuestro dispositivo, como instalar y depurar aplicaciones, y proporciona acceso a un shell Unix que puede usarse para ejecutar una variedad de comandos.

Prerequisitos

  1. Windows o linux (preferiblemente linux para poder usar bash para ejecutar uno que otro script)
  2. Android studio (software muy liviano) para descargar nuestro respectivo sdk (ver versión del sistema operativo para saber que versión descargar) y el adb.
  3. Java (:S)
  4. Habilitar el modo desarrollador en nuestro móvil (dando 7 (varia según la versión de android)  veces tap en la opción de información de tu teléfono en la pantalla opciones). luego habilitar la depuración.

Corremos el demonio, recomiendo hacerlo con sudo para evitar problemas.

Manos a la Obra

Si todo sale bien, continuemos.

$ sudo adb kill-server && sudo adb start-server

El ejemplo más básico por el cuál podremos empezar es input tap, el cual genera un tap en la pantalla de nuestro móvil dadas unas coordenadas X y Y

$ adb shell input tap 160 225

 

El anterior comando en mi pantalla abre la aplicación  ubicada en dicha coordenada. NO está de más conocer el tamaño de la pantalla al igual que depurar las coordenadas cuando hacemos tap para saber (donde carajos hacemos tap) las coordenadas y así usarlas posteriormente.

Para habilitar el debug de coordenadas:

 

Ahora cada vez que se haga tap sabremos la información de posición (X,Y) número de toques al tiempo, presión (estimación), tamaño (área del tap), velocidad en X y en Y [Más información].

Comandos básicos:

Event codes:

Podemos enviar el evento de presionar un botón o un evento en específico. Por ejemplo si quiero subir el volúmen:

adb shell input keyevent 24

ver lista completa de valores para más información.

Tap X,Y:

adb shell input tap 500 1450

 

Swipe X1 Y1 X2 Y2 [duración(ms)]:

Evento que simula  un barrido de nuestro tap desde una coordenada a otra.

$ adb shell input swipe 100 500 100 1450 100

 

LongPress X Y:

Podemos usar el mismo comando de swipe para generar este efecto.

adb shell input swipe 100 500 100 500 250

 

Insertar texto:

$ adb shell input text "Elemental%sis%sAwesome%"

Para poder insertar espacios se debe colocar el símbolo de %.

Usando los comandos anteriores podemos generar un script básico en bash para realizar algo más interesante.

 

Script:

#!/bin/bash
adb shell svc power stayon true
echo -e "\e[96mStay on!"
adb shell input swipe 600 700 100 700 500
echo -e "\e[96mSwipe to menu #1!"
adb shell input swipe 600 700 100 700 500
echo -e "\e[96mSwipe to menu #2!"
adb shell input tap 400 195
echo -e "\e[96mTap over alliexpress app link!"
sleep 5
echo -e "\e[96mSleep 5secs!"
adb shell input tap 215 145
echo -e "\e[96mTap to app search box!"
adb shell input text "rubber%sDuck"
echo -e "\e[96mMost relevant search!"
adb shell input tap 160 225
echo -e "\e[96mTap on first search result!"
adb shell input tap 165 435
echo -e "\e[96mTap on product!"
adb shell svc power stayon false
echo -e "\e[96mStay on false!"
echo -e "\e[96mENJOY!"

 

Dentro de otras acciones más interesantes están:

Realizar diferentes Intentos (uso de aplicaciones), por ejemplo, realizar una llamada:

$ adb shell am start -a android.intent.action.CALL -d tel:+12345678910

 

Podemos usar los logs para detectar qué actividad está corriendo cuando usamos nuestro móvil, así usar los “intents” para realizar determinada acción. Por ejemplo :

$ adb logcat

 

El cúal nos da en su salida (que es gigante, se recomienda usar grep para filtrar si estás en linux).

02-08 19:31:16.447   656 30359 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.xhy.plane/com.yijian.auvilink.activity.WelcomeActivity

 

Salida que discrimina la aplicación con la cual controlo un pequeño dron de manera remota. Entonces, para lanzar la aplicacion seria:

$ adb shell am start -n com.xhy.plane/com.yijian.auvilink.activity.WelcomeActivity

 

Volando el pájaro:

 Un ejemplo muy interesante (y que me había prometido hace un par de meses) es volar un modesto drone por medio de su interfaz de android (por ahora) . Si bien, su comportamiento será muy básico, es suficiente para divertirse un rato:

Entendemos que “volar” será despegar del suelo y hacer un pequeño desplazamiento  horizontal y vertical para luego “aterrizar”.

 

 

Script:

#!/bin/bash
adb shell svc power stayon true
echo -e "\e[96mStay on!"
adb shell input tap 970 630
echo -e "\e[96m#1 Tab on play option of app menú!"
adb shell input tap 980 80
echo -e "\e[96m#2 Power on controls!"
adb shell input tap 600 40
echo -e "\e[96m#2 Change Power mode to 60%!"
adb shell input swipe 250 600 250 320 500
echo -e "\e[96m#3 Motors to 95% of power!"
adb shell input swipe 250 320 250 580 8500
echo -e "\e[96m#3 shutdown!"

 

Tweet