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

  • Iniciador del tema samarkanda
  • Fecha de inicio
samarkanda

samarkanda

Diamante
12 Oct 2011
3.158
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

Breakk

Diamante
Cocinero
31 May 2010
11.946
20.171
10.430
UMI IRON
#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

samarkanda

Diamante
12 Oct 2011
3.158
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

jcestal

Platino
8 Nov 2011
274
37
1.175
Castilla-León
Meizu MX6
#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

pauete

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

samarkanda

Diamante
12 Oct 2011
3.158
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

pauete

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:
zoyB

zoyB

Diamante
Cocinero
31 May 2011
8.224
5.651
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

pauete

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

Breakk

Diamante
Cocinero
31 May 2010
11.946
20.171
10.430
UMI IRON
#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

pauete

Diamante
12 May 2010
9.186
1.280
4.967
#11
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.
Sí, @Breakk pero los MTK6575 ya tienen particiones ext4

TUTORIAL - Crear un update.zip - Meter apps en el sistema img822-imageshack-us_img822_1612_201206192052-png.166774


El pro que posteó @chaskaman en este otro hilo sólo monta en yaffs2.
 
Última edición por un moderador:

¿Qué tecnología no debe faltar en tu próximo móvil?

  • NFC

    Votos: 181 46,3%
  • Carga inalámbrica

    Votos: 141 36,1%
  • Carga ultra rápida

    Votos: 225 57,5%
  • 5G

    Votos: 171 43,7%
  • Al menos 3 cámaras principales

    Votos: 112 28,6%
  • Sensor TOF

    Votos: 70 17,9%
  • Lector de huellas

    Votos: 204 52,2%
  • USB tipo C

    Votos: 209 53,5%
  • Bluetooth

    Votos: 188 48,1%
  • Pantalla flexible

    Votos: 34 8,7%

Miembros conectados

  • enrique.monfort
  • Juan89Fran
  • tecnoadicto
  • segnini
  • norte
  • menguelez
  • debiu
  • Pedromo
  • HellBoii
  • Christian Camaton
  • Kurtz
  • mthump23
  • miguel.tranchete
  • deleduran
  • dhino79
  • raleo
  • 666 Rojo
  • birrafria
  • f_speed
  • ihesu
... y 27 más.