Post-Image

Automatizando procesos en Android vía ADB

Últimamente he estado creando algunos scripts que automatizan procesos en aplicaciones Android. En un primer momento comencé con el uso de la herramienta xdotool y simulando los clicks que quería ejecutar. Desde el punto de abrir la aplicación hasta el punto cerrarla y usar los propios ajustes de Android para hacer limpieza de los datos guardados por la aplicación.

Tras tener todo preparado y varios intentos, me he topado con que dependía mucho de la velocidad de carga de la APP para poder hacer el siguiente click, lo que suponía errores en muchas ocasiones en las que el emulador de Android tardaba más de lo planeado.

Tras diversos intentos tratando de ajustar los tiempos, me doy cuenta que puedo utilizar el ADB para gestionar ciertas acciones en la aplicación.

En primer lugar tendremos que instalar la aplicación

1
adb install app-release.apk

Como sabréis tras instalar una aplicación nos suele pedir que garanticemos ciertos permisos a la aplicación para poder funcionar, para ello podemos revisar en el AndroidManifest.xml que permisos necesita la aplicación que queremos utilizar, los siguientes son unos ejemplos de los más comunes.

1
2
3
4
5
6
adb shell pm grant com.alefnode.openstack android.permission.CALL_PHONE
adb shell pm grant com.alefnode.openstack android.permission.READ_EXTERNAL_STORAGE
adb shell pm grant com.alefnode.openstack android.permission.WRITE_EXTERNAL_STORAGE
adb shell pm grant com.alefnode.openstack android.permission.READ_PHONE_STATE
adb shell pm grant com.alefnode.openstack android.permission.ACCESS_FINE_LOCATION
adb shell pm grant com.alefnode.openstack android.permission.CAMERA

El siguiente paso lógico es intentar arrancar la APP a través de comandos, esta parte es relativamente sencilla, tan solo necesitamos el nombre de la aplicación y el de la actividad que lanza en primera instancia.

1
adb shell am start -n com.alefnode.openstack./com.alefnode.openstack.MainActivity

Si queremos enviar un evento en el emulador podemos hacerlo indicando las coordenadas en donde ejecutar el evento.

1
adb shell input tap X Y

Si lo que queremos es cerrar la aplicación tenemos el comando:

1
adb shell am force-stop com.alefnode.openstack

Sin embargo, si queremos cerrarla y limpiar todos los datos que hemos estado insertando la aplicación tenemos un comando que nos permite ambas acciones.

1
adb shell pm clear com.alefnode.openstack