ANTECENDENTES
Dado que a Xiaomi parece que le cuesta filtrar los Firmware (en fotmato .TGZ) flasheables mediante MiFlash para el Xiaomi Mi A2, y que las únicas versiones que se están filtrando son los Firmware (.ZIP) para flashear mediante el Recovery con Sideload, nos quedamos algo limitados a la hora de restablecer nuestro dispositivo con un Firmware oficial, por el motivo que sea.
Existen 2 métodos para hacer uso del contenido de esos .ZIP. Como he dicho anteriormente, uno sería flashearlo desde el Recovery, mediante sideload
[PHP]adb sideload update.zip[/PHP]
y el otro método sería flashearlo mediante comandos fastboot, PERO esto no es tan evidente, dado que dentro del .ZIP no encontramos directamente ficheros para flashear mediante fastboot.
OBJETIVO
Describir el procedimiento para partiendo del .ZIP del Firmware completo para Recovery, obtener los ficheros de las particiones que se podrán flashear mediante comandos fastboot.
REQUISITOS
- Acceso a bootloader desbloqueado [fastboot oem unlock]
- Acceso a particiones críticas desbloqueado [fastboot flashing unlock_critical]
- Firmare completo en formato .ZIP flasheable normalmente desde Recovery. Es el mismo fichero que el de la OTA-FULL, pero NO que la OTA-incremental, vamos que va a tener una tamaño de 1GB y pico.
- ...y obviamente, los drivers para que el Ordenador reconozca correctamente al smartphone; y los ficheros mínimos y necesarios para interactuar con comandos ADB y FASTBOOT (para Windows son adb.exe, fastboot.exe, AdbWinApi.dll, AdbWinUsbApi.dll).
- ...y tener copia de seguridad de lo que quieras guardarte, pues vamos a borrar toda nuestra información del smartphone.
PROCEDIMIENTO
Haré el ejemplo con la última versión disponible ahora mismo, la de Abril
V11.0.8.0.QDIMIXM.
Descomprimimos dentro de una carpeta ese ZIP y obtendremos lo siguiente
Como vemos, ahí dentro no están los típicos boot.img, modem.img, system.img, etc... En realidad se encuentran dentro del fichero payload.bin.
Por lo que vamos a tener que descompilar ese payload.bin. Para ello haremos uso de una
herramienta escrita en Python, o de una versión ejecutable que han adaptado
para Windows x64.
Descomprimimos esta herramienta, por ejemplo en la misma carpeta en la que estamos trabajando.
Si usásemos la versión en Python (obviamente tendríamos que tener instalado Python y las dependencias que pide), que nos serviría para diferentes sistemas operativos, el comando que tendríamos que usar es:
Linux
[PHP]python3 payload_dumper.py payload.bin[/PHP]
Windows
[PHP]py payload_dumper.py payload.bin[/PHP]
Y si usamos la versión ejecutable en Windows, veremos al descomprimirla que nos crea 2 carpetas (payload_input / payload_output). Es tan simple como copiar/mover el fichero payload.bin al interior de la carpeta payload_input.
Luego ejecutamos el fichero payload_dumper.exe, y vemos que en una ventana de comandos, van saliendo la lista de ficheros que descompila. Tras un ratito, acabará y se cierra automáticamente.
Los ficheros resultantes de esta descompilación, los tendremos dentro de la carpeta output / payload_output (según la versión usada, de python o Windows).
En esa lista de ficheros, nos faltarían aún 4 ficheros más para tener los mismos que en el interior de los Firmware en .TGZ, aunque sólo nos harán falta 3 más (no nos hace falta system_other.img):
[PHP]storsec.mbn
splash.img
userdata.img[/PHP]
El fichero
storsec.mbn lo he extraído de mi smartphone, y resulta que es idéntico (bit a bit) al que venía en el Firmware (.TGZ) de Android 9, luego parece que es siempre igual. Os dejo aquí el que he
extraído del mio. O en su defecto se podrá usar el que saquemos del último .TGZ con Android 9.
El fichero
splash.img, se encarga de las imágenes del inicio del arranque, la cual varió de Android 9 a Android 10. Por lo tanto tendríamos que extraerlo de un Mi A2 con Android 10. Os dejo aquí el que he
extraído del mio.
Y el fichero
userdata.img, no debería de ser excesivamente importante el que tuviera ligeras diferencias, pues ahí al final lo que haremos será llenarlo con nuestras cosas (programas, configuraciones, fotos, videos, etc...). No obstante, tras flashear todo esto e iniciar el smartphone por primera vez, le haremos un Factory reset desde el Recovery Stock para que formatee esa partición y quede completamente a su gusto. Por lo tanto, usaremos como userdata.img, la última que tengamos disponible, en nuestro caso es la que contiene el .TGZ del Firmware
V10.0.17.0.PDIMIXM.
De este modo, ya tendríamos todos los ficheros necesarios para flashearnos mediante comandos fastboot, el Firmware.