Date post: | 02-Jan-2016 |
Category: |
Documents |
Upload: | carlos-aranguren |
View: | 127 times |
Download: | 0 times |
CURSO DE CREACIÓN DE ROMS PARA ANDROID
FAQSAndroid.com
2
INTRODUCCIÓN
Tras un primer curso en el que hemos aprendido a hacer una aplicación Android hoy os traemos el recopilatorio del segundo, centrado en la creación de una ROM.
Se enfoca el curso a los usuarios noveles en este campo por lo que partiremos de una ROM existente y veremos las modificaciones que se le pueden hacer.
El creador es Robert P., uno de los editores del blog que tiene a sus espaldas ya algunas aplicaciones y es miembro destacado de XDA Developers.
El curso ha sido recopilado en este PDF completamente gratuito para tenerlo a mano en un solo lugar.
ÍNDICE
1. Preparación del entorno. 2. Modificando imágenes en una app. 3. Modificando código en una app. 4. Creación del zip con nuestra ROM.
3
CAPÍTULO 1
Preparación del entorno
Aunque pueda parecer lo contrario, la creación de una ROM no es un proceso complejo, aunque debe hacerse de forma metódica para evitar errores que puedan afectar al dispositivo y a sus usuarios, para lo que es fundamental probar el producto final en nuestro equipo durante unos días antes de publicar cada nueva release.
Afortunadamente, no es necesario iniciar el cocinado de una ROM desde cero, sino que es posible descargar la base de la misma y empezar a realizar nuestros cambios sobre ésta, para lo cual será necesario saber qué tipo de ROM es la que deseamos cocinar, teniendo en cuenta que, en general, existen dos grandes grupos de ROMs: las basadas en el estándar AOSP (CM, AOKP, MIUI) y las basadas en los desarrollos del fabricante (Sense, TouchWiz, etc), cada una de las cuales incorpora sus propias particularidades.
En el caso concreto de este tutorial desarrollaremos una ROM para ser utilizada en un Galaxy SII y basada en TouchWiz aunque, como ya os indicamos anteriormente, procuraremos ser lo suficientemente genéricos como para que pueda tomarse de referencia para el desarrollo de casi cualquier tipo de ROM, con la salvedad de que algunas de las basadas en AOSP pueden desarrollarse a partir del código fuente o de la compilación oficial, recomendándose esta última opción inicialmente.
Preparando el entorno
Para el desarrollo de nuestra ROM utilizaremos un ordenador personal provisto de la versión 11.04 de Ubuntu, un sistema operativo que al igual que Android se basa en Unix, y en el cual ejecutaremos la aplicación Android Kitchen, desarrollada por dsixda,
4
reconocido desarrollador y moderador del foro XDA-‐Developers y que permite cocinar ROMs para más de 60 modelos diferentes.
Los usuarios de Windows pueden utilizar también esta aplicación, para lo cual deben instalar cygwin, una aplicación que permite simular un entorno Unix sobre el sistema operativo de Microsoft.
La instalación del Android Kitchen es sencilla y tan sólo requiere de la descompresión del archivo zip que contiene todos los scripts y configuraciones en el directorio de nuestra elección, si bien será necesario para que todo el conjunto funcione correctamente que hayamos instalado el android-‐sdk con anterioridad.
La instalación del software de cocinado creará los siguientes elementos en el directorio raíz del programa:
• original_update: Directorio en el que debemos almacenar la ROM base. • scripts y tools: Carpetas que contienen el código fuente del programa y las
herramientas auxiliares. • menu: Script de inicio del programa, que debe ejecutarse para acceder a sus
funcionalidades. • README: Archivo con información relevante sobre la aplicación.
Descarga de la ROM base
En cuanto a la ROM que usaremos de base y que, como habíamos indicado se basará más arriba, se basará en el desarrollo oficial de Samsung, la descargaremos de SamMobile.com, el sitio oficial de descarga de ROMs de dispositivos Samsung.
5
Una vez descargada la ROM base, que en nuestro caso es simplemente un archivo comprimido (en formato zip o rar, según el caso), deberemos extraer el contenido relevante de la misma (archivos factoryfs.img, cache.img y zimage) en el directorio original_update, tras lo cual podremos acceder al Android Kitchen e iniciar el cocinado de nuestra ROM.
En caso que el archivo descargado de SamMobile.com fuera en formato zip, lo más probable es que su contenido incluyera un archivo de tipo tar o tar.md5, que es el que realmente contiene la ROM de la que hay que extraer los archivos indicados en el párrafo superior.
Empezar el proceso
El archivo factoryfs.img contiene la imagen de nuestra ROM base, pero en un formato que no es fácilmente modificable, por lo que procederemos a obtener los archivos que contiene, para lo ejecutaremos el Android Kitchen y seleccionar la opción 1, que desempaquetará los archivos en un directorio temporal incluyendo, si así lo especificamos, el CSC de la ROM, que se encuentra en el archivo cache.img.
Seguidamente añadiremos el root a la ROM, seleccionando la opción 2 y pulsando seguidamente la tecla f, que añadirá el binario su y la aplicación SuperUser.apk de ChainsDD.
La opción 3 nos permitirá añadir el programa busybox, que resulta de especial relevancia para aplicaciones privilegiadas y que deberíamos incluir siempre.
Usaremos la opción 8 para definir el nombre de nuestra ROM, que aparecerá cuando el usuario acceda a Configuración → Acerca del teléfono.
6
La opción 0 desplegará un menú con opciones avanzadas, entre las que destaca la opción número 11, que realiza el deodex de las aplicaciones de nuestra ROM, lo que nos permitirá, posteriormente, aplicarles temas.
Deberemos seleccionar la opción f (deodex las apps en las carpetas system y framework) en el submenú correspondiente, no sin antes seleccionar la opción v para indicar que se trata de una ROM basada en Ice Cream Sandwitch (API número 14).
Finalizado el proceso, que se prolongará durante unos minutos debido a que el sistema debe procesar más de 100 aplicaciones, hemos obtenido como resultado una ROM básica customizable, que encontraremos en el directorio base del Android Kitchen, y que podemos empezar a modificar; aunque eso será en la próxima sesión.
7
CAPÍTULO 2
Modificando imágenes en una app
Una vez descargada la ROM base que utilizaremos en nuestro proyecto, que según el caso también podríamos compilar a partir del código fuente, y una vez realizado el deodex de las aplicaciones, que básicamente lo que hace es fusionar los archivo odex y apk de cada aplicación del sistema dentro del archivo apk correspondiente, y que es en principio independiente del dispositivo, podremos iniciar el customizado de nuestra ROM, que básicamente podrá incluir cambios estéticos (iconos, colores, layouts) o internos (cambios en el código de algunas aplicaciones).
Lo normal es empezar a realizar cambios en el plano estético, que generalmente son más sencillos de aplicar y que podremos probar en nuestro propio terminal sin temor a un brick, si bien los errores al realizar cambios en el framework pueden provocar algún que otro susto, por lo que es muy importante hacer copias de seguridad de los archivos que cambiamos en nuestro dispositivo, sobretodo si se trata de nuestro dispositivo de uso diario, lo que suele ser habitual, pudiendo restaurar los archivos originales mediante el recovery en caso de error, para lo cual deberemos haber rooteado el terminal antes, obviamente.
En general deberemos tener en cuenta que los colores, iconos y gráficos en general que son usados por varias aplicaciones se encontrarán en el archivo system/framework/framework-‐res.apk, y opcionalmente en algún otro apk dentro del mismo directorio, dependiendo de la ROM concreta (en el caso de Samsung el archivo system/framework/twframework-‐res.apk).
8
En cuanto a los iconos de aplicaciones concretas (reloj, calendario, settings, etc) se encontrarán en el archivo correspondiente a su aplicación en el directorio system/app.
En cualquier caso, la modificación siempre se realiza de la misma manera:
1. Decompilación de la aplicación a modificar, 2. Implementación de las modificaciones, 3. Recompilación, 4. Sustitución de archivos esenciales.
La decompilación de la aplicación debe realizarse usando la utilidad apkTool, tal como ya os hemos explicado en otras ocasiones, radicando la única complicación posible en localizar qué versión del mencionado programa se adapta a la versión concreta de Android que queremos utilizar.
Una vez realizada la decompilación, podremos realizar los cambios que deseemos, tanto en los archivos de imágenes como en los relacionados con los colores, cadenas de texto, etc, siempre teniendo en cuenta la estructura de directorios presente en las apps Android.
En cuanto a la recompilación, puede realizarse la misma utilidad apkTool, si bien es recomendable descargar alguna utilidad, tal como apkManager, que se encargará de ejecutar la utilidad anterior con los parámetros adecuados, minimizando la probabilidad de cometer errores.
9
No obstante, no será posible utilizar el nuevo archivo en nuestra ROM directamente, debido al sistema de firmas de Android, siendo necesario realizar manualmente un cambio en dicho archivo para incluir el certificado original (algunos gestores incorporan la posibilidad de realizar este cambio automáticamente).
Para realizar el cambio haremos lo siguiente:
1. Abrir el nuevo archivo apk que hemos generado usando la utilidad WinRar (que podemos descargar de forma gratuita),
2. Abrir el antiguo archivo apk utilizando WinRar o cualquier utilidad de gestión de archivos comprimidos,
3. Extraer los archivos AndroidManifest.xml y classes.dex y el directorio META-‐INF,
4. Incluir los archivos del punto anterior en el nuevo archivo apk seleccionando como método de compresión el valor normal.
Finalmente indicar que, en el caso que en una app sólo queramos cambiar algún elemento gráfico (archivos en el directorio res/drawable*), es posible realizar los cambios directamente (sin necesidad de decompilar, recompilar y añadir firmas), pudiendo sustituirse las imágenes necesarias en la apk original usando WinRar, para lo cual deberemos recordar seleccionar como modo de compresión el valor ninguno.
10
CAPÍTULO 3
Modificando código en una app
En el capítulo anterior del curso práctico de desarrollo de ROMs para Android aprendimos a decompilar una aplicación para modificar el layout de alguna de las actividades (ventanas) que la formaban, así como algunos colores o imágenes, lo que nos permitirá aplicar nuestros propios temas a la ROM.
No obstante, y pese a que los usuarios valoran este tipo de cambios, que además permiten agregar elementos diferenciadores a nuestra ROM, la mayor parte de ellos valora aún más aquellos cambios que conducen a la resolución de algún bug, que desgraciadamente siempre existen, o a la inclusión de nuevas funcionalidades; para lo cual suele ser necesario tocar el código fuente de los programas.
En cualquier caso, y pese a que Android es un sistema de código abierto, la licencia con la que se publica no afecta a las aplicaciones ni a las capas que incluyen el fabricante o el operador correspondiente, tales como Sense (HTC) o TouchWiz (Samsung), por lo que en la mayor parte de los casos no podremos realizar los cambios en el código fuente de los programas y deberemos optar por modificar el código que nos proporciona el decompilador, algo que no siempre es fácil.
Como ya hemos explicado anteriormente, la decompilación y recompilación de las aplicaciones se realiza mediante la utilidad apkTool, creada por Brut.all, desarrollador de reconocido prestigio en el mundillo Android, si bien en este caso nos fijaremos en el directorio smali, que es el que contiene el código fuente, en un formato pseudo-‐máquina que no resulta demasiado fácil de seguir.
A partir del directorio smali encontraremos los diferentes paquetes y clases que ha definido el desarrollador, no siendo necesario que entendamos el contenido de dichos archivos, cuyo hilo estructural es, como hemos indicado, prácticamente ilegible,
11
sobretodo si su creador ha ofuscado el código con el objeto de evitar la ingeniería inversa, algo que viene siendo bastante común.
En cualquier caso, para la aplicación de un parche simplemente deberemos seguir las instrucciones del desarrollador del mismo, que nos indicará el archivo, procedimiento y línea (o líneas) que debemos modificar, tras lo cual procederemos al recompilado (existen multitud de fuentes en las que encontrar optimizaciones o modificaciones de apps Android, siendo la más conocida el foro XDA-‐Developers, que incluye sub-‐foros específicos para la mayor parte de los terminales Android).
Al igual que ocurría con las modificaciones relativas a imágenes, deberemos recordar aplicar la firma de la aplicación original a la nueva aplicación, ya que podríamos tener problemas en caso de no hacerlo.
Lógicamente, deberemos testear los cambios introducidos en nuestro dispositivo antes de incluirlos en nuestra ROM, para lo cual iniciaremos el dispositivo en modo recovery y copiaremos la aplicación modificada al directorio /system/app, de forma que la aplicación anterior será reemplazada, procediendo también a eliminar los rastros de la aplicación original del directorio /data/dalvik-‐cache, algo que realizaremos siempre desde el recovery.
12
CAPÍTULO 4
Creación del ZIP con nuestra ROM
En capítulos anteriores de nuestro curso de creación de ROMs aprendimos a generar los archivos y programas de inicio sobre los que basaremos nuestra ROM, algunos de los cuales decompilamos para aplicar temas o parches, tras lo cual tan sólo quedará empaquetar y, si es el caso, distribuir la ROM en algún foro especializado.
Antes de proceder al empaquetado de la ROM deberemos asegurarnos que hemos reemplazado todos los archivos de base por los que hemos modificado, garantizando también que hemos conservado las firmas originales de aquellos que tienen que ver con el propio sistema o con Google, ya que en caso de no hacerlo se producirían errores.
Hecho esto, procederemos a ejecutar el Android Kitchen, que tras comprobar si existen actualizaciones nos mostrará un menú con las diferentes opciones disponibles, de las cuales recomendamos activar las siguientes:
• 3 -‐ Add root permissions: Rooteará nuestra ROM, algo que desean todos los usuarios de ROMs cocinadas.
• 4 -‐ Add busybox: Busybox es un programa que añade multitud de comandos (de Linux) a nuestro dispositivo, tales como “cp” (el programa que permite copiar archivos) y que luego pueden ser usados por las aplicaciones.
• 8 – Change name of ROM: Permite cambiar el nombre que aparecerá en la casilla correspondiente al nombre de la ROM en la pestaña Ajustes → Información del teléfono.
13
Seguidamente accederemos al submenú de opciones avanzadas (0 – Advanced options), en el que activaremos las casillas:
• 13 – Add /data/app functionality: Esta casilla es necesaria si vamos a preinstalar algún programa en la partición de datos, permitiendo automatizar el copiado de los mismos cuando se instale la ROM, si es el caso.
• 15 – Add Bash (command shell): Reemplaza el intérprete de comandos (shell), por una versión más moderna y que soporta un mayor número de órdenes.
• 23 – Convert update-‐script or updater-‐script: Inicialmente sólo un pequeño número de comandos podían ser incluidos en el programa de instalación de la ROM, los cuales se almacenaban en el archivo update-‐script, que fue reemplazado en posteriores versiones por el archivo updater-‐script, al que se le añadió un mayor número de comandos.
Una vez activadas las opciones anteriores, o aquellas que consideremos convenientes para nuestro proyecto, procederemos a generar el instalable de nuestra ROM, para lo cual volveremos al menú principal (pulsando la opción 0 – Back to main menú) en el menú de opciones avanzadas, tras lo que seleccionaremos la opción 99 – Build ROM from working menú.
Tras pulsar la mencionada opción, nos aparecerá un nuevo menú en el que seleccionaremos la opción 1 -‐ interactive mode, en la que responderemos afirmativamente a todas las preguntas, lo que provocará que las aplicaciones presentes en nuestra ROM se optimizen antes de generar el zip y que el contenido de éste se firme, algo que requieren algunas versiones del recovery.
Al finalizar este proceso tendremos un archivo zip con nuestra ROM cocinada en el directorio OUTPUT_ZIP (a partir de la ruta en la que hubiéramos instalado el Android Kitchen), que podremos instalar en nuestro dispositivo o distribuir, según el caso.
14
Esperamos que este tutorial haya sido de vuestro agrado y os animamos a enviarnos vuestras consultas sobre este u otros temas, para lo que podéis utilizar los comentarios al final de esta página o nuestro foro, con el hilo abierto para este curso desarrollo ROMs.
15
El CURSO DE CREACIÓN DE ROMS EN ANDROID ha sido desarrollado por Robert P. para FaqsAndroid.com del Grupo bemoob.
Este obra está bajo una Licencia Creative Commons Atribución-‐NoComercial-‐
SinDerivadas 3.0 Unported.
by