lunes, 19 de diciembre de 2016

[DEV Básico] Como crear un archivo zip flasheable por recovery

¡Hola! Hoy le traigo un tutorial muy básico y sencillo, se trata de cómo crear un archivo que se pueda instalar por recovery, ya sea una ROM, un MOD, o tan solo un archivo como un build.prop o un arreglo.
Para esto recomiendo que lo hagan desde una PC, aunque se puede hacer desde el celular con un explorador ROOT usando las herramientas del mismo, pero resulta más complicado. En caso de que lo hagan con el celular, usen ES File Explorer que ya contiene todas las herramientas.


Requisitos:

- Editor de texto Notepad++ [Descarga aquí] e instalar como un programa cualquiera
  (Se puede usar Bloc de notas, pero no está creado para diferencia lineas)
- WinRAR o 7zip [Cualquier empaquetador de zips sirve]
- Saber un mínimo sobre  las particiones [System y Data especialmente, les explico a continuación]
- Un backup de su sistema antes de flashear el archivo, por cualquier fallo es mejor prevenir...


Te doy algunos conocimientos... para saber como ubicar

Como dije antes, ahora les paso a explicar lo básico sobre las carpetas de Android, no explico todas pero si las que más utilizarás.
Empezamos por las particiones [o directorios], estos son carpetas donde se ubican diferentes archivos que hacen funcionar tu sistema. Hay muchos y con distintos nombres, por los que les explicaré los más importantes y su contenido.

system
Es donde se almacena todos los archivos de tu sistema operativo [S.O.], es decir, donde se encuentra almacenado Android.
En su contenido podemos ver varias carpetas y archivos, las cuales contienen diferentes funciones:
  • app: es donde se almacenan aplicaciones que no requieren muchos permisos
  • priv-app: se almacenan aplicaciones específicas que requieren más permisos y son más esenciales para el sistema.
  • bin: es donde se encuentran la mayoría de comandos de linux, no recomiendo tocarla.
  • etc: algunos Drivers [controladores] que hacen funcionar distintas cosas como el Bluetooth, el Wi-Fi, entre otras cosas.
  • fonts: acá se almacenan las fuentes utilizadas por el sistema y distintas aplicaciones
  • framework: aquí se almacenan muchos aspectos del apartado gráfico del sistema, así como algunas funciones.
  • lib: estos son archivos que hacen funcionar aplicaciones o ciertas funciones del sistema, como lo puede ser el audio, ecualizador, codecs, etc.
  • lost+found: no contiene nada importante, literalmente.
  • media: acá se almacena todo lo que es el apartado multimedia del sistema, no controladores, sino archivos. Entre ellos encontramos la animación de inicio [Bootanimation], los sonidos al bajar y subir volumen, al bloquear la pantalla, al tomar una foto, etc.
  • usr: contiene información sobre los botones y métodos de entrada.
  • vendor: información sobre el celular y el fabricante.
  • xbin: más comandos de linux.
  • build.prop: acá tenemos las configuraciones esenciales del sistema, tanto de hardware y software. Algunos ejemplos son el número de SIMs que podemos insertar, N° de versión de Android, nombre del dispositivo, etc.
  • addon.d: archivos adicionales o temporales.
data
Es donde se almacena todos los archivos generados por el usuario y aplicaciones, así como también configuración. Podemos encontrar las apps, contraseñas guardadas de Wi-Fi, entre más cosas. La mayoría de archivos son generados en el primer inicio del dispositivo, luego de un Factory Reset.
En su contenido podemos ver varias carpetas y archivos, las cuales contienen diferentes funciones:
  • app: acá se guardan las apps instaladas
  • media: acá encontrarás el acceso a los almacenamientos [Interno y a los datos de algunas apps]
  • Las demás carpetas ya tienen otras funciones, ninguna reelevante.
efs
Datos únicos de identificación de cada dispositivo. Acá es donde se almacena el IMEI. Sin IMEI, no hay comunicación con la Red de telefonía ni con la/s SIM/s.
En caso de perderlo, se puede clonar de otro dispositivo pero tiene algunos peligros de hacerlo. También se puede recuperar de algún backup previo.

storage y mnt
Acá se encuentran los medios de almacenamiento externo e interno, además de algunos extras.


Directorios y archivos restantes
Estos son el Kernel, el Modem, el recovery entre otros. No tocar a menos que sepas lo que haces. 

Vamos al grano, el tutorial

1) Empezamos creando la carpeta donde vamos a ubicar los archivos, en mi caso la llamaré "desarrollo", ustedes le eligen el nombre que quieran.

2) Dentro de esta carpeta, debemos de copiar la carpeta META-INF. Esta carpeta la puedes descargar o sacarla de otro zip que tengas, como el de una ROM, porque el contenido de ésta es esencial, ya que ahí se encuentran los comandos para instalar (que luego modificaremos).

Para descargar la carpeta abra el hipervínculo, lo descarga y luego lo descomprime. Lo dejo por AFH, así que le deben dar al botón verde, esperan a que cargue y luego de vuelta al verde.
Descargar por AFH: https://www.androidfilehost.com/?fid=385035244224406591

3) Estando dentro de la carpeta inicial [La cual yo le puse "desarrollo"] vamos a crear las carpetas donde deberán ir los archivos cuando nosotros instalemos el zip, es decir, donde el archivo deberá ir en nuestro celular. Estas carpetas pueden ser data, system, efs, etc.
Ponemos en caso que queremos instalar un build.prop, este archivo lo sacamos de system, por lo que deberá volver ahí. En este caso, deben de crear la carpeta system y colocar el archivo dentro. Si quieren instalar archivos que vayan dentro de system/app, system/priv-app o cualquier otra carpeta se deben de crear dentro de la misma y ubicarles los archivos dentro
Lo mismo sería con data y cualquier otra carpeta.

4) Vamos a volver a la carpeta inicial, [es a la que yo le puse "desarrollo"] y entramos dentro de META-INF. Dentro vamos a entrar a la carpeta com -> google -> android. Acá vamos a abrir el archivo updater-script con el editor Notepad++ para modificarlo.

5) Agregar líneas de comandos. Les diré los esenciales y algunos básicos, pueden encontrar más en Google.
Bueno, una vez en el archivo vamos a escribir los comandos, algunos tienen un orden específico y otros se pueden ubicar en cualquier lado.
Eso sí, cada comando tiene un uso especial, y luego de terminarlo se debe poner un ; para que no de ningún error.
Otra cosa que se debe de tener en cuenta, es que todos estos comandos SE DEBEN ESCRIBIR ya que si los copiamos y los pegamos nos dará error al querer flashearlo.

ui_print
- sirve para que se escriban mensajes en la pantalla. Unos ejemplos de uso serían:




run_program("/sbin/busybox", "action", "/partition");
- es utilizado para montar particiones. Esto es requerido para poder realizar cambios y debe de ser utilizado antes de realizarlos. Entonces, si queremos mover un archivo a system, debemos de montar system, y una vez que termine esa acción se debe desmontar. 

El uso de este comando es simple, y solo requiere unos pasos:
a) Especificar la acción: debemos reemplazar la palabra action por la acción que se quiere lograr. En caso de que queramos montar la partición, usamos mount, y en caso de desmontarla usamos unmont.

b) Especificar partición: debemos sustituir partition por la partición a la que se le realizará la acción. En caso de querer montar la carpeta system, ponemos system. En caso de querer montar la carpeta data, ponemos data. También se puede con efs, dev, sys, etc.

Les dejo un ejemplo:




package_extract_dir("de", "/a");
- este es uno de los comandos fundamentales, ya que nos permitirá que los archivos se copien a donde nosotros queremos.

Su uso es muy simple y sólo requiere cambiar palabras.
a) Se debe reemplazar la palabra "de" por el nombre de la carpeta a copiar del zip, en este caso yo quiero copiar la carpeta system del archivo al sistema de mi celular. Quedaría de la siguiente forma: "system"
b) Se debe reemplazar "/a" por la partición del celular a donde se extraerá. En este caso, lo voy a extraer a la carpeta system por lo que quedaría "/system"
Les dejo como me ha quedado finalmente, uniendo todo:


delete_recursive("/particion/carpeta");
- este comando nos permite borrar carpetas de una determinada ubicación, y se configura de la siguiente manera:
a) Se debe sustituir las palabras por el directorio completo de la carpeta a borrar.
Les dejo el siguiente ejemplo, donde voy a borrar la carpeta app, que se encuentra dentro de system:


delete("/partición/carpeta/archivo.extension");
- Bueno, este comando es para eliminar un archivo en específico. Para utilizarlo se debe reemplazar la parte de /partición/carpeta/archivo.extension por la ruta de acceso al archivo a borrar, incluyéndolo con su extensión.
Por si no se termina de entender, les dejo un ejemplo en el que elimino una app de system/app.


show_progress(0.2, 1);
- este comando nos permite hacer avanzar o retroceder la barra de progreso que se encuentra en el recovery. Su funcionamiento es simple: lo debemos de situar donde nosotros queramos que avance o se retrase, y para modificar su efecto se deben de cambiar los números:
el 1); del final significa el número total, es decir, donde la barra estaría llena.
el (0.2, es hasta donde se llenaría la barra en el momento en que se ejecuta el comando. Sería la fracción del 1);

Sabiendo esto, vamos a poner el:
0.1 para que se llene sólo un 10%
0.2 para que se llene un 20%
0.3 para que se llene un 30%
y así sucesivamente hasta llegar a (1, 1); donde la barra se llenaría.

Les dejo un ejemplo ya que no es fácil de entender escrito
En este ejemplo muestro que la barra de progreso antes de extraer los archivos estaría al 20%. Luego de extraer el archivo, la barra se encontraría al 100%


Acá les muestro una Captura de pantalla donde muestro un Updater-Script terminado para un MOD, donde se aprecian varios comandos:


6) Una vez ya hayamos terminado de hacer el updater-script, lo guardamos y salimos del programa.

7) Vamos ahora a comprimir el contenido de la carpeta principal (La que yo le puse de nombre desarrollo) usando WinRAR o 7Zip. Cada programa tiene su forma de hacerlo, yo en mi caso creé un archivo WinRAR ZIP, lo abrí y luego coloqué los archivos dentro de el. Usé en modo de compresión "La Mejor" para que ocupe menos espacio y por lo tanto sea más liviano el peso del archivo.
Recuerda que el tipo de archivo debe de ser ZIP, cualquier otro usado no será funcional en el recovery. También se puede usar un zip ya creado, borrar su contenido y arrastrar este nuevo.

8) Ya sólo queda probarlo, así que realiza un backup de tu sistema y luego lo instalas. Te recuerdo que necesitarás un Custom Recovery para que no te de ningún error. Con esto, ya habrías terminado de crear tu ZIP Flasheable 😊

- Fin del Tutorial -

Bueno les dejo este tutorial hasta acá. espero les haya servido para empezar a crear sus flasheables y aportar para su celular... Hay más comandos para ejecutar binarios y ejecutables, pero ya requieren un nivel superior para usarlos y no los pongo porque este tutorial se sitúa para los que recién empiezan.

¡Hasta pronto!

6 comentarios:

  1. con esos archivos sirve para crear zip para cualkier otro celular o sólo del samsung????

    ResponderEliminar
  2. para usar este metodo
    es necesario desactivar el bootloader?

    ResponderEliminar
  3. BUENAS HICE EL ESCRIP PERO CUANDO ESTOY EN EL TWRP INSTALANDO EL ZIP ME SALE ESTE ERROR

    skipping md5 check no md5 file found error flashing zip

    CUAL SERA LA SOLUCION

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. hola, una consulta no se mucho de esto solo aprendo con lo que veo en youtube y ahora necesito saber si puedo hacer un archivo zip con un apk para instalar desde la recovery....gracias ojala me ayuden

    ResponderEliminar