El rincón del Updater-script
Desde el primer updater-script que ví, sentí curiosidad por saber que lenguaje era usado y que posibilidades ofrecía este Script. Llevo unas cuantas horas hechadas al tema de manera paralela junto con los demás trabajos y he ido haciendo pruebas para tratar de comprender algo más sobre este lenguaje.
Aún me quedan varios aspectos por tratar de comprender completamente, pero estoy seguro que entre todos seremos capaces de terminar de hacerlo.
Updater-script:
Archivo que gobierna el proceso de flashear un archivo *.zip, principalmente sobre el formato y la sintaxis utilizada en el updater-script.
En cristiano: Es un Script escrito en el Lenguaje Edify con el cual se pueden dar órdenes para realizar cualquier proceso de instalación, actualización, reparación, borrado, etc...
Edify: Es el lenguaje de Script para actualizaciones que se interpreta por update-binary. Es el sucesor del lenguaje de escritura Amend.
1. updater-script: Es sólo un archivo de texto que contiene todos los comandos que le dice al Recovery qué hacer con el archivo *.zip. El Script de actualización se escribe en formato UNIX y con el lenguaje de escritura Edify.
2. update-binary: Es un binario que requiere el Recovery para traducir el formato legible por el usuario del updater-script a formato legible por el sistema para la ejecución del Script de actualización en nuestro dispositivo.
Comenzamos:
*Resaltar que el updater-script debe acabar con una línea en blanco al final del documento.
Síntaxis:
- Se debe usar Lenguaje Edify y formato UNIX.
- Puede utilizarse libremente el espacio en blanco (Tab, LF 0x0a, pero no CR 0x0d).
- Los comentarios se pueden usar en cualquier línea con #.
- Todos los comandos se terminan con un punto y coma. Las cláusulas (en ifelse) pueden contener cualquier número de comandos, cada uno terminado con un punto y coma.
- Las cadenas suelen ser delimitadas con comillas dobles.
- Los caracteres /n, /t, /” y // se entienden, al igual que escapes hexadecimales como \x4a.
- Los números son realmente sólo cadenas y generalmente no están delimitados.
- Los valores lógicos son 't' para verdadero o ''f” para falso.
- Los operadores de comparación son == (string igual), =! (string no igual).
- Los operadores lógicos son || (Lógico o), && (lógico y), ! (No lógico).
- El operador de concatenación es +. (Precaución: 2+2==22).
- Las palabras clave condicionales: if, then, else y endif funcionan si no están citados. La macro ifelse se puede utilizar en su lugar.
Operaciones de Disco:
- format(fs_type, partition_type, device, fs_size, mountpoint) - se puede usar "0" para fs_size (toma la partición entera).
- mount(fs_type, partition_type, device, mountpoint)
- unmount(mountpoint)
- is_mounted(mountpoint)
- wipe_cache()
Operaciones de Imagen:
- write_raw_image(filename, device)
- write_firmware_image
Operaciones de Archivo:
- package_extract_file(source, destination) - devuelve "t" si es correcto y "" si falla (e.j. si el archivo no existe).
- package_extract_dir(source, destination).
- delete(file) – Elimina un archivo.
- delete_recursive(directory) – Borra completamente un directorio.
- symlink(target, link0, ...) – Crear cualquier número de enlaces a un destino.
- set_perm(user, group, mode, file) – Realiza un chown, chmod en un archivo.
- set_perm_recursive(user, group, mode, directory) – Realiza un chown, chmod en todos los contenidos de un directorio.
- getprop(key) – Devuelve un valor de cadena de la clave asociada de las propiedades del sistema.
- file_getprop(file, key) – Devuelve un valor de cadena de la clave asociada de un archivo específico.
- sha1_check(file) - Devuelve el hash de archivo sha1.
- sha1_check(file, sha1_hex, [sha1_hex2, ...]) - Devuelve el hash que coincida, si no hay coincidencias devuelve "".
Operaciones de Parcheo:
- apply_patch(srcfile, tgtfile, tgtsha1, tgtsize, sha1_1, patch_1, ...)
- apply_patch_check(file, [sha1_1, ...])
- apply_patch_space(bytes)
- run_program(program, arg0, ...) - Devuelve el código de salida del programa.
Control:
- assert(condition0, ...) – Aborta e imprime en cualquier condición falsa.
- abort(message)
- ifelse(condition, trueclause, falseclause) – condicional, falseclause es opcional.
Predicados:
- is_substring(substring, string) – Comprueba si la cadena contiene subcadena en cualquier lugar.
- less_than_int(x, y) – Comprueba si x<y cuando se considera como enteros.
- greater_than_int(x, y) – Comprueba si x<y cuando se considera como enteros.
Información para Usuarios:
- show_progress(fraction, seconds) – Avanzar la barra de progreso una cantidad fraccionada durante un período de segundos.
- set_progress(fraction) – Anaza la barra de progresos la fracción indicada.
- ui_print(message0, ...) – Mostrar cualquier información en pantalla.
- sleep(seconds) – Pausar un determinado número de segundos indicados.
...
Última edición: