Ver Mensaje Individual
  #1  
Viejo 01/09/11, 08:55:57
Array

[xs_avatar]
intronauta intronauta no está en línea
Monguer.
· Votos compra/venta: (1)
 
Fecha de registro: ago 2009
Mensajes: 5,345
Tu operador: Pepephone

rom [Tutorial] Crear un tema universal para cualquier ROM. Universal Flasher Tool 4.4 (10/06/2014)

*Temporalmente me haré cargo de mantenerlo actualizado en ausencia de jrsoft, el creador original del hilo



¿Qué es Universal Flasher Tool?

UFT es una completa plantilla basada en parte en vrtheme, que sirve para poder crear de la manera más sencilla posible un paquete flasheable desde el recovery.

Por un lado hace la misma función que los zips tradicionales flasheables desde el recovery volcando archivos al sistema, y por otro es capaz de aplicar temas metamorph. Todo en uno.
Al mismo tiempo que flashea, registrará todas las modificaciones realizadas en el sistema y creará un backup de seguridad en formato zip (listo para ser flasheado) que hace de "desintalador" de todos los cambios realizados por UFT en ese flasheo, de manera que sea lo que sea lo que flasheemos, podemos restaurar a una situación anterior solo reiniciando en el recovery y flasheándo dicho backup de seguridad.

UFT utiliza la misma lógica y estructura que cualquier otro zip para "volcar" archivos en el sistema, y funciona practicamente igual que metamorph para inyectar archivos dentro de apks o jar. Solo debemos recrear las rutas completas dentro de su correspondiente carpeta (MORPH o XTRAS) en función de lo que queramos hacer.




¿Qué ventajas tiene UFT frente a metamorph o los zips flasheables tradicionales?
  • Primero lo obvio: que puedes hacer varias operaciones en un mismo proceso y desde el recovery ;)
  • Podemos ahorrar mucho espacio al poder aplicar temas del tipo metamorph, ya que no es necesario incluir .apk completas para modificar solo algunos de sus archivos internos. Podemos inyectar solo los necesarios y de paso evitar posibles problemas de compatibilidad dependiendo de la versión de la aplicación sobre la que apliquemos. Y si necesitamos añadir apks completas, también podemos ;)
  • Bajo ciertas circunstancias se pueden crear temas mods universales compatibles con varios terminales.
  • Al poder incluir archivos completos junto con temas morph, permite a un cocinero el poder crear actualizaciones del sistema o addons de pocos megas.
  • No depende de aplicaciones externas como metamorph, porque se flashea directamente desde recovery.
  • El autobackup flasheable te permite deshacer los cambios con seguridad y evitar bootloops sin necesitar acceso a un PC, ni hacer nandroids backups de cientos de megas. Solo debes reiniciar en el recovery y flashearlo.


¿Qué no hace UFT?

A pesar de ser una herramienta bastante flexible, la idea desde su concepción es no tener que modificar el updater-script en ningún momento, así que en un principio no está diseñada para:
  • Flashear kernels, recoveries, modems o "imágenes" similares.
  • Formatear/borrar particiones.



#######



Conceptos básicos para crear y editar tu propio tema o MOD.
  • Descargar la plantilla desde link ubicado al final de este post. Procura trabajar siempre con la última versión.
  • Herramientas recomendadas: 7zip para incluir los archivos y navegar por el sistema de archivos (también se puede usar winzip o winrar sin problema) y Notepad++ o cualquier otro editor de texto plano para editar el nombre del mod.
  • Una vez descargada y abierta la plantilla con doble-click observaréis varias carpetas dentro y un par de archivos en la raíz.


Archivo UFT.config:


Este es el archivo de configuración de la plantilla donde debemos configurar obligatoriamente un par de parámetros y tendremos la posibilidad de activar una serie de funciones opcionales si nos interesase.
NO utilizar el block de notas de windows, recomendable Notepad++ o similar.
CONFIGURACIÓN OBLIGATORIA
[SDCARDS]

Se debe establecer la ruta al almacenamiento interno en el recovery (sdcard):
  • DEFAULT_INTERNAL_SDCARD=/data/media/0


Estas son las rutas más usadas para las "sdcard", pero recuerda que debes saber cómo trabaja tu sistema/recovery y establecer la ruta correcta o tendrás problemas!:

/emmc || /sdcard || /data/media || /data/media/0

Ten en cuenta que /emmc y /sdcard son las rutas genéricas, pero los nuevos terminales como los Nexus, SGS3, HOX, etc, usan /data/media como almacenamiento interno, y desde Android 4.2 y el sistema multiusuario, en estos terminales se establece /data/media/0 o /data/media/1 dependiendo del usuario.



[MOUNTPOINTS]

Por otro lado debemos establecer como montar cada una de las particiones sobre las que queremos trabajar
Pero al contrario que en los zips tradicionales, UFT requiere que se establezcan dichos montajes en UFT.config y no en el updater-script, ya que necesitamos esos parámetros para el autobackup!.

Por defecto se establecen los montajes genéricos de /system y /data.
  • MOUNT1:mount /system
  • MOUNT2:mount /data
Si necesitas trabajar en otras particiones como por ejemplo /preload en los SGS2, debes añadir el comando completo para montar esa partición siguiendo la serie numérica en MOUNTX:, en este caso sería:
  • MOUNT3:mount /dev/block/mmcblk0p12 /preload


Ten en cuenta que si añades nuevas particiones, el método abreviado de montaje que viene predefinido en UFT para montar system y data (mount /system y mount /data) como norma general no se aplica para todas las particiones, así que para el resto de particiones debemos escribir el comando completo de montaje tipico de linux, como el usado en este ejemplo para montar /preload.




CONFIGURACIÓN OPCIONAL
*En un principio estas opciones están preconfiguradas para realizar las operaciones más comunes, solo se debe modificar o activar si realmente lo necesitamos o nos interesa
  • MOD_VERSION=nombre del mod que se mostrará en las propiedades de sistema a continuación del nombre de la rom. Se recomienda no poner un nombre muy largo y tratar de evitar en la medida de lo posible los espacios en blanco. Puede ser interesante para indentificar temas completos o actualizaciones importantes de una rom (si ese fuera el uso que se le da a UFT), y no recomendable para pequeños mods.
  • MOD_ZIPNAME=aquí pondremos un nombre para identificar el archivo del backup (si tenemos habilitada dicha función, ver más abajo). Por ejemplo, podemos poner "Toggles Blue 2.0" (sin comillas) para identificar el nombre del mod , y el backup de restauración que se creará en la carpeta /UniversalFlasher para desinstalar el mod se llamará UNDO_Toggle_Blue.2.0_FECHA_HORA.zip. Así tenemos identificado específicamente dentro de la carpeta /UniversalFlasher cada backup realizado por UFT , evitando posibles confusiones. Si no se especifica ningún nombre, el backup de restauración se llamará UNDO_FECHA_HORA.zip
  • CLEAN_MORPHING=no (solo inyectará archivos si existen previamente, es decir, al aplicar temas metamorph solo sobrescribirá archivos ya existentes dentro de los archivos apk o jar, e ignorará lo que no. En condiciones normales no es necesario habilitarlo)
  • V4_MORPHING=yes (soporte para gestionar compatibilidad con carpetas -v4 existentes en algunas aplicaciones de sistema al aplicar temas metamorph. Muy recomendable mantenerlo activado).
  • DO_BACKUP=yes (activa o desactiva la creación de la copia de seguridad flasheable desde recovery para restaurar el tema existente. Muy recomendable mantenerlo activado).
  • LOG_ENABLED=yes (activa o desactiva la creación de un archivo log con los resultados del proceso. Muy recomendable mantenerlo activado).
  • SCREEN_LOG=yes (muestra el proceso en la pantalla del recovery o no. Los avisos importantes siempre se muestran aunque se desactive la opción. Muy recomendable mantenerlo activado).
  • WIPE_DALVIK_CACHE=yes (borra la dalvik cache si tu mod lo requiere para evitar conflictos. Recomendable).
  • MULTIPLATTFORM=no Esta opción permite hacer mods para roms stock y cyanogemod en un mismo zip, ya sea en temas metamorph o en archivos completos. Si estás interesado en activar esta función, recuerda que cuando necesites añadir un mismo recurso que deba ser específico para cada sistema, como por ejemplo añadiendo un resources.arsc, un classes.de, un png, un xml, etc,.. o incluso una apk completa diferente para cada sistema, debes identificar con el prefijo CMOD# el que corresponda al sistema cyanogen. El proceso detectará si un mismo archivo tiene su versión con prefijo y aplicará el que corresponda según la rom desde la que se flashee. Y por lo tanto, si no se detecta que un archivo tenga su correspondiente duplicado con prefijo, se asume que es genérico para ambos sistemas. Por ejemplo:

    /MORPH/Phone.apk/res/drawable/CMOD#blublublu.png (se aplicará para la cyanogenmod, se ignorará en stock)
    /MORPH/Phone.apk/res/drawable/blublublu.png (se aplicará para la stock, se ignorará en cyanogenmod)
    /MORPH/Phone.apk/CMOD#classes.dex (se aplicará para la cyanogenmod, se ignorará en stock)
    /MORPH/Phone.apk/classes.dex (se aplicará para la stock, se ignorará en cyanogenmod)
    /MORPH/Phone.apk/res/drawable-hdpi/blabla.png (al no haber versión con prefijo, se aplicará en ambas)

    /XTRAS/system/etc/CMOD#blablabla.xml (se aplicará para la cyanogenmod, se ignorará en stock)
    /XTRAS/system/etc/blablabla.xml (se aplicará para la stock, se ignorará en cyanogenmod)
    /XTRAS/data/app/CMOD#blablabla.apk (se aplicará para la cyanogenmod, se ignorará en stock)
    /XTRAS/data/app/blablabla.apk (se aplicará para la stock, se ignorará en cyanogenmod)
    /XTRAS/data/blublublu.xml (al no haber versión con prefijo, se aplicará en ambas)


Archivo README.txt:

POR FAVOR, NO BORRAR ESTE ARCHIVO BAJO NINGÚN CONCEPTO
Incluye algunas indicaciones adicionales sobre el funcionamiento y la licencia.
Es muy recomendable echarle un vistazo si necesitamos orientación de cómo funciona UFT y no tenemos acceso a este hilo (en inglés).



Carteta /tools:

Es la carpeta donde se han colocado los scripts y archivos binarios necesarios para que funcione UFT. No es necesario tocar nada de esta carpeta.



Carpeta /XTRAS:

En esta carpeta pondremos los archivos que queramos volcar al sistema recreando sus rutas de destino, no tiene ningún misterio. Solo debemos recrear la ruta donde queremos volcar los archivos y el sistema se encarga del resto. Digamos que lo que pongamos aquí se copia y se pega donde le digamos, no tiene otra función. Pueden ser aplicaciones, wallpapers o lo que sea.




Carpeta /MORPH:

Esta es la carpeta donde incluiremos los temas "morph" (como los usados en metamorph), donde básicamente lo que hacemos en inyectar cualquier archivo dentro de apks o jar, solo debemos recrear las rutas concretas.

ATENCIÓN: tematizar una aplicación NO de sistema en /MORPH/data/app/myapp.apk supone cambiarla la firma digital, así que desde ese momento no se podrá actualizar desde el market ni os aparecerá instalada en el market (es como si se hubiera instalado por 'otros medios' no reglamentarios...). Por lo tanto, no recomendamos tematizar ninguna aplicación descargada del market ya que rompemos la firma digital. Estáis avisados, que no vengan luego los lamentos...

Por cada aplicación que se desee tematizar o modificar, hay que abrir una nueva carpeta con el nombre completo de la apk o jar (por ejemplo debemos crear la carpeta /Contacts.apk si se desea modificar la aplicación de sistema Contacts.apk).
Es necesario respetar el uso de mayúsculas/minúsculas.
Dentro de cada una de estas carpetas hay que respetar las rutas lógicas que existen dentro de las aplicaciones, por lo que los archivos habría que situarlos en carpetas llamadas /res/drawable/..., /res/drawable-hdpi/..., etc...

Es la misma estructura de un tema metamorph, por lo que cualquier tema metamorph es fácilmente convertible simplemente arrastrando carpetas, pero a diferencia de cómo funcionan los temas metamorph, aquí no es necesario crear ningún archivo de control ni nada por el estilo y el nombre de la carpeta de la apk que vamos a modificar, debe incluir su extensión. (Por ejemplo, en Metamorph sería la carpeta "Contacts", y en UFT es "Contacts.apk")





Ejemplo básico sobre cómo quedaría la estructura:
Código:
/MORPH/system/app/Contacts.apk/res/drawable-hdpi/***.png
/MORPH/system/framework/framework-res.apk/resources.arsc
/MORPH/system/framework/android.policy.jar/classes.dex
/MORPH/system/app/Settings.apk/res/drawable/**.xml
/MORPH/data/app/jkay.apk/res/drawable-hdpi/**.png
/MORPH/preload/symlink/system/app/SystemUI.apk/res/drawable-hdpi/***.png


/XTRAS/system/framework/framework-res.apk
/XTRAS/system/media/bootanimation.zip
/XTRAS/system/etc/gps.conf
/XTRAS/sdcard/Wallpapers/MILF.jpeg
/XTRAS/data/app/flashplayer.apk
/XTRAS/preload/symlink/system/app/MusicPlayer.apk



Tanto para aplicar MORPH como XTRAS:
  • si queremos trabajar en la sdcard, podemos mantener el nombre de la carpeta con el genério "sdcard" y dejar que el proceso renombre la carpeta al nombre real dependiendo de lo que establecimos en UFT.config (sea /emmc/, /data/media/0, etc...)
  • recuerda que debemos montar en UFT.config todas las particiones sobre las que queremos trabajar!




Autobackup

Si el mod tiene activada en UFT.config la realización de un backup de seguridad con DO_BACKUP=yes, durante el proceso de aplicación se irán guardando todos los cambios realizados en el sistema y empaquetados en un zip flasheable compatible con recoveries CWM o TWRP a modo de restauración. Es muy recomendable mantenerlo activado por si hay problemas de compatibilidad del mod o se quiere volver a una situación anterior y poder revertir los cambios. Este backup se guardará en la carpeta UniversalFlasher dentro de la sdcard sobre la que estamos trabajando, y su nombre será UNDO_fecha_hora.zip



Logs del proceso

Tenemos 3 logs disponibles:
  • Si hay errores montando particiones o detectando la sdcard se creará un log en /cache/UFT.log, si no se producen esos errores, no se creará
  • Si tenemos activado la creación de un log en UFT.config, en la carpeta UniversalFlasher se guardará un archivo con el log del proceso en sí
  • El propio recovery normalmente genera en /cache/recovery/ o /tmp/ un log del último flasheo realizado , depende del recovery, incluso algunos tienen una opción específica para copiarlo a la sdcard.

Siempre es recomendable echarles un vistazo, sobre todo si hay cosas que no se aplicaron como debieran.

Si quieres reportar errores o no sabes interpretarlos, sube por aquí todos los logs posibles de los citados antes para ver qué ha pasado!





Consideraciones a tener en cuenta
  1. Trabaja siempre con la última versión disponible de la plantilla disponible de este hilo.
  2. NO borrar bajo ningún concepto ni el README.txt ni la cabecera del updater-script, es lo único que os pedimos ;)
  3. Siempre hay que respetar el uso de mayúsculas/minúsculas en los nombres de archivos o carpetas, así como las rutas lógicas situadas en el interior de las apps.
  4. Con este sistema los temas pueden ser universales, aunque dependiendo del tipo de archivos que un usuario introduzca pueden dejar de serlo:
    Si solo se incluyen archivos de imagen el tema es compatible con cualquier rom de cualquier teléfono.
    Si además se incluyen archivos .xml, puede que solo funcionen en una sola rom, aunque pueden seguir funcionando en futuras actualizaciones de la misma.
    Si se incluyen recursos para traducciones (resources.arsc) el tema solo sería válido para una rom en concreto.
  5. Aplicar morph implica romper la firma de las apps, sean del market o de roms con archivos del sistema firmadas, tenlo en cuenta antes de nada.
  6. Si tienes dudas, pregunta por aquí ;)


Changelog

Código:
v.1.0   >hello world
v.1.1   >"dirty fix" detecting path for internal sdcard in CWM4 || check free space before tart the process to prevent errors
v.1.2   >minor backup fixes
v.1.3   >permissions fixes in backup  
v.1.4   >redone "CWM4 compatibility" and sdcard path
v.2.0   >new backup system in .tar format for keep permissions
v.2.1   >minor bug fixes with dalvik-cache, mod version & logs
v.2.2   >minor bug fixes with sdcard path and check for free space available before theming
v.2.3   >minor changes and added missed credits
v.2.4   >now XTRAS is applied in first place || fixed working sdcard path in restore
v.2.5   >minor bug fixes
v.3.0   >Now the whole process takes place in RAM instead of sdcard  || Added mount.sh and MOD.config files || working with 7z instead zip  binary
v.3.1   >New error management system || Adding exceptions to forced  exit when we have problems mounting partitions, sdcards nor space  required ||
          >Added mount command for /Utmp in MOD.config || Utmp full  resized ||  Redone backup, now works in Utmp instead sdcard too||
          >minor bugfixes in extreme conditions
v.3.2   >Fixed the "update binary" in the restore to solve problems restoring in CyanogenMods roms (Thanks to shayne77)
v.3.3   >Now it's possible to add in the same folder files for stock  and cyanogenmod roms by adding the "CMOD#" prefix to the cyano  files/resources 
         >This feature works in the morph and xtras process and must  be enabled in the MOD.config file (check it for more details and  examples)
v.3.4  >Minor fixes, optimizations and mergers in code
v.3.5   >The backup now takes the same update-binary used the zip,  It's needed when we have changed the update-binary for a specific  terminal
v.3.6   >added an option in MOD.config for disable wipe dalvik-cache  if isn't neccesary || flush cache at init || added sync process
         >fixed the problem calculating the free mem available in  some kernel ("zip is too big" prompts, etc,...) || Utmp resized to 90%  for safety.
v.3.7   >temporal fix preventing errors when the internal sdcard is  /data/media symlinked to sdcard without mount point (like Gnexus,  sgs3,..)
         >take a look to the MOD.config file for more info || added  'mount /system' and 'mount /data' in backup, needed in some recoveries.
v.3.8   >fixed weird behavior with some busybox renaming /XTRAS/sdcard folder when we work with /data/media.
v.3.9   >New "Check zip-apk integrity" method to fix/prevent errors  when 7z tries to handle unsupported flags inside some apk/zips.
v.4.0   >Fixed zip binary path || Prevent to apply morph to  nonexistent apks when the integrity fix fails and be able to restore the  original apk.
v.4.1   >MOD.config renamed to UFT.config || UFT.config redone ||  Added compatibility to work in whatever partition and subfolder as  /preload, 
          >used in some Samsung devices. Check UFT.config for more  info and configure this feature || Fixed backup size in some scenarios
          >Rewrited and simplified some processes || Better  compatibility with multiuser sdcard paths i.e /data/media/0 (check  UFT.config)
v.4.1.1 >Minor fixes detecting sdcard
v.4.2   >Added support for TWRP recoveries due the new zipalign  static binary recompiled by the TeamWin and the 7z static binary of  "lovetide"
          >Added a second log in /cache/UFT.log. Only will be created  if there was errors detecting the sdcard or mounting the necessary  partitions
          >Fixed when main log file was deleted if nothing was modified
v.4.3 >Added the possibility to set a custom name of backup file in  UFT.config || Rename the "by deault" backup file to UNDO_$DATE$HOUR.zip  
v.4.4 >"mv" over /system is blocked by SELinux, opting for an ugly "cp->rm" instead.
_______________________________________________

descargas | downloads | téléchargements
Plantilla Universal-Flasher-Tool_v4.4:

Download (dropbox): https://db.tt/KreKslzs
_______________________________________________



Agradecimientos especiales a:
  • "Stericson" por el concepto "Metamorph"
  • Villain Team por el concepto vrtheme http://goo.gl/3wcEZ
  • "Core Utilities" por los binarios empleados
  • "Blades" por las librerías y binarios de 7z utlizados en versiones anteriores
  • "lovetide" por compilar el binario 7z estático utilizado actualmente
  • Quien quiera que compilase el binario zip
  • TeamWin por recompilar un zipalign estático
  • Testers, especialmente a "SuperCocoV6.5@htcmania", "lexullde@htcmania", "shayne77@xda", "vvaleta@htcmania", "klander@htcspain", "eladios@htcmania",
    "trabas@htcmania", "audalecio@htcmania", "666roi666@htcmania", "audalecio@htcmania"
  • "D.O.C@xda" por ayudar con las traducciones

Última edición por intronauta Día 10/06/14 a las 22:09:21.
Responder Con Cita
Los siguientes 164 usuarios han agradecido a intronauta su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]