Cómo crear un tema Metamorph

De HTCMania Wiki

Revisión a fecha de 12:03 16 may 2010; Intronauta (Discusión | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)

Contenido

Introducción

En este documento he intentado explicar un poco el por qué de Metamorph, cuales son sus ventajas y como funciona.

APK's

Para poder entender como funciona Metamorph hay que conocer primero que son los APK y como funcionan en Android.

  1. Archivos APK
    Los archivos APK son lo que contienen las aplicaciones que corren en nuestro sistema Android. En un APK va todo lo que una aplicación necesita para ejecutarse: código, imágenes, archivos, firma del autor, ...
    Un APK es realmente un archivo ZIP que contiene todo lo necesario por la aplicación, si en windows cambiamos la extensión de un apk a zip, podremos descomprimirlo y si miramos su interior nos encontraremos con su contenido.
  2. Cosas comunes en los APK
    La mayoría de los apk contienen estos directorios/archivos que describo a continuación.
    1. Carpeta META-INF
      Esta carpeta contiene la información relevante al autor y la firma de la aplicación.
      Archivo AndroidManifest.xml
      Este archivo es la versión compilada del manifest del xml, en él está la información de las pantallas (activities) que lleva la aplicación, los permisos que usa la aplicación, ...
    2. Archivo classes.dex
      Este archivo contiene el código binario propiamente dicho de la aplicación. Se trata de un archivo con los byte-codes para ser ejecutado por la máquina virtual Java (dalvik en android)
    3. Archivo resources.arsc
      Este archivo contiene algunos recursos compilados, como son los strings y arrays (los textos que se muestran en pantalla, los idiomas, ...)
    4. Carpeta "assets"
      Esta carpeta contiene archivos que se incluyen en la aplicación, archivos auxiliares para la aplicación que pueden ser de cualquier tipo.
    5. Carpeta "res"
      En esta carpeta se incluyen todos los recursos gráficos, y no gráficos, que usa la aplicación, ya sean imágenes png o archivos xml donde se describen degradados, colores y demás cosas.

De estas partes, mirado desde la óptica de cambiar el aspecto de una aplicación, solo nos interesan dos de ellas, Assets (si la hay) y "res".

Si descomprimimos un apk y miramos dentro de su carpeta res, tendremos varias carpetas llamadas drawables, anim, xml, menu, ... y dentro de cada una de ellas habrán archivos xml, png, ... si miramos los png podremos ver que son gráficos usados por la aplicación.

Bien, esos archivos situados en subcarpetas de "res" son los que nos interesa cambiar para cambiar el aspecto de las aplicaciones.

Temas

Llamamos "tema" al conjunto de archivos necesarios para cambiar el aspecto de todas, una o un grupo de funcionalidades de nuestro dispositivo. Por ejemplo podemos crear un tema que cambie el aspecto de el launcher y que cambie también los iconos de algunas aplicaciones mostradas en el launcher. Para ello debemos localizar donde están (en que apks, en que directorio dentro del apk y como se llaman los archivos) las imágenes o archivos que queremos cambiar. Para cambiar el aspecto del launcher deberemos extraer la aplicación launcher (/system/app/Launcher.apk) y mirar su contenido, encontrar las imágenes que queremos cambiar, quedarnos con el directorio donde se encuentra y con el nombre del archivo. Una vez hayamos creado nuestra nueva imágen ¿como la usamos?

Bien, visto lo visto, bastaría con sustituir ese archivo en el .apk para que la aplicación al ir a leer su archivo cargara el nuestro. Por lo tanto deberíamos...

  1. Extraer el apk de nuestro dispositivo.
  2. Cambiarle la extensión a .zip
  3. Abrirlo con algún programa que te permita incrustar archivos sin descomprimir y volver a comprimir (winrar, 7zip, ...)
  4. Abrir, dentro del zip, la carpeta que contiene el archivo.
  5. Arrastrar nuestra nueva imagen a dicha carpeta.
  6. Cerrar winrar/7zip.
  7. Volver a cambiar la extensión a .apk
  8. Hacer adb push para copiar el apk al dispositivo y machacar el anterior.

Con esto nos valdría para poder cambiar el aspecto de una aplicación, y modificando varias aplicaciones, podríamos reunir un conjunto de imágenes que definirían nuestro tema.

Esto está muy bien para hacer cambios, pero requiere extraer el apk de la ROM instalada para aplicar los cambios, y también requiere que el apk sustituido sea la misma versión. Por ejemplo si tenemos un Launcher modificado por Cyano en nuestra ROM de Superatmel, si aplicamos un tema cuyo apk del launcher ha sido extraído de una rom que no tiene las modificaciones de Cyano pues perdemos los extras/ventajas que teníamos en ese launcher. Por otro lado algunas veces tan solo queremos modificar el icono de la aplicación o pequeñas cosas, pero este sistema requiere meter todo el apk con todo su contenido, por lo tanto estamos perdiendo espacio.

Stericson, ideó una forma de crear temas basándose en este sistema, pero en vez de realizar el proceso de extraer el apk al PC cambiar lo que queremos y volverlo a introducir, lo que hizo fue crear el concepto Metamorph y los temas Metamorph. Usando este sistema tan solo debemos preocuparnos por los cambios que aportemos al sistema y además no tenemos que andar extrayendo apks del dispositivo, pues con Metamorph el proceso de cambiar el APK se realiza en el dispositivo.

Metamorph

Para crear un tema Metamorph debemos crearnos una carpeta por cada apk que queramos modificar, la carpeta debe ser llamada igual que el apk pero sin extensión, e introducir dentro de cada uno de esos directorios las imágenes que queremos cambiar, tan solo las que queremos cambiar. Para ello tenemos que ubicar las imágenes en el mismo subdirectorio que están en el apk original.

Por ejemplo, si extraemos el apk de la cámara (Camera.apk) y le cambiamos la extensión a .ZIP y lo descomprimimos, vemos que dentro del apk hay un directorio "res", y dentro otro llamado "drawable-mdpi" y dentro de este tenemos el icono de la cámara en un .png llamado "ic_launcher_camera.png". Bien pues para hacer un tema que tan solo cambie el icono de la cámara debemos crearnos un directorio que se llame "Camera" y dentro creamos el directorio "res", y dentro de res creamos el directorio "drawable-mdpi" y dentro metemos un .png con el nuevo icono de la cámara que queramos, llamado "ic_launcher_camera.png". Solo tenemos que saber que debe de ser un png y no un jpg ni un gif, ni otro formato. Si también queremos cambiar el icono de las llamadas (Contacts.apk) buscaremos igual y crearemos la misma estructura. Por lo tanto nuestro tema quedaría así:

  • MiTema
    • Camera
      • res
        • drawable-mdpi
          • ic_launcher_camera.png
    • Contacts
      • res
        • drawable-mdpi
          • ic_launcher_phone.png

Bien como os podéis imaginar no basta solo con esto. Hay que indicarle a Metamorph que tiene que hacer con cada una de estas carpetas, para ello está el archivo .thm que se adjunta en todos los temas metamorph. En este archivo hay que indicar para que ROM es el tema, y para que versión de la ROM. De momento poner lo que queráis en estos campos no nos hacen falta para dar los primeros pasos. Luego también habrá que indicar que apks vamos a tocar y que les vamos a hacer. Es un fichero de texto, y esta es la estructura que debe de tener:

Nombre de la ROM para la que hemos hecho el tema.
Versión de la ROM para la que hemos hecho el tema.
Apk a modificar
Directorio donde se encuentra el apk a modificar
Apk a modificar
Directorio donde se encuentra el apk a modificar
Apk a modificar
Directorio donde se encuentra el apk a modificar
Apk a modificar
Directorio donde se encuentra el apk a modificar
....
....
....
....

La primera y la segunda linea son, respectivamente, el nombre y la versión de la ROM, solo son de carácter informativo ya que solo se usan para mostrarlos en pantalla, no se usan para comprobar la versión de la ROM. A partir de la tercera linea empiezan los pares de lineas que identifican el apk a cambiar y la ruta donde se encuentra en la rom. Un ejemplo vale más que mil palabras, este sería el THM para el ejemplo que hemos puesto antes donde cambiábamos el icono de la cámara y del teléfono:

SuperEclair
2.1
Camera.apk
/system/app/
Contacts.apk
/system/app/

Si escribimos este fichero en la raíz del tema del ejemplo y comprimimos todo en un zip, podríamos pasar el tema al teléfono y aplicarlo con Metamorph. La ventaja de este método es que para cambiar solo dos iconos, creamos un zip pequeño y que podremos aplicar en cualquier ROM sin tener en cuenta si los apk que se usan en la ROM son de la versión con la que se hizo el tema.

Pero Metamorph va más lejos, también te permite cambiar el contenido de archivos JAR, y en definitiva de todos los archivo zip que se hallen en el sistema, por ejemplo si en nuestro anterior tema queremos cambiar el código de services.jar que está en /system/framework, la estructura de nuestro tema se nos quedaría así:

  • MiTema
    • Camera
      • res
        • drawable-mdpi
          • ic_launcher_camera.png
    • Contacts
      • res
        • drawable-mdpi
          • ic_launcher_phone.png
    • services
      • classes.dex


Y nuestro archivo THM quedaría así:

SuperEclair
2.1
Camera.apk
/system/app/
Contacts.apk
/system/app/
services.jar
/system/framework/

Cabe destacar la importancia de diferenciar entre mayúsculas y minúsculas, no olvidemos que Android esta basado en Linux y Linux es case sensitive.

Por último Metamorph también te permite copiar archivos a tu dispositivo. Imaginemos que queremos copiar una fuente nueva al sistema o sustituir una existente, o simplemente queremos que nuestro tema instale una aplicación, el SupSetup o el ApnDroid por ejemplo, pues este sería nuestro tema:

  • MiTema
    • Camera
      • res
        • drawable-mdpi
          • ic_launcher_camera.png
    • Contacts
      • res
        • drawable-mdpi
          • ic_launcher_phone.png
    • services
      • classes.dex
    • fonts
      • DroidSansFallback.ttf
      • DroidSerif-Bold.ttf
    • apps
      • com.SupSetupv2.apk
      • apndroid.apk

Y nuestro THM sería este:

SuperEclair
2.1
Camera.apk
/system/app/
Contacts.apk
/system/app/
services.jar
/system/framework/
fonts.cpy
/system/fonts/
apps.cpy
/data/app/

Fijaos como en fonts y apps he usado la extensión "cpy", eso indica a Metamorph que debe de copiar los archivos del directorio fonts al directorio que se describe en la siguiente linea (/system/fonts/), igual que apps.cpy, copiará el contenido de la carpeta "apps" de nuestro tema en la carpeta /data/app/

A partir de la versión 1.9.7 Metamorph requiere que el archivo de control esté en formato xml en vez de thm.

Aquí hay un vídeo explicativo para crear los xml compatibles con Metamorph.

Para facilitar la conversión de un archivo thm existente a xml hay una herramienta multiplataforma creada por Danation que simplifica enormemente este proceso:

Descargar: Web oficial // Mirror


Fuente original

Herramientas personales