Fundamentos de Android (Parte 2/2): Arquitectura, Dispositivos y Curiosidades

Llega la segunda entrega de este miniciclo de introducción a Android. En esta ocasión, veremos la arquitectura completa del sistema, los dispositivos disponibles (un sinfín de productos) y una sección de curiosidades que seguro te sorprenderán. Bienvenido de nuevo al universo del androide verde.

Arquitectura

Los componentes principales del sistema operativo de Android se dividen en 4 capas: aplicaciones, marco de trabajo (o framework) de aplicaciones, bibliotecas, y kernel de linux. Además, dentro de la capa de bibliotecas (o bien al mismo nivel) se encuentra el entorno de ejecución de Android (el runtime).

Arquitectura de Android

Veamos cada una de estas capas detenidamente.

Arquitectura de Android

Aplicaciones

La capa de aplicaciones contiene 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, la aplicación «Inicio» o «Home», también llamada a veces lanzador (o launcher), dado que 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, de hecho, 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 (es decir, 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.

Marco de trabajo de aplicaciones

La capa Framework de aplicaciones contiene el conjunto de APIs usadas por las aplicaciones base, las cuales se encuentran disponibles en esta capa también para los desarrolladores. Más concretamente, está formada por todas las clases y servicios que utilizan directamente las aplicaciones para realizar sus funciones y que se apoyan en las bibliotecas y en el entorno de ejecución detallado en otras capas de esta arquitectura. 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 o del ART.

Capa Framework de Aplicaciones de Android

Entre las más importantes se encuentran las siguientes:

  • Administrador de actividades (Activity Manager): se encarga de controlar el ciclo de vida de las actividades y la propia pila de actividades. Las actividades se pueden definir como las ventanas que se muestran, una sobre otra, en la pantalla del dispositivo Android.
  • Administrador de ventanas (Windows Manager): se encarga de organizar lo que se muestra en pantalla, creando superficies que pueden ser rellenadas por las actividades.
  • Proveedor de contenidos (Content Provider): permite encapsular un conjunto de datos que va a ser compartido entre aplicaciones creando una capa de abstracción que hace accesible dichos datos sin perder el control sobre cómo se accede a la información.
  • Vistas (Views): las podríamos equiparar con los controles que se suelen incluir dentro de las ventanas (o actividades) mostradas por el dispositivo, como pueden ser botones, cuadros de texto, listas, etc. También proporciona otras más sofisticadas, como un navegador web o un visor de Google Maps.
  • Administrador de notificaciones (Notification Manager): proporciona servicios para notificar al usuario cuando algo requiera su atención, bien en la barra de estado, o con sonidos, vibración o parpadeo de los LEDs del teléfono (si los tiene).
  • Administrador de paquetes (Package Manager): las aplicaciones Android se distribuyen en paquetes (archivos .apk), que contienen tanto los archivos y recursos que necesita la aplicación, para facilitar su descarga e instalación. Esta biblioteca permite obtener información sobre los paquetes actualmente instalados en el dispositivo Android, además de gestionar la instalación de nuevos paquetes.
  • Administrador de telefonía (Telephony Manager): proporciona acceso a la pila hardware de telefonía del dispositivo Android, si la tiene. Permite realizar llamadas o enviar y recibir SMS/MMS, aunque por motivos de seguridad no permite reemplazar o eliminar la actividad que se muestra cuando una llamada está en curso.
  • Administrador de recursos (Resource Manager): proporciona acceso a todos los elementos propios de una aplicación que se incluyen directamente en el código, como cadenas de texto traducidas a diferentes idiomas, imágenes, sonidos e incluso disposiciones de las vistas dentro de una actividad (layouts). Permite gestionar esos elementos fuera del código de la aplicación y proporcionar diferentes versiones en función del idioma del dispositivo o la resolución de pantalla que tenga.
  • Administrador de ubicaciones (Location Manager): permite determinar la posición geográfica del dispositivo Android (usando el GPS o las redes disponibles) y trabajar con mapas.
  • Administrador de sensores (Sensor Manager): permite gestionar todos los sensores hardware disponibles en el dispositivo Android, como el acelerómetro, giroscopio, sensor de luminosidad, sensor de campo magnético, brújula, sensor de presión, sensor de proximidad, sensor de temperatura, etc.
  • Cámara: proporciona acceso a las cámaras del dispositivo Android, tanto para tomar fotografías como para grabar vídeo.
  • Multimedia: conjunto de bibliotecas que permiten reproducir y visualizar audio, vídeo e imágenes en el dispositivo.

Runtime de Android

El Runtime de Android contiene 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. Cada aplicación Android corre su propio proceso, con su propia instancia de la máquina virtual Dalvik. Desde la versión 5.0 se utiliza el ART (Android RunTime), que compila totalmente en el momento de la instalación de la aplicación. Aunque se apoya en las bibliotecas que enumeraremos en la capa siguiente, no se considera una capa en sí misma, dado que también está formada por bibliotecas.

Capa Android Runtime de Android

Antes de la versión 5.0 el componente principal del entorno de ejecución de Android era la máquina virtual Dalvik, componente que ejecutaba todas y cada una de las aplicaciones no nativas de Android. Las aplicaciones se codificaban normalmente en Java y eran compiladas en un formato específico para la máquina virtual Dalvik, que era la que las ejecutaba. Esto permitía 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.

Gráfico sobre el funcionamiento de la máquina virtual Dalvik de Android

Comentar también, que 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 (sino archivos .dex, de Dalvik executable) y, por lo tanto, no se pueden ejecutar en máquinas virtuales Java convencionales. Estos 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 de la capa siguiente y, a través de ellas, al hardware y al resto de recursos gestionados por el kernel.

A partir de la versión 5.0, se utiliza el Android Runtime (o ART). A diferencia de Dalvik, que desde Android 2.2 «Froyo» utiliza «just-in-time» (JIT) para compilar el código cada vez que se inicia una aplicación, ART introduce el uso de Ahead of Time (AOT), que crea un archivo de compilación posterior a la instalación de la aplicación. Este archivo es utilizado al abrir la aplicación, y con ello se evita que la aplicación se compile continuamente cada vez que ésta es ejecutada. Al reducir la cantidad global de compilaciones realizadas por cada aplicación, el uso del procesador del dispositivo móvil se reduce y aumenta la duración de la batería.

Gráfico sobre el funcionamiento del ART de Android

Al mismo tiempo, ART trae mejoras en el rendimiento, tales como la recolección de basura, aplicaciones de depuración y perfilado. Para mantener la compatibilidad con versiones anteriores, ART utiliza el mismo código de bytes de entrada que Dalvik, el cual es suministrado a través de archivos .dex estándar como parte de los archivos APK, mientras que los archivos .odex son reemplazados por archivos de Formato Ejecutable y Enlazable (ELF). Una vez que una aplicación se compila utilizando ART en el dispositivo, ésta es dirigida exclusivamente a partir del ejecutable ELF compilado.

Bibliotecas

La capa de bibliotecas contiene las bibliotecas nativas de Android (también mal llamadas librerías, por el término inglés «libraries»). 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 (al menos en teoría).

Estas son algunas de las bibliotecas que se incluyen habitualmente:

  • Gestor de superficies (Surface Manager): se encarga de componer las imágenes que se muestran en la pantalla a partir de capas gráficas 2D y 3D. Cada vez que la aplicación pretende dibujar algo en la pantalla, la biblioteca no lo hace directamente sobre ella. En vez de eso, realiza los cambios en imágenes (mapas de bits) que almacena en memoria y que después combina para formar la imagen final que se envía a pantalla. Esto permite realizar con facilidad diversos efectos: superposición de elementos, transparencias, transiciones, animaciones, etc.
  • SGL (Scalable Graphics Library): se encarga de representar elementos en dos dimensiones. Es el motor gráfico 2D de Android.
  • OpenGL | ES (OpenGL for Embedded Systems): motor gráfico 3D que utiliza aceleración hardware (si el teléfono la proporciona) o un motor software altamente optimizado (o eso dice Google) cuando no la hay.
  • Bibliotecas multimedia: basadas en OpenCORE, permiten visualizar, reproducir e incluso grabar numerosos formatos de imagen, vídeo y audio como JPG, GIF, PNG, MPEG4, AVC (H.264), MP3, AAC o AMR.
  • WebKit: motor web utilizado por el navegador (tanto como aplicación independiente como embebido en otras aplicaciones). Es el mismo motor que utilizan Google Chrome y Safari.
  • SSL (Secure Sockets Layer): proporciona seguridad al acceder a Internet por medio de criptografía.
  • FreeType: permite mostrar fuentes tipográficas, tanto basadas en mapas de bits como vectoriales.
  • SQLite: motor de bases de datos relacionales, disponible para todas las aplicaciones.
  • Biblioteca C de sistema (libc): proporciona funcionalidad básica para la ejecución de las aplicaciones.

Capa de Abstracción de Hardware (HAL)

Como capa adicional entre las bibliotecas y el núcleo de linux, y que podemos ver en el siguiente gráfico más detallado, se encuentra la llamada «capa de abstracción de hardware» (en inglés, Hardware Abstraction Layer o HAL), que es un elemento del sistema operativo que funciona como una interfaz entre el software y el hardware del sistema, proveyendo una plataforma de hardware consistente sobre la cual corren las aplicaciones. Cuando se emplea una HAL, las aplicaciones no acceden directamente al hardware, sino que lo hacen a la capa abstracta provista por la HAL.

Gráfico con capa HAL de Android

Del mismo modo que las API (Application Programming Interface), las HAL permiten que las aplicaciones sean independientes del hardware porque abstraen información acerca de tales sistemas, como lo son las cachés, los buses de E/S y las interrupciones, y usan estos datos para darle al software una forma de interactuar con los requerimientos específicos del hardware sobre el que deba correr.

Arquitectura de Android con capa HAL resaltada

Núcleo Linux

Volviendo a nuestro esquema básico, tenemos en último lugar el núcleo (o Kernel) de Linux, el cual es imprescindible para los servicios base del sistema, como son: seguridad, gestión de memoria y energía, gestión de procesos, pila de red, modelo de controladores, elementos de comunicación (networking), etc. Se trata de un kernel Linux versión 2.6, 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).

Capa Kernel de Linux de Android

Proporciona una capa de abstracción para los elementos hardware a los que tienen que acceder las aplicaciones, lo que 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.

Dispositivos

El sistema operativo Android se usa en teléfonos inteligentes, ordenadores portátiles, netbooks, tabletas, Google TV, relojes de pulsera, auriculares, receptores decodificadores integrados, y otros dispositivos, siendo este sistema operativo accesible desde terminales de menos de 100 dólares hasta terminales que superan los 1000.

Varios dispositivos Android

La plataforma de hardware principal de Android es la arquitectura ARM. ARM es una arquitectura RISC (Reduced Instruction Set Computer u Ordenador con Conjunto Reducido de Instrucciones), tal que el conjunto de instrucciones, de 32 y 64 bits, es el más ampliamente utilizado en unidades producidas. La relativa simplicidad de los procesadores ARM los hace ideales para aplicaciones de baja potencia.

Arquitectura ARM contra arquitectura Intel

Además, necesitan una cantidad menor de transistores que los procesadores x86 CISC típicos en la mayoría de ordenadores personales, lo que conlleva una reducción de costes, calor y energía, características altamente deseables para dispositivos que funcionan con baterías, como los teléfonos móviles, tabletas, etc.

Arquitectura ARM

Como resultado, se han convertido en dominantes en el mercado de la electrónica móvil e integrada, encarnados en microprocesadores y microcontroladores pequeños, de bajo consumo y relativamente bajo costo. Algunos ejemplos de dispositivos son: PDAs, tabletas, teléfonos móviles, smartphones, relojes inteligentes, videoconsolas portátiles, calculadoras, reproductores digitales (de música, fotos, vídeos, etc.), y periféricos de ordenador (como discos duros y routers).

Chip ARM

El primer teléfono disponible en el mercado para ejecutar Android fue el HTC Dream, dado a conocer al público en octubre de 2008.

HTC Dream

A principios de 2010, Google colaboró con HTC para lanzar su producto estrella en dispositivos Android, el Nexus One.

Nexus One

Google continuó la comercialización de la gama Nexus en 2010 con el Samsung Nexus S, en 2011 con el Galaxy Nexus y en 2012 con el Nexus 4.

Dispositivos Nexus

También con las tablets Nexus 7 y Nexus 10, y en 2014 con el Nexus 6 y la tablet Nexus 9. En la actualidad existen aproximadamente 1 millón de aplicaciones para Android y se estima que 1 millón y medio de teléfonos móviles se activan diariamente.

Tabletas Nexus: Nexus 7, Nexus 9 y Nexus 10

Android es considerado como uno de los modelos de negocio más exitosos, pues su desarrollo estratégico contempla los factores que más se tienen en cuenta dentro de las herramientas y metodologías desarrollados por expertos en negocios. Este sistema operativo se ha convertido en un modelo a seguir por desarrolladores de tendencias y negocios de alto impacto.

Muñeco de Android junto de gráfica de barras ascendente

Android, al contrario que otros sistemas operativos para dispositivos móviles como iOS o Windows Phone, se desarrolla de forma abierta y se puede acceder tanto al código fuente como a la lista de incidencias donde se pueden ver problemas todavía no resueltos y reportar problemas nuevos.

Muñeco de Android junto a ejemplo de código JAVA de Android

Comentar que, el que se tenga acceso al código fuente, no significa que se pueda tener siempre la última versión de Android en un determinado móvil, ya que el código para soportar el hardware (controladores) de cada fabricante normalmente no es público, así que faltaría un trozo básico del firmware para poder hacerlo funcionar en dicho terminal; además, las nuevas versiones de Android suelen requerir más recursos, por lo que los modelos más antiguos quedan descartados por razones de memoria RAM, velocidad de procesador, etc.

Muñeco verde de Android sobre fondo verde con rayas curvas

En un principio, Android era eminentemente un sistema operativo pensado para usar con teclado, y gracias a un cursor poder navegar entre las aplicaciones. Poco después, antes del lanzamiento del primer teléfono Android, esta filosofía cambió para convertirse en eminentemente táctil, y poder competir contra el iPhone, presentado 1 año y 9 meses antes.

Dispositivos con Android: robot, nevera y bicicleta.

Curiosidades

En esta sección veremos algunas curiosidades del mundo Android que seguro te sorprenderán.

Gato asombrado

1. El primer Android

El primer Android fue el mítico HTC Dream, el cual ya venía con Gmail, Google Calendar, Youtube y Google Maps.

HTC Dream

2. Mascota original

La mascota original de Android era muy distinta. Allá por 2007, Andy, la mascota de Android, no existía. Dan Morrill, uno de los ingenieros creadores, decidió abrir Inkscape, y creó estas cosas que por un tiempo fueron utilizadas para referirse a Android.

Mascotas originales de Android

3. Números de escándalo

Android tiene unos números de escándalo, con más de 1000 fabricantes Android distintos y más de 1400 millones de usuarios. Además, tiene una cuota de mercado del 82,4%, con más de 24.000 millones de dispositivos.

Muñeco de Android junto a logos de Apple y Windows que sigue flecha descendente

4. Terminaciones

¿Sabés por qué el Nexus 5X termina en X y el Nexus 6P termina en P? Pues la X viene de «NeXus» y la P viene de «Premium». Por su parte, la S de los Galaxy S viene de «Super Smart», la Y viene de «Young», la R de «Royal» y la M de «Magical».

Dispositivos Nexus

5. Otros propósitos

Android no fue inicialmente diseñado para smartphones, sino para cámaras inteligentes. La idea principal de Andy Rubin era crear una plataforma donde las cámaras se pudiesen conectar a nuestro ordenador y establecer un enlace directo con la nube para subir las imágenes y vídeos de forma mas clara e intuitiva. No obstante, debido a la creciente expectación por el mercado de los smartphones y la decadencia progresiva de las cámaras, finalmente se optó por dar un cambio en la orientación del proyecto.

Andy Rubin

6. Dulce favorito

KitKat es el dulce favorito de Hiroshi Lockheimer, actual ingeniero jefe de Android, y por eso fue elegido como nombre para la versión 4.4 de Android, a pesar de que no era un dulce cualquiera, sino un nombre registrado.

Varios Kit Kats

7. Multicuenta

Uno de los problemas más habituales de Android es que no podemos tener dos cuentas distintas a la vez, por ejemplo en WhatsApp. Afortunadamente hay una serie de aplicaciones no muy conocidas que nos permiten tener multicuenta, y que son perfectas para exprimir el móvil al máximo.

Varios whatsapps a la vez

8. Secreto oculto

Cada versión de Android tiene un secreto oculto. Si quieres comprobarlo debes ir a «Ajustes > Información del teléfono» y pulsar repetidamente sobre el número de versión.

Secretos de versiones de Android

9. ¿Amenaza?

En Nokia pensaban que Android no era una amenaza. Además, los creadores de Windows también subestimaron a Android, del que decían que no tendría impacto.

Teléfono Nokia

10. Pasión en España

España es el país más fan de Android y Google. De hecho, España cuenta con una tasa de penetración de Android excepcional, cerca del 90%, una decena de puntos superior a la media. Además de eso, el 99% de los usuarios tiene Google como su navegador por defecto, y los servicios del buscador (Chrome, Gmail, etc.) también tienen un porcentaje desmesurado de uso.

Muñeco de Android junto a fecha ascendente al lado de bandera de España

11. Android Device Manager

Puedes encontrar tu móvil haciéndolo sonar aunque esté silenciado. Para ello, Google tiene una herramienta llamada «Android Device Manager», que te permitirá hacerlo sonar aunque esté silenciado.

Mujer buscando en un bolso

12. Android y Microsoft

Microsoft gana dinero con cada Android vendido (entre 1 y 5 dólares), por un tema de patentes y derechos de autor.

Muñeco de Android como ficha de Monopoly

13. En el espacio

Android estaba, está y estará en el espacio. El pasado año 2013 la NASA envió unos satélites ultra baratos al espacio para realizar capturas de imágenes del planeta a una buena calidad, demostrando que no se precisa de una tecnología espacial puntera para poder hacerlo. Para permitir el funcionamiento de dichos satélites se escogió Android, y el resultado final fue un éxito. Es más, recientemente la NASA ha vuelto a comunicar que utilizará Android en algunos de sus dispositivos para futuras aplicaciones de captura de imagen, tanto de nuestro planeta como para futuras sondas que se envíen a diferentes puntos del sistema solar.

Muñeco de Android en el espacio

14. Tablets

Las tablets Android tardaron 3 años en superar al iPad en ventas. Más concretamente, el iPad fue presentado en abril de 2010, y fue en el segundo trimestre de 2013 cuando el 51% de tablets vendidas fueron Android.

Tablets Android

15. En los coches

La lista de coches con Android es más larga de lo que crees. Algunos ejemplos son: Alfa Romeo, Audi, BMW, Fiat, Ford, Honda, Hyundai, Kia, Lamborghini, Mercedes-Benz, Mitsubishi, Nissan, Opel, Renault, SEAT, Volkswagen, etc. Ferrari no está, pero pocos más faltan.

Interior de coche con Android

16. Todo tipo de dispositivos

Existen todo tipo de dispositivos con Android, desde impresoras hasta neveras.

Nevera con Android

17. Instalaciones obligadas

Los fabricantes están obligados a preinstalar la gran mayoría de Google Apps aunque no les interese. Muchos fabricantes, de hecho, no querrían instalar por ejemplo Hangouts o Google Photos, solo Google Play. Sin embargo, el buscador no lo permite, y si quieres una debes instalar todas.

Varias apps en teléfono Android

18. Referencias

Tanto el nombre Android (androide en español) como Nexus One, hacen alusión a la novela de Philip K. Dick «¿Sueñan los androides con ovejas eléctricas?», que posteriormente fue adaptada al cine como «Blade Runner». Tanto el libro como la película se centran en un grupo de androides, llamados replicantes, del modelo Nexus-6.

Cartel de Blade Runner

19. Open Handset Alliance

Entre las compañías que están en el Open Handset Alliance se encuentran Google, HTC, Texas Instruments, Broadcom Corporation, Nvidia, Qualcomm, Samsung Electronics, Dell, Intel, LG, Motorola, T-Mobile, Sony Ericsson, Huawei, Toshiba y Vodafone.

Logo del Open Handset Alliance

20. La demanda de Oracle

A través de un comunicado de prensa, Oracle anunció en Agosto de 2010 una demanda contra Google por violación de propiedad intelectual en el uso de Java en el sistema operativo Android. Sin embargo, en Junio de 2012 se celebró el juicio fallando a favor de Google, siendo así que no violaba ninguna patente de Oracle.

Logos de Java y Google junto a mazo de juez

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


error: