Home

Conocer el sistema operativo Android

sergio555

Usuario
Fan de OpenSPA
Amigo OpenSPA
17 May 2010
243
109
0
Y por supuesto conocer el sistema operativo Android:

Fuente: http://forotek.net/index.php?PHPSESSID=a85e70f348020896ea942c31ba2c3afb&board=597.0

Vamos a comenzar una serie de hilos en los que los que queremos aprender vamos a unificar conocimientos y a ir andando el camino que nos llevara a conocer mejor el sistema operativo Android y los terminales que lo ejecutan. Puede ser que en algunos puntos sea algo técnico, pero intentare que sea lo más ameno posible y que todos aportemos nuestros conocimientos ó bien nuestras dudas. Lo principal es que disfrutemos haciéndolo, que todos aprendamos y sirva de sitio de reunión para aprender, resolver dudas y aportar cada uno nuestros conocimientos a los demás.
He elegido Forotek porque es un foro joven en el que todos estamos comenzando a andar un camino, y espero que este sea el comienzo de un camino en el que podamos tener un buen soporte tanto para los dispositivos que adquirimos en las conjuntas como en el resto, podamos hacer nuestras ROMs y dar todo tipo de soporte.
Sed todos bienvenidos, estáis invitados a participar. Comenzamos.

1.1- Caracteristicas principales del S.O. Android.
Una de sus principales características de este sistema operativo es que está pensado para optimizar recursos, un punto a tener en cuenta ya que al ser utilizado en terminales móviles es primordial no consumir demasiada batería.
Para ejecutar las aplicaciones Java no se utiliza la Java Virtual Machine (JVM) ya que está bajo licencia de Sun Microsystems y tiene restricciones. La máquina virtual que utiliza Android es creación propia de Dan Bornstein y otros ingenieros de Google, su nombre es Dalvik y está pensada y diseñada para que utilice poca memoria y pueda ejecutar varias instancias simultáneamente.
Android incluye una base de datos propia llamada SQLite, que permite almacenar datos de forma local. Tratándose de una base de datos local, está limitada a información guardada en el propio móvil pero aporta una facilidad y sencillez a la hora de ser utilizada e integrada en las aplicaciones.
Otra de las características, es que al ser un sistema operativo orientado a móviles con múltiples aplicaciones multimedia, soporta diferentes formatos de audio, vídeo e imágenes como MPEG4, MP3, 3GP, JPG, GIF.


1.2- Arquitectura interna de Android.
Como cualquier sistema operativo, Android está formado por diferentes capas, esto se puede observar en la figura siguiente, partiendo del kernel basado en Linux, pasando por las librerías y el Runtime, el armazón de las aplicaciones y finalmente las aplicaciones. Como se muestra en el siguiente diagrama, los componentes que forman Android se agrupan en capas. Cada una de estas capas utiliza elementos de la capa inferior para realizar sus funciones. Por ese motivo, a este tipo de arquitectura se le denomina pila. Esta es la pila software de Android:
A continuación se explica detalladamente la función de cada una de ellas.
0013-01-pila-software-android_zpse9423790.jpg

Veamos con más detalle qué contiene cada capa de la pila:
Kernel de Linux: El núcleo del sistema operativo Android es un kernel Linux similar al que puede incluir cualquier distribución de Linux, como Ubuntu, solo que adaptado a las características del hardware en el que se ejecutará Android (normalmente, un Smartphone o una tablet). Proporciona una capa de abstracción para los elementos hardware a los que tienen que acceder las aplicaciones. Esto permite que se pueda acceder a esos componentes sin necesidad de conocer el modelo o características precisas de los que están instalados en cada teléfono. De esta forma, si una aplicación necesita, por ejemplo, la brújula, podrá utilizar la que incluya el teléfono, sea cual sea. Para cada elemento hardware del teléfono existe un controlador (o driver) dentro del kernel que permite utilizarlo desde el software.
Además de proporcionar controladores hardware, el kernel se encarga de gestionar los diferentes recursos del teléfono (energía, memoria,…) y del sistema operativo en sí: procesos, elementos de comunicación (networking), etc.
Bibliotecas: La capa que se sitúa justo sobre el kernel la componen las bibliotecas nativas de Android (también mal llamadas librerías, por el término inglés libraries). Estas bibliotecas están escritas en C o C++ y compiladas para la arquitectura hardware específica del teléfono, tarea que normalmente realiza el fabricante, que también se encarga de instalarlas en el terminal antes de ponerlo a la venta. Su cometido es proporcionar funcionalidad a las aplicaciones, para tareas que se repiten con frecuencia, evitando tener que codificarlas cada vez y garantizando que se llevan a cabo de la forma más eficiente (en teoría, al menos).
Entorno de ejecución: El entorno de ejecución de Android, aunque se apoya en las bibliotecas enumeradas anteriormente, no se considera una capa en sí mismo, dado que también está formado por bibliotecas. En concreto, las bibliotecas esenciales de Android, que incluyen la mayoría de la funcionalidad de las bibliotecas habituales de Java así como otras específicas de Android.
El componente principal del entorno de ejecución de Android es la máquina virtual Dalvik, componente que ejecuta todas y cada una de las aplicaciones no nativas de Android. Las aplicaciones se codifican normalmente en Java y son compiladas, pero no para generar un ejecutable binario compatible con la arquitectura hardware específica del dispositivo Android. En lugar de eso, se compilan en un formato específico para la máquina virtual Dalvik, que es la que las ejecuta. Esto permite compilar una única vez las aplicaciones y distribuirlas ya compiladas teniendo la total garantía de que podrán ejecutarse en cualquier dispositivo Android que disponga de la versión mínima del sistema operativo que requiera cada aplicación.
Aunque las aplicaciones se escriben en Java, Dalvik no es realmente una máquina virtual Java. Es decir, no es compatible con el bytecode Java (instrucciones ejecutables independientes de la arquitectura hardware) que ejecutan las máquinas virtuales Java normales. Java se usa únicamente como lenguaje de programación, pero los ejecutables que se generan con el SDK de Android no son ejecutables Java convencionales y, por lo tanto, no se pueden ejecutar en máquinas virtuales Java convencionales. Durante el proceso de compilación de los programas Java (normalmente archivos .java) sí que se genera, de forma intermedia, el bytecode habitual (archivos .class). Pero esos archivos son convertidos al formato específico de Dalvik en el proceso final (.dex, de Dalvik executable).
Google hace esto por una cuestión de optimización. Los archivos .dex son mucho más compactos que los .class equivalentes (hasta un 50% menos de tamaño), lo que permite ahorrar espacio en el teléfono (algo siempre escaso) y acelerar el proceso de carga. Además, a diferencia de las máquinas virtuales tradicionales, Dalvik se basa en registros en lugar de una pila para almacenar los datos, lo que requiere menos instrucciones. Esto permite ejecuciones más rápidas en un entorno con menos recursos.
Las aplicaciones Android se ejecutan cada una en su propia instancia de la máquina virtual Dalvik, evitando así interferencias entre ellas, y tienen acceso a todas las bibliotecas mencionadas antes y, a través de ellas, al hardware y al resto de recursos gestionados por el kernel.
Marco de aplicación: La siguiente capa la forman todas las clases y servicios que utilizan directamente las aplicaciones para realizar sus funciones y que, obviamente, se apoyan en las bibliotecas y en el entorno de ejecución que ya hemos detallado. La mayoría de los componentes de esta capa son bibliotecas Java que acceden a los recursos a través de la máquina virtual Dalvik.
Aplicaciones: La capa superior de esta pila software la forman, como no podría ser de otra forma, las aplicaciones. En este saco se incluyen todas las aplicaciones del dispositivo, tanto las que tienen interfaz de usuario como las que no, tanto las nativas (programadas en C o C++) como las administradas (programadas en Java), tanto las que vienen de serie con el dispositivo como las instaladas por el usuario.
Aquí está también la aplicación principal del sistema: Inicio (Home), también llamada a veces lanzador (launcher), porque es la que permite ejecutar otras aplicaciones proporcionando la lista de aplicaciones instaladas y mostrando diferentes escritorios donde se pueden colocar accesos directos a aplicaciones o incluso pequeñas aplicaciones incrustadas o widgets, que son también aplicaciones de esta capa.

Lo principal a tener en cuenta de esta arquitectura es que todas las aplicaciones, ya sean las nativas de Android, las que proporciona Google, las que incluye de serie el fabricante del teléfono o las que instala después el usuario utilizan el mismo marco de aplicación para acceder a los servicios que proporciona el sistema operativo. Esto implica dos cosas: que podemos crear aplicaciones que usen los mismos recursos que usan las aplicaciones nativas (nada está reservado o inaccesible) y que podemos reemplazar cualquiera de las aplicaciones del teléfono por otra de nuestra elección. Este es el verdadero potencial de Android y lo que lo diferencia de su competencia: control total por parte del usuario del software que se ejecuta en su teléfono.


1.3- Android en el teléfono
El sistema operativo Android en el teléfono está dividido en particiones, de la memoria NAND, esto queda reflejado en la figura, en ella se puede ver las diferentes particiones que tiene el móvil y las relación que tienen la partición System con el directorio /system del móvil y la partición Userdata con el directorio /data del terminal. La que podemos usar es sólo la que está reservada para datos, donde además debe convivir con todo el espacio que usan las aplicaciones para almacenar datos y también el sistema operativo. Más adelante se expondrá como se pueden modificar estas particiones mediante la ROM y el efecto que tendrán estos cambios en el teléfono.
estructura_zps323f794b.jpg

Las particiones más importantes son:
  • la partición /Recovery, Esta partición contiene un arranque alternativo a /boot. Si se arranca aquí se tiene acceso a la consola y podemos realizar ciertas tareas avanzadas, sobre todo si instalamos un programa de recovery distinto al que viene de fábrica, como ClockworkMod. Podemos desde aquí, por ejemplo, borrar todos los datos del terminal, instalar una actualización o una nueva ROM. Muchas funciones avanzadas, como tener un recovery distinto del que viene de fábrica, requieren ser root.
  • la partición /Boot, Esta partición contiene los datos necesarios para arrancar el móvil Android. Incluye el bootloader y el kernel Linux. Sin esta partición el móvil no arranca. Cuando instalamos una ROM se sustituyen los datos de esta partición por unos nuevos.
  • la partición /System, es la partición que contiene el sistema de Android (menos el kernel y el bootloader) y las aplicaciones que vienen por defecto en el terminal. Si borramos el contenido de esta partición el teléfono no arranca. Eso sí, siempre podremos entrar en recovery e instalar una nueva ROM. En la partición de sistema se guarda información del sistema operativo, como fuentes (tipos de letra), aplicaciones del sistema (las primarias y oficiales de Google), sonidos de notificaciones y alarmas o el framework (entorno y ventanas gráficas) del sistema operativo.
  • la partición /Userdata, (la partición de datos del usuario) se guarda la información relacionada al mismo, como registros de errores de programas (en una carpeta llamada «lápidas»), información local, el caché de la máquina virtual Dalvik o las aplicaciones descargadas del market, así como la información asociada a cada aplicación del dispositivo. Estas particiones utilizan el sistema de ficheros Ext4
  • la partición /cache. Datos temporales del sistema operativo. Por ejemplo aquí es dónde se descarga una actualización OTA antes de instalarse. Se puede borrar sin problemas los contenidos, que se regeneran solos.
  • la partición /misc : Contiene datos importantes de configuración del terminal. Cuidado con tocarlos.
  • la partición /data: Aquí se guardan las aplicaciones descargadas y los datos de las aplicaciones. El borrado de esta partición dejaría el terminal como vino de fábrica (Factory Reset). Esta es la partición que nos muestra el terminal cuando dice el espacio ocupado y libre.
Una característica de Android es que las aplicaciones, que vienen con el teléfono, ocupan espacio en /system (concretamente en /system/app). Y por tanto no ocupan espacio en /data que es donde hay problemas. Como consecuencia, si nos hacemos root para eliminar alguna aplicación del sistema que no usamos, no recuperamos espacio (no es del todo cierto, recuperamos el espacio de los datos de la aplicación, ya que este espacio sí que se ocupa en /data).
Ahora bien, si actualizamos una aplicación que venía de serie con el teléfono, por ejemplo Gmail, Google Maps, la búsqueda de Google, entonces pasan a ocupar cierto espacio. Esto es porque cuando estas aplicaciones se actualizan empiezan a ocupar espacio en /data. Estas aplicaciones no se pueden desinstalar (sin ser root), pero sí desinstalar las actualizaciones, con lo que la aplicación que se volverá a usar es la que estaba en /system, y ya no ocupará espacio en /data (excepto los datos asociados a su ejecución).


1.4.- Ice Cream Sandwich introduce una nueva gestión de la memoria interna
Esta distribución en particiones de la memoria en Android ha sido la que se ha usado desde el principio, pero cambió radicalmente con la versión Ice Cream Sandwich. Desde que existe Ice Cream Sandwich esta limitación de las particiones ya no existe (siempre que el fabricante quiera). A partir de Android 4.0 los terminales Android pueden funcionar con una única partición, donde se almacenan todos los datos que en versiones inferiores van en /data y /system (se comporta de manera dinámica asignando dentro de la partición general el espacio necesario a los datos que irían en las diferentes particiones anteriores).
Es decir, no perderemos más espacio por tener particiones casi vacías mientras que /data está hasta los topes. Esto tiene algún inconveniente, y es que no se puede usar el teléfono como si fuera almacenamiento masivo.
Esto representa una opción importante dentro de Ice Cream Sandwich, que anula el absurdo límite actual de muchos smartphones Android para instalar aplicaciones. Sin embargo, dicha mejora conlleva sus inconvenientes, y es que al no existir divisiones internas, el espacio de memoria es visto como un todo y no permite que sea montado como unidad de almacenamiento al mismo tiempo que es usado por el sistema operativo.
Llevado a la práctica, todo lo que hemos explicado supone que si conectamos un Samsung Galaxy Nexus con Android 4.0 a un ordenador, el terminal no será reconocido como un disco duro externo, tal y como pasaba actualmente. La solución de Google ha pasado por utilizar el protocolo MTP.
El uso de MTP en lugar del habitual MSC (Mass Storage Class) implica ciertas ventajas para los usuarios que usan habitualmente Windows, y en particular Windows Media Player. Por el contrario, introduce menos accesibilidad para que el smartphone sea utilizado como una memoria externa.
En los reproductores que utilizan MTP las subcarpetan no incluyen la fecha y hora de creación de archivos, lo que los hace incómodos si por ejemplo creamos notas de voz que pierden la fecha y hora en que fueron grabadas. Además, durante una copia de archivos no se debe cerrar la carpeta del reproductor desde el cual se están extrayendo los archivos, puesto que si lo hacemos la trasferencia se interrumpe.


1.5- Gestión de la memoria RAM en Android
Una de las principales bondades que hace potente a Android es la gestión que hace de la memoria RAM. Al contrario de los sistemas de escritorio antiguos, el tener más memoria RAM libre en Android no lo hace más rápido. En Android se ha seguido el prinicipio de que “memoria no usada es memoria desperdiciada”. Por ese motivo Android usa casi toda la memoria RAM disponible en el dispositivo, de tal forma que cuando necesita memoria RAM para otras aplicaciones simplemente empieza a liberar aplicaciones hasta disponer de la memoria que necesita, manteniendo abiertas las aplicaciones más utilizadas para una mayor eficiencia.
Pero, ¿Cómo decide Android en qué orden y que aplicaciones va cerrando para poder liberar memoria? Sencillamente Android clasifica las tareas realizadas en el sistema en 5 tipos o categorías, que son las siguientes:
  • - Primer plano: La tarea se está realizando ahora mismo. (Ej: Revisar correo)
  • - Procesos visibles: Se visualiza la tarea en la pantalla. (Ej: Navegar por una página)
  • - Servicios: Procesos "pendientes" de alguna tarea. (Ej: Descargar un MP3...)
  • - Segundo plano: Una tarea interrumpida que puede ser reanudada, o no (Ej: Cliente de twitter o Gmail)
  • - Procesos vacíos: Una tarea que se supone finalizada, pero se mantiene porque puede utilizarse en breve (Ej: Market, Reloj)
Así, Android va liberando memoria cerrando aplicaciones en el orden inverso al enumerado anteriormente, de tal forma que primero comenzará cerrando procesos vacíos, después de segundo plano y así hasta obtener la cantidad necesaria.
Debido a esta forma de gestionar la memoria, una de las cosas que no es recomendable utilizar son los llamados “TASK KILLERS”. Pueden ocasionar entre otros los siguientes problemas:
  • Los task-killers automáticos (que cierran todas las aplicaciones para conseguir más memoria libre) son un peligro, puesto que pueden desactivar alarmas o tareas programadas y que nunca se lleguen a realizar, además de realizar un consumo excesivo de batería por la gestión y monitorización constante de procesos.
  • Al liberar aplicaciones, estamos haciendo un uso extra de proceso, lo cual se reflejará en el consumo de batería.
  • Una vez liberada la memoria, Android volverá a continuar con su ciclo habitual de gestión de memoria, por lo que se volverán a cargar aplicaciones en memoria, convirtiendo en inútil el esfuerzo por mantener la RAM libre.
Si lo usas bajo tu responsabilidad, pero está más que demostrado que no ayudan a mejorar el rendimiento, sino todo lo contrario.


1.6.- Launchers ó interfaz de Android
El Launcher es la apariencia del «escritorio» del móvil, el entorno donde trabajamos. La pantalla principal (donde colocamos iconos o widgets), la lista de aplicaciones del móvil (app drawer), etc...
En realidad, sólo se trata de una aplicación más, y puede ser reemplazada por cualquier otro Launcher. Los fabricantes suelen crear su propio launcher ó interfaz de usuario, pero podemos reemplazarla por algunas de las gratuitas ó bien si preparamos una ROM cambiar la que incluye por la deseada.

¿Que es root?
Rootear Android implica instalar un código dentro de tu dispositivo para que tu puedas acceder al sistema con todos los permisos sin restricciones, el procedimiento de Rootear Android no cambia la versión de tu sistema operativo ni elimina datos o aplicaciones, es un procedimiento seguro y puede revertirse fácilmente.
Rootear viene de la palabra root que en sistemas basados en Unix y Linux se trata de el usuario raíz con derechos absolutos para modificar o cambiar atributos de cualquier archivo o carpeta, esto nos da acceso completo a las opciones de Hardware como son el Audio, el GPS, Video, WiFi, etc, además de permitirnos ejecutar cualquier programa. Al tener el control de tu teléfono podrás modificar diferentes cosas que antes no podías, por ejemplo usar ciertas aplicaciones exclusivas (Bluex),crear Backups o copias de seguridad ,cambiar la frecuencia de la CPU para que vaya más rápido, hacer capturas de pantalla, Tethering (utilizar la conexión 3g en tu PC), usar de ciertos programas de PC pero lo más importante es la posibilidad de instalar ROMs costumizadas y temas.
El tomar control de estos archivos también puede ser peligroso. Si no tenías acceso a ellos era por una razón sencilla, se puede dañar el dispositivo o dejar de funcionar correctamente.

¿Por qué rootear mi dispositivo?

  • Mejora el rendimiento: Uno de los mayores problemas para algunas personas es el rendimiento de sus teléfonos Android, muchas veces no son tan rápidos como les hubiera gustado. Dependiendo del fabricante, éste podría haber incluido algunos ajustes de rendimiento, como eloverclocking de la CPU del teléfono. Así que en elAndroid Market hay aplicaciones que te permiten hacer overclock, pero para que funcionen el teléfono debe tener permisos de raiz lo que se logra Rooteándolo. Obviamente hay algunos riesgos aquí. Si la CPU del teléfono trabaja a un rendimiento demasiado alto, pueden sufrir daños y calentarse demasiado. Así que si quieres hacer un overclocking hazlo con precaución.
  • Más aplicaciones de donde escoger: La plataforma Android puede hacer un montón de cosas. Sin embargo, todavía existen algunas limitaciones, impuestas por el fabricante o tal vez por la compañía telefónica, un teléfono Rooteado pasará por alto las limitaciones y te permitirá una mayor variedad de opciones de aplicaciones.
    Sólo por nombrar algunos de los numerosos ejemplos. Hay Firewalls, herramientas para hacer copias de seguridad, administradores de archivos de caché y mucho más.
  • Evita la fragmentación: Una de las principales quejas de muchos usuarios de dispositivos Android es la fragmentación del sistema operativo. Esto significa que entre todos los usuarios, hay muchas versiones diferentes del sistema operativo Android en uso. El Rootear un teléfono permitirá a un usuario utilizar una ROM que incluye las últimas características. Hay limitaciones aquí. Algunos teléfonos no son capaces de ejecutar las últimas versiones, para eso que tendrás que hacer alguna investigación para averiguar lo que tu teléfono puede manejar. En el peor de los casos, siempre es bueno hacer una copia de seguridad antes de tratar de Rootear y después todo lo que tienes que hacer es restaurar la copia si las cosas salen mal.
  • Opciones: Por ejemplo si tú quieres la opción para ejecutar una ROM personalizada entonces tiene la opción de hacerlo o no, si quieres que tu teléfono trabaje en su máxima velocidad entonces lo haces. Con un telefono Rooteado tiene la opción de hacer lo que tu quieras con el teléfono que tu compraste.
  • Poder desinstalar las aplicaciones que nunca utilizamos: Los móviles adquiridos a través de las operadoras suelen tener instaladas multitud de aplicaciones que no utilizamos nunca y que hacen que nuestro equipo funcione peor de lo normal. Además consumen batería y recursos. Si rooteamos nuestro dispositivo, seremos capaces de desinstalar sin problema estas aplicaciones.
  • Realizar copias de seguridad completas: Una vez que seamos Root tendremos acceso a todas las funciones y todos los ficheros del sistema. Esto será especialmente importante a la hora de realizar una copia de seguridad. De esta forma seremos capaces de realizar una copia completa del dispositivo, para después restaurarlo y que todo esté igual.
  • Cambios estéticos en el sistema: A todos nos gusta personalizar nuestro móvil para adaptarlo a nuestros gustos. Siendo Root podremos modificar todos los elementos que queramos y añadir menús, botones, funciones especiales y todo tipo de cosas que se nos ocurran. Existenmultitud de opciones en Internet para personalizar al máximo nuestro móvil Android.
  • Cambiar la densidad de pantalla: La densidad es la cantidad de píxeles en función del tamaño de la pantalla y siendo Root podremos modificar ese parámetro. Concretamente podremos hacer que sea menor, bien por necesidades del desarrollo o para conseguir que la visualización sea mejor en alguna circunstancia.
  • Instalar un nuevo Kernel y mejorar el funcionamiento del terminal: Una de las cosas que podemos hacer para que nuestro móvil mejore su funcionamiento es instalar un nuevo kernel. Con un nuevo kernel podremos, por ejemplo, overclockear el procesador o activar un modo de ahorro energético. Esto solo será posible haciéndonos Root de nuestro terminal.
  • Cambiar la ROM: Cambiar la ROM no solo depende de si somos Root o no, pero será el primer paso para conseguirlo. Gracias a la ROM podremos probar nuevas versiones del sistema operativo o versiones con funciones especiales. Además si desbloqueamos el bootloader, aún podremos instalar más ROM diferentes en nuestro terminal.
  • Instalar aplicaciones únicas: Siendo Root podremos instalar aplicaciones como Seeder, LMT Launcher y LagFix, con las que vamos a conseguir nuevas e increíbles funciones en nuestros dispositivos. Algunas de ellas son imprescindibles para disfrutar al máximo de nuestro móvil Android.
  • Métodos de control alternativos: En nuestro terminal Android podremos utilizar teclados y ratones que son compatibles sin necesidad de ser Root, pero si adquirimos los permisos de superusuarios, las posibilidades se amplían. Siendo Root podremos manejar el terminal con un mando de videoconsola o desde otro terminal Android.
  • Convertir nuestro móvil en otro: Siendo Root nos podemos permitir el lujo de comprar un smartphone Sony Xperia y hacer que funcione como si fuera un dispositivo Samsung o HTC. Existen muchos desarrollos que nos permiten adaptar el funcionamiento de nuestro móvil a otros modelos en concreto.
Estas son nuestras razones para hacerse Root, pero seguro que existen muchísimas más.

¿Que es una ROM?
Las ROMs son imágenes del sistema Android modificadas por programadores (conocidos como “cocineros”) con tal de aportar mejoras al sistema original. Así podremos disfrutar de una versión de Android que no está oficialmente disponible, o bien conseguir una personalización u optimización de una versión oficial mejorando la velocidad, o aportando funciones exclusivas o otras que te traen versiones de Android nuevas, etc.
Una vez visto el contexto general de Android así como su funcionamiento interno y las diferencias que hay entre los diferentes fabricantes, se pasará a detallar en qué consiste una ROM, la estructura que tienen, las herramientas que son necesarias para generarlas y los diferentes métodos de instalación que hay. Todo ello servirá para alcanzar los conocimientos previos para crear una versión modificada del sistema operativo Android.

3.1. El concepto de ROM
Las ROMs son imágenes del sistema operativo Android que se instalan en los dispositivos. Estas versiones suelen estar modificadas por programadores o los mismos fabricantes con el objetivo de aportar mejoras al sistema original, bien sea modificando las aplicaciones nativas de Android o introduciendo de nuevas.
Una ROM seria lo equivalente en un ordenador, a una de las muchas distribuciones de Linux que existen, pues en ellas, al igual que en las ROM, se a adaptado el código fuente de Linux, dando como resultado diferentes interpretaciones y usos del sistema operativo como por ejemplo:
• Suse
• Redhat
• Debian
• Wifislax
Una ROM a diferencia de una distribución de Linux, esta adaptada para un único terminal, pues incorpora los controladores especiales para el uso de sus componentes internos.

3.2. Estructura general de una ROM
La estructura general de una ROM viene a estar compuesta por las carpetas data, META-INF, system y el archivo boot.img tal y como se puede ver en la figura siguiente:

001_zps849eac28.jpg


Dentro de boot.img está el núcleo (kernel) y ramdisk de arranque (Un ramdisk es básicamente un pequeño sistema de archivos del núcleo necesarios para iniciar el sistema).
Dentro de META-INF se encuentran las firmas de todos los ficheros que instala la ROM y el scripts que controla la instalación de los archivos, esta carpeta tiene la siguiente estructura:

META-INF/
|-- CERT.RSA
|-- CERT.SF
|-- com
| |-- Android
| | `-- metadata
| `-- google
| `-- Android
| |-- update-binary
| `-- updater-script
`-- MANIFEST.MF

Dentro de la carpeta "system" están todos los ficheros a ser copiados al directorio "/system" del teléfono móvil Android, tal como se ve en la figura:

002_zps008776a8.jpg


Dentro de la carpeta "data" están todos los ficheros a ser copiados al directorio "/data" del teléfono móvil Android, en esta carpeta está la configuración de las diferentes aplicaciones del sistema, aunque conviene indicar que esta carpeta no es obligatoria y casi nunca se encuentra en las ROMs.

3.3. Herramientas para la gestión de una ROM
En este apartado se va a hacer una introducción general y muy simplificada de las herramientas más importantes para la gestión de ROMs en Android. Como el uso de algunas de estas puede ser muy complejo pues disponen de muchas opciones ya las analizaremos más detenidamente cada una de ellas. Los métodos aquí explicados son genéricos.

3.3.1. Android Debug Bridge (ADB)
ADB es una herramienta incluida en el SDK de Google que permite administrar emuladores o dispositivos Android. Tiene una estructura de cliente-servidor que está formado por tres componentes:
• Un cliente, que se ejecuta en el equipo de desarrollo.
• Un servidor, que se ejecuta como un proceso en segundo plano en su equipo de desarrollo
• Un daemon, que se ejecuta como un proceso en segundo plano en cada emulador o dispositivo.
Cuando se inicia un cliente ADB, el cliente comprueba primero si hay un proceso de servidor ADB que ya se está ejecutando. Si no hay ninguno, se inicia el proceso del servidor. Cuando el servidor se inicia, se une al puerto local TCP 5037 y empieza a escuchar los comandos enviados desde el cliente ADB
Los emuladores o dispositivos son localizados mediante el escaneo de los puertos impares en el rango de 5555 a 5585. Cuando el servidor encuentra un daemon ADB, en ella se establece una conexión a ese puerto. Si se ha instalado el plugin ADT de Android en Eclipse no es necesario acceder a ADB desde la línea de comandos ya que el plugin ADT ofrece una integración transparente de ADB en el IDE de Eclipse.
Aunque puede resultar muy útil para la depuración de errores o gestión del dispositivo Android hacerlo por línea de comandos pues se tiene mayor control e incluso se puede acceder internamente al móvil por medio de una Shell.

3.3.2. Repo y Git
Para trabajar con el código fuente de Android, se usan tanto Git como Repo.
Git es una herramienta VCS (Version Control System) de código abierto diseñada para manejar grandes proyectos que están en múltiples repositorios. Los proyectos de Android se almacenan en repositorios Git. Se ha desarrollado también una herramienta llamada REPO para facilitar el trabajo con repositorios basados en GIT.

3.3.3. Fastboot
Fastboot es una herramienta en línea de comandos que nos permite comunicarnos con el teléfono cuando este está en modo bootloader, esta herramienta nos es de gran utilidad porque nos permite hacer acciones tales como actualizar el teléfono, borrar la información, obtener su número de serie!


3.4. El Recovery
El recovery es una herramienta que reside en la partición /recovery del NAND del dispositivo. Esta partición la tienen todas los dispositivos que corren Android y la herramienta de RECOVERY que traen de fábrica es muy simple y limitada. Esta limitación no es por falta de programación o tiempo por parte de los fabricantes, sino con el propósito de que no modifiques ciertas áreas de sistema de tu dispositivo.
Para entender mejor su funcionamiento, debemos hablar un poco de otras áreas de tu dispositivo que están directa o indirectamente relacionadas al recovery, como por ejemplo, el bootloader. En la mayoría de los casos, el bootloader viene bloqueado de origen por el fabricante con el simple propósito de que no cambies nada. Esto no se hace con la intención de que te limites a lo que te ofrecen (en algunos casos), esto lo hacen para que no dañes los datos de origen con los que ellos han optimizado el funcionamiento del terminal (aunque sabemos que no siempre es así).
Con un bootloader bloqueado, el usuario no puede cambiar el Firmware o instalar ROMs a su dispositivo, y aunque en algunos dispositivos dependes de desbloquear el bootloader para poder instalar un recovery de un tercero, en otros puedes hacerlo, ya que los bootloaders vienen desbloqueados de fábrica o el proceso de instalar el recovery no depende de los bootloaders.
En algunas unidades, sobre todo las más antiguas, se necesitaba instalar o cambiar el kernel para poder usar un recovery de terceros, ya que el mismo kernel era el que contenía el recovery. Ahora, la mayoría de las unidades tienen una partición /boot con el Kernel y otra /recovery con el recovery aparte. Esto hace que el proceso sea un poco más llevadero y menos peligroso, y las posibilidades de “brickear” el dispositivo son menores, ya que anteriormente si instalabas un kernel con problemas, no tenías manera de subir la unidad al recovery para recuperarla, valga la redundancia.
Ahora el proceso es más sencillo, y aunque varía por modelo de dispositivo, básicamente consiste en “flashear” un recovery y luego hacer todo lo que quieras con tu dispositivo.
El recovery, al ser una herramienta que no depende del sistema operativo, tienen privilegios para escribir a muchas, pero no todas las particiones de la unidad. Digo esto porque si no tienes los bootloaders desbloqueados, no puedes flashear ROMs y hay casos que ni tan siquiera puedes flashear un Kernel, o sea la partición /boot (en estos casos para “flashear” un kernel necesitas hacerlo por FASTBOOT.
Hay dos recoverys muy conocidos y usados y que son los más recomendables para utilizar. Está el ya famoso ClockworkMod Recovery y el Team Win Recovery Project (TWRP). Este último es un recovery de código abierto y completamente touch screen y hasta con teclado. No voy a entrar en detalles de cada uno, pero vamos a ver las opciones o la funcionalidad que brinda tener un recovery como estos.

twrp-222-android-recovery_zps11449e45.jpg


Si cuentas con los requisitos necesarios, desde el recovery puedes flashear ROMs y/o modificaciones a los mismos. De la manera que trabajan ambos, el CWM y el TWRP, es que utilizan un “scripting language” para instalar los ROMs. Estos siempre estarán comprimidos en archivos tipo ZIP con cierta estructura necesaria para que el recovery los pueda interpretar e instalarlos. El recovery como tal no es quien lleva a cabo todo el trabajo de la instalación, pues dentro de los ZIP debe haber un archivo que contiene el código con las instrucciones de instalación. El recovery se encarga de darle los permisos e interpretar dichos comandos para proceder a instalar la ROM o la modificación.
El recovery, que por defecto se diseñó para recuperar unidades con problemas, te permite también llevar a cabo la función del famoso “Factory reset” o el reinicio con valores por defecto o de fábrica. Pero el CWM y el TWRP lo llevan un poco más allá, permitiéndote formatear particiones que el recovery de fábrica no te permite, como por ejemplo, /system que es la partición que contiene el sistema operativo, /cache, /data y hasta /sdcard para poder formatear el almacenamiento interno y el externo.
También podremos realizar un NAND Backup o NANDROID Backup o simplemente NANDROID. Esto es el backup al NAND de tu dispositivo, o sea, un backup a TODO tu dispositivo, ya que el NAND es el que contiene todas estas particiones en las cuales se instala Android. Al realizar un NAND Backup, copias todo incluyendo en ocasiones la partición /BOOT con el Kernel y en el caso del TWRP, te permite hacer backup al /RECOVERY.
Este NANDROID o NAND Backup es esencial hacerlo una vez hayas instalado un recovery como CWM o TWRP ya que si decides instalar un ROM, kernel o alguna modificación que te dé problemas o simplemente que no te guste, es la manera segura de regresar al estado anterior y recuperar no solo el sistema operativo, sino todos los apps y los datos de los mismos ya que el NAND Backup copia también la partición de /DATA, incluyendo /DATA/APP que es donde residen los apps que instalas y /DATA/DATA que es donde estos apps guardan sus datos.
Otra de las funciones que brinda el recovery, en la mayoría de los casos, es que te permite montar el almacenamiento del dispositivo en tu PC. En otras palabras, puedes pasar archivos a tu SDCARD interna desde el PC a través del recovery. Esto puede sonar como poco útil pero puede ser la salvación de nuestro dispositivo en más de una ocasión.
De igual manera, TWRP te permite instalar ZIPs files que hayan sido SIDELOADED. Me explico. Estando en el TWRP recovery, puedes seleccionar la opción de flashear un archivo por sideload. Al seleccionar esta opción, puedes utilizar la herramienta de ADB para transferir un zip al momento a tu dispositivo y flashearlo. Esto puede salvar el dispositivo si está en un soft-brick y no se puede montar el almacenamiento del dispositivo para pasar un ROM que se debería flashear. En estos casos activamos el sideload y pasamos la ROM por ADB logrando así flashearlo y recuperar el dispositivo.
Así pues, el recovery no solo es para instalar ROMs y ya, esta herramienta es mucho más poderosa de lo que pensamos y si sabemos usarla bien le podemos sacar mucho provecho.



3.5. Instalar una ROM
Para instalar una ROM en un terminal principalmente existen 3 métodos, vía OTA, con la herramienta Fastboot y por medio del modo recovery.
El modo de instalación vía OTA (Over The Air) es controlado por los fabricantes y las operadoras, es distribuido de forma inalámbrica a los usuarios y salta automáticamente cuando existe una actualización disponible.
El modo de instalación con la herramienta fastboot es muy poco usado aunque algunas actualizaciones oficiales se pueden instalar por esta via de actualización.
La instalación usando el modo recovery es la que se utiliza normalmente por los usuarios, exceptuando las OTAs automáticas, ya que pueden actualizar sus dispositivos incluso antes que el fabricante presente sus versiones oficiales. Para poder instalar por medio de recovery la ROM tiene que contener un archivo updater-script o update-script de otra forma es imposible la instalación de la ROM con este método, pues este es el que contiene las órdenes de instalación.
Para poder instalar ROM modificadas es muy recomendable tener el terminal con privilegios de administrador (ROOT).

3.5.1. Instalar una ROM con la herramienta fastboot
Fastboot es un protocolo de Android que permite modificar el filesystem mediante una conexión USB al smartphone. Este método está desactivado en algunos smartphones que necesitan ser root para poder activarlo.
Fastboot permite modificar el recovery, la rom, borrar el userdata, system, cache. Para poder instalar una ROM con la herramienta fastboot primero se debe de poner el teléfono en modo bootloader.
Para poder interactuar con nuestro teléfono tenemos que tener los drivers del smartphone correctamente instalados en nuestra máquina así como el SDK de Android.
Una vez nuestra máquina cumpla los requisitos, podemos ejecutar desde una terminal comandos para interactuar con nuestro smartphone. Es necesario colocarse en la carpeta platform-tools de la SDK de Android.

android-platform-tools_zpsd62d7458.png


En el listado de archivos y carpetas encontramos la utilidad fastboot a través de la cual podemos realizar las siguientes operaciones. Para muchas de ellas tendremos que tener el OEM (Bootloader) del smartphone desbloqueado.
# Desbloqueo de OEM
./fastboot oem unlock
Esto nos llevará a la siguiente pantalla donde debemos seleccionar el desbloqueo.

android-fastboot-bootloader_zpsa7fa910f.png


Hecho esto nuestro smartphone está en condiciones de realizar las siguientes tareas:
usage: fastboot [option] [command]

El caso más popular es usarlo para flashear el recovery y sustituir el de fábrica por uno que permita actualizar desde un zip, hacer backups, o incluso cifrar/descifrar particiones.
Este es el comando para flashear la partición recovery del smartphone:
# Comprobando que nuestro dispositivo es detectado
./fastboot devices
List of devices attached
XXXXXXXXXXXX device
# Flasheando el recovery
./fastboot flash recovery recovery.imgOtro uso bastante habitual es resetear el terminal y dejarlo tal y como viene de fábrica.
Para ello algunos fabricantes ponen a disposición de todos los usuarios de sus smartphones, las imágenes oficiales de sus diferentes versiones de Android para que mediante el fastboot mode podamos dejar el teléfono como si viniera de fábrica.
El archivo .tgz contiene el bootloader, la radio y un .zip con la ROM. El .zip incluye:

android-platform-tools-img_zpsd1a870b5.png


Para instalar estas imágenes se ejecuta un script en Shell Script (Bash), flash-all.sh, que tiene una serie de comandos que hacen uso de fastboot para borrar y flashear el bootloader, radio y rom.
#!/bin/sh
# Copyright (C) 2011 The Android Open Source Project
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
./fastboot flash bootloader bootloader-maguro-primelc03.img
./fastboot reboot-bootloader
sleep 5
./fastboot flash radio radio-maguro-i9250xxlf1.img
./fastboot reboot-bootloader
sleep 5
./fastboot -w update image-yakju-jro03c.zip
Ejecutando el script dejaremos nuestro smartphone tal y como venía de fábrica con la ROM oficial. Es recomendable una vez terminemos de usar el fastboot mode bloquear de nuevo el bootloader.
# Bloquear bootloader / OEM lock
./fastboot oem lock

Resumiendo en una serie de pasos para poder usar fastboot deberemos de seguir los siguientes pasos:
• Se debe de conectar el terminal al PC con el cable de datos.
• Acceder a línea de comandos
• Activar depuración USB desde “Ajustes > Aplicaciones > Desarrollo
• Apagar el teléfono
• Mantener apretado el TrackBall y botón de encendido (o la combinacin de nuestro dispositivo), esto pondrá el teléfono en modo bootloader.
• Confirmar que hay conexión fastboot escribiendo en la línea de comandos: fastboot devices
• Borrar datos de usuario tecleando en línea de comandos: fastboot erase userdata
• Borrar cache con: fastboot erase cache

A partir de este punto se puede instalar un update.zip para instalar la ROM entera o únicamente instalar alguna de sus partes es decir el boot.img, el system.img, el recovery.img o radio.img.
• Para instalar la ROM por medio de un update.zip se tiene que situar dentro de la carpeta que contiene el archivo a instalar: cd /ruta de la carpeta con el archivo .zip/
• finalmente se inserta: fastboot update <nombre del archivo.zip>

Si lo que interesa es instalar únicamente una parte de la ROM entonces, se tiene que descomprimir el archivo update.zip para obtener los archivos .img.
• Para ir a la carpeta con los archivos .img introduciremos en línea de comandos: cd /ruta de la carpeta con los archivos .img/
• Si se quiere instalar el boot.img se pulsara: fastboot flash boot boot.img
• Si se desea instalar el system.img se introducirá: fastboot flash system system.img
• Si se quiere instalar el recovery.img se tiene que introducir: fastboot flash recovery recovery.img

Hay que tener en cuenta que con un recovery distinto al original ya no se podrá actualizar el terminal vía OTA
• Para instalar una radio.img se debe teclear: fastboot flash radio <nombre del archivo radio>.img
• Para salir de este modo y reiniciar el terminal se debe de pulsar: fastboot reboot


3.5.2. Instalación de una ROM en modo recovery
El método de instalación de ROMs en modo recovery es el más usado, para instalar ROMs diferentes de la versión original. Para poder usar este método es muy recomendable tener cambiada la versión del recovery del terminal.
Las versiones más modernas de recovery han sido modificadas para no requerir la comprobación de firmas, pues en principio toda ROM tiene que estar firmada, esto que en un principio da mayor seguridad dificulta mucho la tarea de hacer pruebas.
El primer paso para instalar las ROMs por medio del recovery es apagar el terminal y volverlo a encender en modo fastboot, tal y como se ha explicado anteriormente.
Una vez dentro del modo fastboot se debe de seleccionar BOOTLOADER con las teclas de subir y bajar volumen y presionar la tecla de encender el teléfono para confirmar tal y como muestra la figura:

003_zps06dba9c5.jpg


Seguidamente se debe de seleccionar RECOVERY y presionar de nuevo el botón de encendido para entrar en el modo recovery como se puede ver en la figura:

004_zpsc2d20613.jpg


Una vez dentro del modo recovery, aparecerá un menú muy similar al de la figura anterior. Para desplazarse por el menú se puede hacer bien con los botones del volumen o con el trackball, además también sirve para confirmar pulsándolo, para regresar al menú anterior se utilizara el botón de encendido.
Suponiendo que el archivo que contiene la ROM que deseamos instalar aún no está en la tarjeta SD del terminal seleccionaremos la opción mounts and storage.

005_zpsf45c790a.jpg


Dentro de este menú se tiene que seleccionar la opción mount USB storage tal y como muestra la figura:

006_zpsf6256409.jpg


Esto permite conectar el terminal al ordenador por medio del cable USB, y este se verá en el ordenador como si de una memoria USB se tratara. De manera que se podrá pasar a la tarjeta SD del terminal el archivo de la ROM que se desea instalar. Una vez transferido el archivo se de aUNMOUNTesto desmontara la unidad y regresara al menú anterior. En este momento se debe regresar al menú principal del modo recovery y seleccionar wipe data/factory reset, esto aunque no es obligatorio, borrara toda la configuración de Android así como sus aplicaciones y permitirá instalar la ROM desde cero previniendo posibles problemas de configuración.

005_zpsf45c790a.jpg


Seguidamente se debe de seleccionar install zip from sdcard desde el menú principal para proceder a la instalación de la ROM. Una vez dentro aparecerá el menú de la figura siguiente en el que se debe de elegir la opción choose zip from sdcard para seleccionar la ROM. Es en este menú también donde permite seleccionar si se desea que tenga en cuenta las firmas en la ROM desde la opción de toggle signature verification, que por defecto no se comprobaran y con la opción de toggle script asserts se desactiva la comprobación del script de instalación de la ROM.

007_zps44fa0bca.jpg


Finalmente aparece un menú como el de la figura siguiente con todos los archivos de la tarjeta SD en este menú se tiene que seleccionar el archivo que de la ROM a instalar.

008_zpsbed904d9.jpg



3.5.3. Los archivos update-script y updater-script
Las ROMs que se instalan por medio del modo recovery (el método usado para generar la ROM modificada) necesitan incorporar el archivo update-script o bien el archivo updater-script para poder ser instaladas correctamente, ya que estos archivos se encargan de formatear, copiar las carpetas al terminal, establecer los permisos de las carpetas y los archivos incluso ejecutar programas externos.
El archivo update-script esta escrito en formato AMEND, este formato esta siendo cada vez menos usado ya que tiene algunas limitaciones. Los archivos updater-script están escritos en formato EDIFY, A diferencia de los updatescript, los updater-script necesitan un binario llamado update-binary para poder ejecutarse. Éste se obtiene compilando desde las fuentes. Aunque utilizan la misma lógica al menos en los comandos más básicos y más comunes, la sintaxis difiere entre AMEND y EDIFY, para generar la ROM modificada se ha optado por escribir un archivo updater-script por tanto esta en formato EDIFY, a continuación se van a exponer partes del archivo que se consideran relevantes:
ui_print(" INICIO DE LA INSTALACION UPC");
Muestra por pantalla el mensaje de “INICIO DE LA INSTALACION UPC” informando al usuario durante el proceso de instalación
show_progress(0.500000, 0);
Controla el desplazamiento de la barra de progreso durante la instalación de la ROM
format("yaffs2", "MTD", "system");
Formatea el directorio system dentro del teléfono
mount("yaffs2", "MTD", "system", "/system");
Monta el directorio system en del archivo .zip en el teléfono.
package_extract_dir("system", "/system");
Copia todo el directorio system de dentro del archivo .zip al teléfono incluyendo todos los archivos y subcarpetas.
unmount(“/system”);
Desmonta el directorio system del teléfono
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
Se encarga de poner los permisos a las carpeta, subcarpetas y archivos que contenga el directorio /system/etc/ppp el primer cero indica al creador y el segundo al grupo al que pertenece 0755 son los permisos que se otorgaran a las carpetas 0555 indica los permisos que se otorgaran a los archivos
set_perm(0, 0, 0755, "/system/etc/init.d");
Funciona de la misma forma que el anterior pero solo otorga permisos a un único archivo.
run_program(“/tmp/script.sh”, “argumento1”, “argumento2”!);
Ejecuta script externo.
symlink(“origen”,”destino”);
Crea enlaces simbólicos (accesos directos) entre las dos rutas

Fuente: http://forotek.net/index.php?PHPSESSID=a85e70f348020896ea942c31ba2c3afb&board=597.0
 
  • Me gusta
Reactions: Maguncia