Acceder

Ver la Versión Completa : [ SOLUCIONADO ] parchear ficheros de una OTA


LEPT
26/01/15, 15:15:11
Como habréis observado algunos, dentro de las OTAs hay unos ficheros que "son parcheados" a los ya existentes, para añadirles los cambios, en lugar de sobrescribir entero el fichero existente. Estos ficheros que contienen "la información adicional", poseen la extensión '.p'.

Por ejemplo, viene un fichero llamado "boot.img.p", el cual se le parcheará al 'boot.img' original para añadirle la nueva información. Lo mismo pasa con ficheros APK, ODEX, SO, etc...

Para realizar el proceso de obtención de la info a parchear, y el proceso de parchear dicha información, se tiene en cuenta si el fichero es de texto plano o no, ya que emplean utilidades diferentes en función de eso.

En el caso de texto plano, emplean la utilidad "Binary diff (http://www.daemonology.net/bsdiff/)". La cual se compone de 2 partes:

'bsdiff' que sirve para generar un fichero con las diferencias entre el fichero antiguo y el nuevo.
'bspatch' que sirve para aplicar al fichero antiguo, el fichero con la información incremental, y así poder generar el fichero nuevo.

En el caso de que no sea texto plano, emplean la utilidad "applypatch (https://mega.co.nz/#!CB9CjLqT!R_8jlC0HbfavY5czLGZBJjo7BSW-ivxS1xG3svOpgCE)". La cual sirve entre lo que contiene está:

'imgdiff' que sirve para generar un fichero con las diferencias entre el fichero antiguo y el nuevo.
'imgpatch' que sirve para aplicar al fichero antiguo, el fichero con la información incremental, y así poder generar el fichero nuevo.


Y tras la teoría, viene la petición.

¿Alguien tiene una versión de "applypatch", o al menos de "imgpatch", ya compilada? Me da igual que sea para Linux o para Windows (Win32), aunque preferiría que fuera para Windows. ¿O alguien sabe compilarlo? Me imagino que el que sea usuario avanzado de Linux sabrá. El link del source estaba ahí arriba, por si lo quiere.

LEPT
26/01/15, 18:08:29
Bueno, me voy auto-contestando (creo que soy el usuario que hace más eso X-D).

Dentro del propio Android, ya tenemos un applypatch pre-compilado. Pero no logro hacer que funcione en el Linux de mi PC.

Luego ha resultado que el funcionamiento de applypatch es algo 'tedioso'...
usage: applypatch [-b <bonus-file>] <src-file> <tgt-file> <tgt-sha1> <tgt-size> [<src-sha1>:<patch> ...]
or applypatch -c <file> [<sha1> ...]
or applypatch -s <bytes>
or applypatch -l

Filenames may be of the form
MTD:<partition>:<len_1>:<sha1_1>:<len_2>:<sha1_2>:...
to specify reading from or writing to an MTD partition.
Casi ná!

Traducido (al menos un poco) sería algo así:
applypatch nombre_viejo nombre_nuevo SHA-1_nuevo tamaño_nuevo_bytes SHA-1_viejo:parche_p

Se puede usar desde la ventana de comandos, pero casi que sale más a cuenta generar un script para un ZIP flasheable y hacerlo desde ahí, lo cuak no me hace mucha gracia :silbando:

Bueno, misterio solucionado. No obstante si alguien logra hacer funcionar el applypatch en linux o lo compila para windows, que me avise :ok: