Todos los que hayáis trabajado con Android Studio habréis tenido que configurar en algún momento un emulador también conocidos como AVDs (Android Virtual Device). Una de las cosas que más me llamó la atención cuando comencé a trabajar con los AVDs es que sólo puedes disponer de la Google Play, la tienda de aplicaciones de Google, en algunos modelos concretos de AVD, como podemos ver en la imagen inferior.
Si seleccionas uno de estos modelos con el icono de la Play Store, podrás instalar una imagen de Android que incluya la tienda de aplicaciones de Google. Como puedes ver en la siguiente imagen.
Hasta aquí todo bien, el “problema” llega cuando quieres hacer alguna acción que requiere tener usuario root como puede ser utilizar iptables para derivar el tráfico de red a un proxy para poder inspeccionarlo. Al intentar ejecutar el comando en la consola aparece un mensaje de error indicando que debes hacerlo desde el usuario root como se puede ver en la imagen inferior.
Para solventar este tipo de situaciones, podemos utilizar una solución como es Genymotion. Genymotion ofrece una versión de escritorio gratuita que permite disponer de Play Store y de usuario root en el mismo emulador, resolviendo este inconveniente. Con un simple botón del emulador permite instalar la Play Store utilizando los paquetes de Open Apps
Pero Genymotion en su versión gratuita tienes también sus limitaciones, sobre todo destaría dos limitaciones:
La primera es que la última versión de Android sólo esta disponible en la versión de pago. Esta limitación todavía no me ha causado ningún problema ya que siempre he podido utilizar versiones anteriores de Android para realizar mi trabajo.
La segunda restricción sin embargo, si he encontrado situaciones en las que ha sido un problema. Esta restricción es que sólo podemos disponer de emuladores en arquitectura X86 en la versión gratuita. Esto supuso un problema en uno de los últimos trabajos en los que estuve trabajando recientemente y es que hay determinadas aplicaciones que no pueden ejecutar en esta arquitectura. En concreto las aplicaciones desarrolladas en Flutter no ejecutan en este tipo de arquitecturas. De esto hablaré en la próxima conferencia que daré en RootedCON, el sábado 11 de marzo a las 18:20 en la sala 25.
Durante el proyecto, cuando quisimos instalar alguna aplicación desarrollada con Flutter nos encontramos con que no funcionaba en el emulador de Genymotion. Parece ser que Flutter ya no da soporte a este tipo de aplicaciones.
Llegado este momento teníamos dos caminos, contratar la versión de pago en las que se da soporte a otras arquitecturas o intentar lograr lo mismo que hace Genymotion pero en los emuladores que provee Android Studio, de esta forma lograríamos tener la Google Play y usuario root en cualquier version y arquitectura soportada por Android Studio.
Tras mucho buscar en Internet y romper muchos emuladores encontramos un procedimiento que nos funcionó y que os comparto y que espero que os sirva en algún proyecto que tengáis.
- Descargar de la página de Open GAPPS la versión que corresponda por arquitectura y versión de Android
- Desde la página de Open GAPPS se debe descargar un fichero ZIP. Descomprímelo
- Borra todo fichero de setup.
- rm Core/setup*
- Descomprime todos los ficheros que hay en el paquete
- lzip -d Core/*.lz
- Ejecuta el siguiente bucle
- for f in $(ls Core/*.tar); do
- tar -x – – strip-components 2 -f $f
- done
- Al finalizar el proceso tienes que tener varias carpetas en el directorio donde has estado trabajando
- Crear un AVD desde Android Studio y apunta el nombre que le das
- Arranca el AVD desde linea de comandos con el siguiente comando
- emulator -netdelay none -netspeed full -avd <nombreAVD> -no-snapshot -writable-system
- Desde otra consola ejecuta los siguientes comandos
- adb root
- adb shell avbctl disable-verification
- adb disable-verity
- adb reboot
- adb remount
- adb shell “su 0 mount -o rw,remount /system”
- Ahora ya podemos escribir en la partición /system del emulador. Continuamos “empujando” los siguientes directorios al telefono
- adb push etc /system
- adb push framework /system
- adb push app /system
- adb push priv-app /system
De esto y cómo conseguir inspeccionar el tráfico de las aplicaciones con Flutter es de lo que hablaré en RootedCON esta semana que empieza. Si eres de los afortunados que asistirá nos vemos en RootedCON.
Gracias por leer esta entrada y nos vemos en la red.