TUTORIAL - Crear un update.zip - Meter apps en el sistema

samarkanda

Simdualero de Diamante
12 Oct 2011
3.159
154
2.103
#1
CREAR UN UPDATE.ZIP

Crear un update.zip personalizado para nosotros nos dará la opción de incluir en nuestra rom archivos que no existen en la misma, a través de un parche que se instalará desde el recovery (por supuesto custom).

De esta forma se puede incluir en el parche aplicaciones que queramos que sean de sistema, incluir archivos, eliminar archivos, eliminar carpetas, etc...

En este tutorial, y por empezar con lo más simple, explicaré cómo incluir apps para que sean de sistema.



ESTRUCTURA DEL UPDATE.ZIP

En primer lugar nos creamos una nueva carpeta en el Pc, en el escritorio, por ejemplo. Dentro de esa nueva carpeta tendremos que incluir:

IMPRESCINDIBLES
La carpeta más importante es la carpeta META-INF, que contine unos archivos genéricos con certificados y demás, necesarios.
El principal archivo es el updater-script, que es el que nosotros tendremos que modificar dependiendo lo que queramos incluir en el parche.
/META-INF/
/META-INF/CERT.RSA
/META-INF/CERT.SF
/META-INF/MANIFEST.MF
/META-INF/GOOGLE/ANDROID/update-binary
/META-INF/GOOGLE/ANDROID/updater-script

Esta carpeta META-INF la podemos copiar de cualquier rom previamente descargada.

OPCIONALES (Según lo que se quiera incluir en el parche)
/SYSTEM/
/DATA/


De esta forma en la carpeta SYSTEM incluiremos los archivos que queremos que se incluyan en el parche, para que formen parte del sistema. En la carpeta DATA se incluirán los archivos que queramos incluir en la memoria interna del teléfono.

No es necesario crear estas carpeta si no las vamos a necesitar.

Así, en el caso que vamos a analizar queremos incluir una apk como de sistema. Tendríamos que meter esa apk (previamente descargada), en nuestro parche con la ruta:
SYSTEM/APP/
La carpeta APP tendríamos que crearla dentro del parche.



COMANDOS UTILIZADOS EN EL UPDATER-SCRIPT

Para la edición del updater-script yo utilizo el programa Notepad++. No lo hagáis con el wordpad que os dará errores.
Lo podeís descargar de AQUI.

Vamos a ver qué comandos se utilizan para la edición del updater-script:

Código:
ui_print("       ");

Todo lo que pongamos entre las comillas aparecerá como texto durante la instalación, no afectando al resto de la instalación. Así:
ui_print(" Bienvenido "); se verá como Bienvenido
ui_print("a movilesdualsim"); se verá como a movilesdualsim


Código:
show_progress();
Es para hacer una barra de progreso de la instalación. Nunca me he aclarado mucho con este comando. No lo pongo en mis parches, porque la instalación dura muy poco.


Código:
format("yaffs2", "MTD", "userdata");
Formatea la partición Data. Utilizado para instalaciones de roms completas.


Código:
format("yaffs2", "MTD", "system");
Formatea la partición System. Utilizado para instalaciones de roms completas.


Código:
mount("yaffs2", "MTD", "system", "/system");
Monta la partición System para poder incluir archivos en ella.


Código:
mount("yaffs2", "MTD", "userdata", "/data");
Igualmente monta la partición Data.


Código:
package_extract_dir("system", "/system");
Incluye en la partición System todo lo que tengamos incluído en la carpeta System de nuestro update.


Código:
package_extract_dir("data", "/data");
Incluye en la partición Data todo lo que tengamos incluido en la carpeta Data de nuestro update (si la tenemos)


Código:
unmount("/system");
Desmonta la partición System.


Código:
unmount("/data");
Desmonta la partición Data.


Estos serían los principales comandos, existiendo además comandos para establecer permisos (esto es más complicado), para borrar archivos, para borrar carpetas, etc, etc. No tenéis más que abrir un updater-script de una rom para poder ver esos comandos.

Notad que siempre al final de todos los comandos hay un ; . Si falta alguno- el parche no funcionará.

EJEMPLO DE UN UPDATER-SCRIPT DE UNA ROM COMPLETA

Código:
ui_print("");ui_print("===============================");      
ui_print("    H7-3G.2.3.5-v6.6 final ");
ui_print("");
ui_print("    Created by: haiduongbk");
ui_print("    retocada por samarkanda");
ui_print("===============================");
ui_print("");
show_progress(0.100000, 5);
ui_print("[ ] Format partition: DATA");
format("yaffs2", "MTD", "userdata");
delete_recursive("/sdcard/.android_secure");
show_progress(0.100000, 10);
ui_print("[ ] Mount partition: DATA");
mount("yaffs2", "MTD", "userdata", "/data");
show_progress(0.100000, 15);
ui_print("[ ] Format partition: CACHE");
format("yaffs2", "MTD", "cache");
show_progress(0.100000, 20);
ui_print("[ ] Format partition: SYSTEM");
format("yaffs2", "MTD", "system");
show_progress(0.100000, 25);
ui_print("[ ] Mount partition: SYSTEM");
mount("yaffs2", "MTD", "system", "/system");
show_progress(0.200000, 35);
ui_print("[ ] Installing files: DATA");
package_extract_dir("data", "/data");
package_extract_dir("SDcard", "/sdcard");
set_perm_recursive(0, 0, 0777, 0777, "/data");
show_progress(0.400000, 85);
ui_print("[ ] Installing files: SYSTEM");
package_extract_dir("system", "/system");
symlink("aee_debuggerd", "/system/bin/debuggerd");
symlink("toolbox", "/system/bin/cat", "/system/bin/chmod",
        "/system/bin/chown", "/system/bin/cmp", "/system/bin/date",
        "/system/bin/dd", "/system/bin/df", "/system/bin/dmesg",
        "/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd",
        "/system/bin/id", "/system/bin/ifconfig", "/system/bin/iftop",
        "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice",
        "/system/bin/kill", "/system/bin/ln", "/system/bin/log",
        "/system/bin/ls", "/system/bin/lsmod", "/system/bin/lsof",
        "/system/bin/mkdir", "/system/bin/mount", "/system/bin/mv",
        "/system/bin/nandread", "/system/bin/netstat",
        "/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv",
        "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice",
        "/system/bin/rm", "/system/bin/rmdir", "/system/bin/rmmod",
        "/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent",
        "/system/bin/setconsole", "/system/bin/setprop", "/system/bin/sleep",
        "/system/bin/smd", "/system/bin/start", "/system/bin/stop",
        "/system/bin/sync", "/system/bin/top", "/system/bin/umount",
        "/system/bin/uptime", "/system/bin/vmstat", "/system/bin/watchprops",
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm_recursive(0, 0, 0777, 0777, "/system/etc/init.d");
set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm(0, 0, 06755, "/system/bin/su");
symlink("/system/bin/su", "/system/xbin/su");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm(0, 2000, 0755, "/system/vendor");
set_perm_recursive(0, 2000, 0755, 0755, "/system/vendor/bin");
set_perm(0, 2000, 0755, "/system/vendor/lib");
set_perm(0, 2000, 0755, "/system/vendor/lib/egl");
set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/lib/hw");
set_perm(0, 0, 0644, "/system/vendor/lib/hw/gralloc.mt6573.so");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 1000, 0755, "/system/xbin/busybox");
symlink("/system/xbin/busybox", "/system/bin/busybox");
package_extract_file("installbusybox", "/tmp/installbusybox");
set_perm(0, 0, 0777, "/tmp/installbusybox");
run_program("/tmp/installbusybox");
set_perm(0, 0, 06755, "/system/xbin/librank");
set_perm(0, 0, 06755, "/system/xbin/procmem");
set_perm(0, 0, 06755, "/system/xbin/procrank");
set_perm(0, 0, 0755, "/system/xbin/tcpdump");
show_progress(0.100000, 90);
ui_print("[ ] updating boot image");
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
show_progress(0.100000, 95);
show_progress(0.100000, 100);
ui_print("[ ] Update Completed");
unmount("/system");
unmount("/cache");
unmount("/data");
ui_print("[ ]  Un saludo");
ui_print("[ ] -samarkanda-");


FINALIZANDO

Una vez tengamos todo lo anterior hecho, lo único que nos queda es comprimirlo en zip y pasarlo a la tarjeta , para flashearlo desde el recovery . Le pondremos al zip el nombre que queramos, y nos saltamos la comprobación de firmas.



EJEMPLO

AQUI os dejo un parche para poder meter aplicaciones como de sistema.
Lo único que tenéis que hacer es coger las apps que queráis e incluirlas en la ruta del zip:
system/app
Instaláis desde el recovery y listo.

Estructura del updater-script de ejemplo:
Pues es muy sencillita para no complicarnos ahora que estamos empezando:
Código:
ui_print("===============================");      
ui_print("      PARCHE PARA INCLUIR");
ui_print("  APLICACIONES EN EL SISTEMA");
ui_print("     creado por Samarkanda");
ui_print("===============================");
ui_print("");
mount("yaffs2", "MTD", "system", "/system");
ui_print("[ ] Instalando archivos: SYSTEM");
package_extract_dir("system", "/system");
unmount("/system");
ui_print("[ ] Un saludo");



Espero os guste este tutorial.

Las opciones a la hora de hacer un update.zip, son innumerables.

Un saludo

P.D. Hala @breakk ya he echado la tarde con esto
:omg:

Agradecimientos al foro de HTCMANIA, en el que me he basado un poco para hacer el tutorial.
 
Última edición por un moderador:

Breakk

Simdualero de Diamante
31 May 2010
11.943
20.170
10.430
#2
Muy buen tutorial. ¿Porque no lo has puesto esta mañana o ayer?, anda que no peleé con el script del parche, je,je,je. Es broma.

Gracias crack.
 

samarkanda

Simdualero de Diamante
12 Oct 2011
3.159
154
2.103
#3
Muchas gracias @Breakk.
Poco a poco iré haciendo tutoriales de todo lo que sé o medio sé, para ver si alguien coge el relevo y me jubilo, XD. No creo que me jubile, me gusta el follón este. Pero alguna ayudita nueva siempre viene bien, para los que estamos siempre liados, como @eduardomo, @hammy, tú ...

Un saludo
 
Última edición por un moderador:

jcestal

Simdualero de Platino
8 Nov 2011
273
35
1.075
Castilla-León
#4
Buen tutorial, ya que hay poca información acerca del updater-script, muy interesante para los que están empezando y un punto de partida para modificar Roms completas.

Una duda: ¿Por que determinadas APP dan error de proceso cuando la instalas como aplicación de sistema?

Saludos
 

pauete

Simdualero de Diamante
12 May 2010
9.186
1.280
4.967
#5
Hasta hoy no había leído este hilo con atención.
Gracias @samarkanda.
Para los MTK6575 no sirve no? Creo que no montan en "yaffs2"
 
Última edición por un moderador:

samarkanda

Simdualero de Diamante
12 Oct 2011
3.159
154
2.103
#6
@pauete, la verdad que no lo sé, pero supongo que si la versión de los MT6575 es la 2.3.6 sí que sirva. Todo es probar metiendo una app y a ver si la instala.
Otra cosa ya es que lleven ICS. Entonces ni de coña.
 
Última edición por un moderador:

pauete

Simdualero de Diamante
12 May 2010
9.186
1.280
4.967
#7
El otro día vi una herramienta para desempaquetar system.img
"unyaffs.rar": http://www.mediafire.com/?4r04871vr8mc7oq

Se descomprime la carpeta contenida "img-unpaker" y dentro de ella copiamos un system.img
Sobre este archivo clickamos el botón derecho del ratón y le decimos "abrir con" y elegimos el programa "unyaffs.exe".
El system.img empieza a descompilarse en ese mismo directorio.

Creo que lo que decía @Breakk en otro hilo era convertir un nandroid en un system.img
No sé si es posible, supongo que sí.
Porque el system.img que hay dentro de un nandroid no podría flashearse con FlashTool ?
 
Última edición por un moderador:
31 May 2011
8.134
5.590
7.085
Elche
#8
Porque el system.img que hay dentro de un nandroid no podría flashearse con FlashTool?
En el Lenovo A60 con MT6573 y android 2.3.5 si que funcionaban los system.img del nandroid para pasarlos con el flashtool pero en 2.3.6 no lo he probado.

saludos y paz.
 

pauete

Simdualero de Diamante
12 May 2010
9.186
1.280
4.967
#9
Creo que los tiros van por si es Yaffs2 (MTK6573) o ext2,3(MTK6575)

El unyaffs.exe sólo sirve para MTK6573.
 

Breakk

Simdualero de Diamante
31 May 2010
11.943
20.170
10.430
#10
Creo que los tiros van por si es Yaffs2 (MTK6573) o ext2,3(MTK6575)

El unyaffs.exe sólo sirve para MTK6573.
Yo diria que unyaffs sirve para archivos con particiones yaffs2, pero vale para mas modelos de mtk. Por ejemplo en el 890D alcatel yo si podia abrirlo y el micro era mtk 6516.

Saludos.
 

pauete

Simdualero de Diamante
12 May 2010
9.186
1.280
4.967
#11
Última edición por un moderador: