PDA

Ver la Versión Completa : [ TUTORIAL ] Como crear un updater-script


intronauta
09/01/11, 14:20:01
A partir del Clockworkmod recovery v3.0 desaparece la compatibilidad con los update-script tradicionales en formato AMEND, que ya fue depreciado por Android en Donut 1.6 y solo es compatible con updater-script en formato EDIFY para solventar algunas limitaciones con el formato AMEND.

A diferencia de los update-script, los updater-script necesitan un binario llamado update-binary para poder ejecutarse. Éste se obtiene compilando desde las fuentes, pero adjunto una plantilla de la carpeta META-INF con un update-binary extraído del zip usado en el kernel advanced voodoo v666, así solo necesitamos acompañarlo de nuestro updater-script.

Para saber más sobre cómo funciona un update-script pásate por aquí, aunque la sintaxis difiere entre amend y edify, utilizan la misma lógica al menos en los comandos más básicos y comunes http://www.htcmania.com/showthread.php?t=156478




Herramientas para pasar automáticamente de AMEND a EDIFY:

HTC Android Kitchen http://forum.xda-developers.com/showthread.php?t=633246
Amend2edify: http://forum.xda-developers.com/showthread.php?p=10411403



Comandos básicos

Los updater-script permiten introducir comentarios # , tenlo en cuenta a la hora de mantener orden y transparencia en tu código.



Imprimir mensaje en pantalla

ui_print("HOLA MUNDO!");


Barra de progreso (show progress)

show_progress(porción de la barra, frecuencia);

Una vez más este comando me trae loco, he visto dos formatos diferentes, ambos válidos:

show_progress(0.500000, 40);show_progress(1, 15); Montar unidades

Al contrario que con otros dispositivos que funcionan con MTD, por ahora nosotros necesitamos montarlas un poco más "artesanalmente".
run_program("/sbin/mount", "/dev/block/stl9", "/system");
run_program("/sbin/mount", "/dev/block/stl10", "/dbdata");
run_program("/sbin/mount", "/dev/block/stl11", "/cache");
run_program("/sbin/mount", "/dev/block/mmcblk0p2", "/data");
run_program("/sbin/mount", "/dev/block/mmcblk0p1", "/sdcard");Desmontar unidades

Es recomendable desmontar las unidades cuando terminemos de trabajar en ellas
run_program("/sbin/umount", "/dev/block/stl9");
run_program("/sbin/umount", "/dev/block/stl10");
run_program("/sbin/umount", "/dev/block/stl11");
run_program("/sbin/umount", "/dev/block/mmcblk0p2");
run_program("/sbin/umount", "/dev/block/mmcblk0p1");

Copiar archivos a la memoria interna

Copiar archivos contenidos dentro de la carpeta "system" del update.zip a /system/app

package_extract_dir("system", "/system/app");

Borrar archivos de la memoria interna

delete("/system/app/Stk.apk");
delete("/system/app/ADWLauncher.apk", "/system/app/Browser.apk", "/system/app/Calculator.apk", "/system/app/Calendar.apk", ...);


Borrar carpetas de la memoria interna
delete_recursive("/data/dalvik-cache");
Formatear

El comando format tradicionalmente funciona con sistemas MTD -por ahora no válido para el galaxy-, pero podemos utilizar un sistema equivalente eliminando recursivamente las carpetas contenedoras de cada unidad:

delete_recursive("/system");
delete_recursive("/dbdata");
delete_recursive("/cache");
delete_recursive("/data");
delete_recursive("/sdcard");


Symlinks

symlink("origen","destino");Permisos

set_perm(uid, gid, permisos, "ruta")
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");set_perm_recursive(uid, gid, permisos_directorio, permisos_archivos, "ruta")
set_perm_recursive(0, 2000, 0755, 0644, "/system");

Ejecutar un archivo (binario o script)

Ejecutando desde la raíz del update.zip

run_program("script.sh");

Ejecutando desde la memoria interna. Debe copiarse previamente a /tmp.

run_program("/tmp/script.sh")
run_program("/tmp/script.sh", "argumento1", "argumento2",...)Ejemplo: Flashear un kernel con redbend_ua (asumiendo que tenemos redbend_ua y zImage dentro de /updates)

package_extract_dir("updates", "/tmp/updates");
set_perm(0, 0, 0755, "/tmp/updates/redbend_ua");
run_program("/tmp/updates/redbend_ua", "restore", "/tmp/updates/zImage", "/dev/block/bml7");

vvaleta
09/01/11, 14:33:26
Pal hilo de tutos de cabeza... X-D

Gracias trom. :ok:

intronauta
09/01/11, 16:09:14
Bueno, por hoy lo dejo que me tengo que pirar. Queda pendiente saber como desmontar y formatear una partición. Es de locos. He probado con MTD y BLM y nada, que no hay manera :/

Tampoco me ha dado tiempo a probar si dbdata es DATADATA como en amend.

Si alguno podéis ir probando y dais con ello os habréis ganado el cielo, que lo sepais... :D

vvaleta
09/01/11, 17:17:43
Ya tienes los tags puestos tio. ;-)

mtm
09/01/11, 22:58:58
Muuuuchas gracais por el tuto jefes!

usuario_87061
09/01/11, 23:04:44
Madre mía, intronauta, eres un máquina!

Asias!!! :aplausos:

Lorse
09/01/11, 23:19:35
Enorme!!!! :aplausos::aplausos:

Hago un copy&paste de un comentario en otro hilo que aquí también considero esta bien :lengua:


AMEND es el formato para los update-script que se lanzó con Android 1.0 para funcionar desde el recovery y tiene una sintaxis determinada bastante básica. Con Donut (android 1.6) se depreció en favor del formato EDIFY que necesitaba de un update-binary y un update-script con una sintaxis parecida a la utilizada en amend pero con algunas funciones avanzadas. Los custom recovery han mantenido la compatibilidad con Amend y Edify pero parece que esto va a cambiar. El primero ha sido el CWM recovery eliminando la compatibilidad con los update-script tradicionales (amend) y ya veremos que pasa con el de amon_ra (que nos da igual porque no hay para galaxy).

Creo que se han aventurado demasiado, ya que practicamente nadie trabaja con EDIFY al menos en galaxy, supongo que AMEND es más sencillo y cubre las necesidades habituales para cualquier cocinero. Pero por ejemplo las cyanogenmod ya trabajan exclusivamente con EDIFY.

Será cuestión de poco tiempo el que todos los cocineros actualicen toda los paquetes al nuevo formato. Mientras tocará esperar.

salu2

tiggerbcn
09/01/11, 23:47:50
Muchas gracias makina, esto nos va a ir muy bien para montar temas tambien.

intronauta
10/01/11, 00:01:26
He resubido el archivo META-INF con el update-binary incluido en el kernel advanced voodoo v666 ya que el primero lo extraje de un zip de HTC y diferían en tamaño. También he añadido algunos comandos más.

Deseando que las cocinas de xda empiecen a trabajar con edify para clarificar algunas cosas, especialmente las custom rom.

vvaleta
10/01/11, 00:55:27
Habrá que hacer algo, para que todo esto no caiga en el olvido.;-)

intronauta
12/01/11, 12:33:22
Pues mientras no salga nada nuevo ya está terminado.

He pasado un update-script a updater-script de una rom completa y aunque ha sido un poco coñazo :P funciona todo, así que lo doy por finiquitado.


Por si alguien está interesado, también he probado con la herramienta amend2edify y funciona de P.M, prácticamente no hay que tocar nada, solo falla cuando hay líneas en blanco generando una línea de error que toca quitar a mano, pero nada grave.

jm0077
08/04/11, 11:43:24
Hola!

genial tuto :ok:

Ahora mismo quiero flash un AOSP compilado para la HTC Desire, sin embargo me he dado cuenta que si quiero usar el updater-script necesito el update-binary. Ademas me he dado cuenta que existe un file metadata dentro de META-INF/com/android/

Quisiera saber si el update-binary es indistinto de la rom que queramos flasher o si es posible obtenerla desde alguna carpeta luego de que las fuentes AOSP han sido compiladas.

Gracias !

juanyllo87
01/04/12, 17:45:44
Hola intronauta muy buen tutorial, más o menos me he enterado pero al intentar meterlo por CWM solamente consigo que salga el mensaje status 6.
Quiero meter una aplicación en system/app para hacer una prueba.
El apk lo metí en una /system/app del zip.
El update-script es el que cogí de tu post.
El updater-script lo he escrito así con el notepad++:

run_program("/sbin/mount", "/dev/block/stl9", "/system");
package_extract_dir("system", "/system/app");
run_program("/sbin/umount", "/dev/block/stl9");
ui_print("Completado");

No sé donde habré fallado.

Gracias y saludos ;)

ninoroldan
03/12/12, 12:24:45
Buen tutorial, gracias

Enviado desde mi GT-N7000 usando Tapatalk 2

limeraw139
22/01/13, 21:39:57
Hola estoy intentando apreder como va todo esto que no tengo ni idea. ¿Me podeis responder una pregunta? ¿para que sirve el comando "assert" que ponen delante de otros comandos?

Salu2

Alexis0o
22/01/13, 22:06:40
Hola estoy intentando apreder como va todo esto que no tengo ni idea. ¿Me podeis responder una pregunta? ¿para que sirve el comando "assert" que ponen delante de otros comandos?

Salu2

Lo dices por esto?:

assert(getprop("ro.product.device") == "galaxys" || getprop("ro.build.product") == "galaxys" ||
getprop("ro.product.device") == "galaxysmtd" || getprop("ro.build.product") == "galaxysmtd" ||
getprop("ro.product.device") == "GT-I9000" || getprop("ro.build.product") == "GT-I9000" ||
getprop("ro.product.device") == "GT-I9000M" || getprop("ro.build.product") == "GT-I9000M" ||
getprop("ro.product.device") == "GT-I9000T" || getprop("ro.build.product") == "GT-I9000T");

Eso si no me equivoco lo que hace es comprobar si el ro.product.device es uno de los que estan puestos, si no da un error.

Es un condicional. Si no existe, entonces muestra error.

Corregirme si me equivoco.

limeraw139
24/01/13, 11:06:25
Lo dices por esto?:

assert(getprop("ro.product.device") == "galaxys" || getprop("ro.build.product") == "galaxys" ||
getprop("ro.product.device") == "galaxysmtd" || getprop("ro.build.product") == "galaxysmtd" ||
getprop("ro.product.device") == "GT-I9000" || getprop("ro.build.product") == "GT-I9000" ||
getprop("ro.product.device") == "GT-I9000M" || getprop("ro.build.product") == "GT-I9000M" ||
getprop("ro.product.device") == "GT-I9000T" || getprop("ro.build.product") == "GT-I9000T");

Eso si no me equivoco lo que hace es comprobar si el ro.product.device es uno de los que estan puestos, si no da un error.

Es un condicional. Si no existe, entonces muestra error.

Corregirme si me equivoco.
Si lo había visto ahí y también aqui:
assert(package_extract_file("recovery.img", "/tmp/recovery.img")
Supongo que aquí hará lo mismo.
Muchísimas gracias por tu respuesta.
Un saludo

RuralGalaxy
14/08/13, 17:33:25
Pillo sitio! :D

alfrehin
26/10/13, 20:31:05
Hola espectacular foro.... Necesito un aporte de ustedes q veo q estan empapado en el tema. De casualidad ustedes no saben los paso para cocinar una actualización para huawei u8850 vision estoy cansado de buscar una estable y no encuentro... Porfa si tienen algun aporte les agradezco.. E buscado hasta en foros rusos y chino y ninguna es estable.

ChireneDroid7x
26/10/13, 23:41:11
Todo esto esta muy bien, pero me suena a chino y se me escapa de las manos.

:gracias: