1. Visión general del
Sistema Operativo
Android
Diseño y evaluación de configuraciones
3º I.T. Informática de Sistemas
Jose Luis Carmona Tamayo
Jose Fco Bravo Sánchez
2012
2.
3. Visión general del Sistema Operativo Android
¿Que es Android?
Android es un Sistema Operativo diseñado en un inicio para su utilización en dispositivos móviles, pero que gracias a
su diseño ha permitido que sea utilizado en otros dispositos tales como TV Boxs (Woxter Android TV 100), micro-Pcs
(Android MK802), netpcs, reproductores multimedia etc.
Android es desarrollado por la Open Handset Alliance, encargada de desarrollar estándares abiertos para
dispositivos móviles, y que esta compuesta por 84 compañías entre las que se encuentran Google, HTC, Dell, Intel,
Motorola, etc.
Un poco de historia
El sistema operativo Android empezó a desarrollarse por una compañía de software llamada Android Inc, situada en
Palo Alto y fundada por Andy Rubin, Rich Miner, Nick Sears, y Chris White. Esta compañía fue comprada por Google
en 2005, como parte de su estrategia de entrar en el mundo del desarrollo de software para dispositivos móviles.
En 2006 y 2007 fue cuando Google comenzó a ofrecer sericios tales como Google Maps Mobile, Gmail Mobile,
Google Search o Google SMS, para los sistemas Java ME, Symbian o Blackberry. Fue entonces cuando Google se
encontró con el problema de la lentitud de los dispositivos que en ese momento utilizaban mayoritariamente Java
ME.
En 2007 se creó la Open Handset Alliance liderada por Google, y cuyo objetivo es acelerar la innovación en los
dispositivos móviles, ofrecer a los clientes una experiencia móvil mejor, maás barata y mas rica. Este organismo
apostó por por Android como Sistema Operativo para uso en dispositivos móviles, y erigió este Sistema Operativo
como la primera plataforma móvil completa, abierta y libre del mercado.
Caracteristicas
El Sistema Operativo Android, esta compuesto de un núcleo Linux, sobre el cual se han desarollado unas librerías, y
una Maquina Virtual Java llamada Dalvik sobre la cual se creó un Framework de aplicaciones y sobre el que se
ejcutan las aplicaciones Android. Las principales características de Android son:
Framework propio para el desarrollo de aplicaciones, lo cual permite la reutilización y el reemplazo de componentes.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 3
4. Visión general del Sistema Operativo Android
Maquina virtual Java propietaria desarrollada por Dan Bornstein, la cuál está optimizada para requerir poca memoria
y está diseñada para permitir ejecutar varias instancias de la máquina virtual simultáneamente.
Browser integrado basado en el motor open source WebKit.
Librerías gráficas 2D y 3D basadas en la especificación OpenGL ES 1.0
Base de datos relacional SQLite.
Soporte de distintos formatos de audio y video tales como MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF.
Soporte de Telefonía GSM
Soporte de Bluetooth, EDGE, 3G, and WiFi.
Soporte para el manejo de cámara, GPS, y acelerómetro
Soporte para el desarrollo de aplicaciones incluyendo un emulador, herramientas para el debugging, herramientas
para el profiling de memoria y rendimiento así como de un plugin para el entorno de desarrollo Eclipse.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 4
5. Visión general del Sistema Operativo Android
Arquitectura del Sistema Operativo Android
La arquitectura usada por el Sistema Operativo Android la podemos dividir en capas, cada una con una misión
específica dentro de la plataforma.
Linux kernel
Esta capa de la plataforma Android, tiene como misión abstraer el hardware del resto de la plataforma. Esta basada
en la versión del kernel 2.6 de Linux, y proporciona a Android servicios básicos tales como seguridad, gestión de
memoria, gestión de procesos, drivers, y capa de red entre otros.
Un ejemplo del auge que esta teniendo Android en la comunidad open source, es el hecho de que en la reciente
liberación de la versión 3.3 del kernel de Linux, ya se incluye código específico de la plataforma Android.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 5
6. Visión general del Sistema Operativo Android
Android runtime
Android proporciona un entorno de ejecución de aplicaciones basado en Java. Se trata de un subconjunto de las
librerías del Core de Java, más una nueva máquina virtual Java desarrollada específicamente para Android, llamada
Dalvik, y que permite entre otras cosas que cada aplicación corra en un proceso y que dicho proceso tenga su propia
instancia de la máquina virtual
Dalvik
Dalvik es una maquina virtual desarrollada para la plataforma Android por Dan Bornstein, con aportaciones del
equipo de desarrollo de Google.
Lo más destacable de esta máquina virtual es la optimización para el bajo consumo de memoria, la posibilidad de
que se ejecuten varias intancias de la misma máquina virtual al mismo tiempo, el aislamiento de procesos, y la
gestión de hebras.
En realidad Dalvik no es una máquina virtual puramente Java, ya que los bytecodes que utiliza no son bytecodes
Java. La forma en la que trabaja es transformando las clases Java compiladas en un formato específico (.dex),
mediante el uso de una utilidad incluida en el SDK de Android llamada dx.
Estas clases en formato dex son las que luego son ejecutadas por Dalvik. Estos ficheros .dex junto con los demás
resources son los que se comprimen en formato zip y forman la aplicación en formato apk (Android package).
Librerías
Además de los componentes descritos anteriormente en la plataforma Android se encuentran una serie de librerías
escritas en C/C++ que son usadas por varios de los componentes de Android, y que además pueden ser utilizadas por
los desarrolladores de aplicaciones a través del Framework de Aplicaciones de Android. Algunas de estas librerías
son:
Librería System C, es una implementación de C estandar basado en BSD especifíca para dispositivos con Linux
embebido.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 6
7. Visión general del Sistema Operativo Android
Librerías multimedia, basadas en OpenCORE de Packet Video, y las cuales permiten reproducción, grabación de los
formatos de audio, video e imágenes más populares, tales como, MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
LibWebCore, es la librería que nos proporciona un motor para el browser de Android.
SGL, libreria para el motor de gráficos 2D.
Librerías 3D, son una implementación basadas en la API OpenGL ES 1.0, y que permite el uso tandto de la aceleración
3D por hardware como por software.
SQLite, motor para base de datos relacionales ligero, y disponible para cualquiera de las apliaciones.
Framework de Aplicaciones de Android
Android nos proporciona un conjunto de conceptos, prácticas y criterios para el desarrollo de aplicaciones para la
plataforma Android de forma más simple, homogénea, y optimizada. Para ello ha creado este framework que nos
permite aislarnos en cierto de muchos de los detalles de bajo nivel en el desarrollo de aplicaciones.
Eso no quiere decir que no tengamos acceso a las librerías explicadas anteriormente, al contrario tenemos un acceso
directo a estas librerías pero de forma unificada, permitiendo una curva de aprendizaje mucho más rápida, y un
desarrollo de aplicaciones más optimas y compactas.
Básicamente esta capa nos permite ver una aplicación Android desde el punto de vista de desarrollo como una
colección de Vistas, Proveedores de contenidos, Gestores de recursos, Gestores de notificaciones y Gestores de
Actividad.
Vistas (views), equivaldrían al interfaz de la aplicación.
Proveedores de contenidos (contents providers) , permite a las aplicaciones acceder a datos de otras aplicaciones
(p.e. contactos), o compartir datos propios.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 7
8. Visión general del Sistema Operativo Android
Gestores de recursos (resource managers), permite el acceso a recursos que no son código, tales como imágenes,
ficheros, etc.
Gestores de notificaciones (notification managers) , que permiten a las aplicaciones visualizar alertas
personalizadas en la barra de estado.
Gestores de actividad (activity managers), gestionan el ciclo de vida de las aplicaciones y provee una forma de
navegación estándar dentro de las aplicaciones.
Aplicaciones
La última capa de la plataforma Android es la de Aplicación. Android viene con una serie de aplicaciones estándares,
como clientes de email, calendarios, mapas, browsers, programa de SMS, las cuales han sido desarrolladas con el
Framework de Aplicaciones de Android.
En esta capa es en la que los desarrolladores de software trabajarían desarrollando sus propias aplicaciones. Una vez
desarrolladas estas aplicaciones se pueden poner a disposición del público a través de repositorios tales como
Google Play.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 8
9. Visión general del Sistema Operativo Android
Seguridad en la plataforma Android
Para el sistema operativo Android, la seguridad es uno de los puntos claves dentro de su desarrollo. El concepto de
seguridad lo establece en base a la protección de los datos de usuario, protección de los recursos del sistema,
protección respecto a las aplicaciones.
Para lograr estos objetivos, Android proporciona una serie de características para hacer que sea un sistema robusto.
Entre estas características podemos destacar, la robustez a nivel de sistema operativo que lleva implícito el uso de
un kernel Linux, el uso de sandbox obligatorio para todas las aplicaciones, seguridad en la comunicación entre
procesos, firmado de aplicaciones, y el uso de permisos a nivel de usuario.
Además de esto, a nivel de plataforma, cada uno de los componentes se basa en la seguridad de los componentes
del nivel inferior de la plataforma y en que a excepción de una pequeña porción de código del SO que es ejecutado
en modo root, todo el código del kernel de Linux esta restringida por la ejecución dentro de la Sandbox.
Seguridad a nivel de sistema operativo
A nivel de Sistema Operativo Android utiliza la seguridad que provee el kernel de Linux, seguridad en la
comunicación inter-procesos, para porporcionar seguridad entre aplicaciones ejecutándose en distintos procesos, y
la ejecución de las aplicaciones dentro de una Sandbox.
Seguridad Linux
Por el mero hecho de usar Linux como nucleo de la plataforma, se heredan una serie de mecanismos de seguridad
ampliamente probados por el gran uso de Linux en entornos especialmente sensibles a los temas de seguridad. Esto
le proporciona a Android los siguientes beneficios:
Un modelo de permisos basados en usuarios
Aislamiento de procesos
Mecanismos de securización de comunicaciones entre procesos
La posibilidad de eliminar partes innecesarias y potencialmente inseguras del kernel
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 9
10. Visión general del Sistema Operativo Android
Como sistema operativo multiusuario, uno de los objetivos básicos de seguridad de Linux es proteger los recursos de
un usuario frente a otro.
La Sandbox de aplicaciones
A diferencia de los sistemas Linux, el sistema Android asigna un único user ID (UID) a cada una de las aplicaciones y la
ejecuta como ese usuario en un proceso separado. Esto hace que cada aplicación se ejecute en una Sandbox, ya el
kernel de Linux facilita la seguridad entre aplicaciones que ejecuta cada usuario, limitando que las aplicaciones
puedan enteractuar entre ellas y con el sistema operativo.
Como este Sandbox se encuentra a nivel de Kernel, todas las aplicaciones del kernel y de niveles superiores se
ejecutaran dentro de este Sandbox por defecto.
Permisos del sistema de ficheros
En sistemas Unix los permisos del sistema de ficheros aseguran que un usuario no pueda leer o cambiar los ficheros
de otro usuario. La ejecución de cada aplicación con un UID distinto hace que los ficheros generados por cada
aplicación no puedan ser utilizados por otra aplicación a menos que explícitamente el desarollador permita esto.
Protección por contraseña
Android se uede configurar para que se verifique una contraseña cada vez que se acceda al dispositivo. Esto permite
prevenir el acceso no autorizado tanto al dispositivo como a la clave criptográfica para sistemas de ficheros
encriptados.
Mejoras de seguridad en la gestión de memoria
Android ha añadido una serie de mejoras en la gestión de la memoria para prevenir la posible utilización de exploits
en el sistema. Alguna de estas mejoras son:
Address Space Layout Randomization (ASLR) para que la localización de claves en memoria se situen de forma
aleatoria no siempre en la misma posición.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 10
11. Visión general del Sistema Operativo Android
Hardware-based No eXecute (NX) para prevenir la ejecución de código en la pila y en el heap.
safe_iop para reducer overflows de enteros
Extensiones a OpenBSD dlmalloc para prevenir vulnerabilidades existentes.
OpenBSD calloc para prevenir overflows de enteros durante la reserve de memoria.
Rooteo de dispositivos
Por defecto en dispositivos Android solamente el kernel y un subconjunto de aplicaciones se ejecutan en modo root.
Android no limita la modificación del kernel, sistema opeativo u otros programas si se accede con usuario root.
Por defecto los usuarios no tienen acceso al dispositivo con un usuario root, lo cual hace que de esto un mecanismo
de seguridad. Hay ciertos programas que permiten desblquear esta limitación haciendo que se use el dispositivo con
permisos root, lo cual indirectamente puede hacer que el dispositvo se convierta en un dispositivo no seguro.
Seguridad a nivel de aplicación
Además de los mecanismos de seguridad proporcionados a nivel de sistema operativo, Android proporciona unos
mecanismos para proveer seguridad a nivel de aplicación. A continuación se explican estos mecanismos.
El modelo de permisos de Android: APIs de Protección de acceso
Una aplicación Android solamente puede tener acceso a un rango limitado de recursos del sistema. El sistema
gestiona el acceso de las aplicaciones a estos recursos, ya que se podrían utilizar de forma maliciosa o inapropiada,
lo cual podría provocar problemas para el usuario, sus datos, etc.
Estas restricciones se implementan de distintas formas, desde la ausencia de APIs para el manejo de estos recursos
(p.e. acceso a la tarjeta SIM), hasta el uso de APIS protegidas mediante Permisos. Estas APIs protegidas incluyen:
Funciones de camara
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 11
12. Visión general del Sistema Operativo Android
Datos de localización (GPS)
Funciones bluetooth
Funciones de telefonía
Funciones SMS/MMS
Conexiones de datos y de red
Estas recursos son accesibles únicamente desde el Sistema Operativo. Para que una aplicación pueda usar estos
recursos debe declararlo en el manifiest de la aplicación. Cuando un usuario instala la aplicación se le mostrará los
permisos que requiere esa aplicación y será el usuario el que permita la ejecución de dicha aplicación que llevará
implícito el uso de estas APIs.
El permiso de uso de esta API es solamente a nivel de esa aplicación, una vez que se desinstalen los permisos de esas
aplicación desaparecen y si el usuario vuelve a instalar la aplicación se le volverá a pedir autorización para el acceso a
estas APIs.
Comunicación entre procesos
Los distintos procesos pueden comunicarse entre ellos utilizando mecanismos propios de UNIX tales como señales,
sockets, etc. Android además añade mecanismos IPC.
Binder mecanismo ligero de llamada a procedimientos remotos diseñados para alto rendimiento cuando se realizan
llamadas locales. Se relizan mediante la creación de un driver.
Service provee interaces accesibles directamente desde el binder.
Intents es un simple objeto que contiene un mensaje expresando la intención de realizar una acción.
ContentProviders es un almacen de datos que provee acceso a los datos del dispositivo (p.e. lista de contactos). Un
aplicación puede acceder a los datos de otra aplicación que haya expuesto sus datos mediante la creación de un
ContentProvider.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 12
13. Visión general del Sistema Operativo Android
Firmado de aplicaciones
El firmado de aplicaciones es la forma de identificar el autor de la aplicación, y de esta forma permitir las
actualizaciones de las aplicaciones sin mecanismos complejos de verificación de propiedad del autor. Cada aplicación
en la plataforma Android debe estar firmada y cualquier intento de subir una aplicación a Google Play sin firmar será
rechazado.
Cuando una aplicación se instala en un dispositivo Android se comprueba que dicha aplicación esta correctamente
firmada por el certificado incluido en el APK.
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 13
14. Visión general del Sistema Operativo Android
Desarrollo de aplicaciones
Dalvik
SDK
NDK
Versiones de la plataforma
Cuando se desarrolla en la plataforma Android hay que tener claro el concepto de “nivel de API”. El nivel de API es
un valor que identifica de forma única la revisión del API del Framework especifica para una determinada versión de
la plataforma Android. Es decir que si queremos que nuestra aplicación sea compatible con una determinada versión
de la plataforma Android tendremos que tener en cuenta el API level para esa determinada versión.
A continuación se muestra una tabla con un resumen de los codenames y API level
Code name Version API level
(no code name) 1.0 API level 1
(no code name) 1.1 API level 2
Cupcake 1.5 API level 3, NDK 1
Donut 1.6 API level 4, NDK 2
Eclair 2.0 API level 5
Eclair 2.0.1 API level 6
Eclair 2.1 API level 7, NDK 3
Froyo 2.2.x API level 8, NDK 4
Gingerbread 2.3 - 2.3.2 API level 9, NDK 5
Gingerbread 2.3.3 - 2.3.7 API level 10
Honeycomb 3.0 API level 11
Honeycomb 3.1 API level 12, NDK 6
Honeycomb 3.2.x API level 13
IceCreamSandwich 4.0.1 - 4.0.2 API level 14, NDK 7
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 14
15. Visión general del Sistema Operativo Android
Code name Version API level
IceCreamSandwich 4.0.3 - 4.0.4 API level 15
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 15
16. Visión general del Sistema Operativo Android
Recursos
http://developer.android.com
http://source.android.com
http://es.wikipedia.org/wiki/Android
http://es.wikipedia.org/wiki/Open_Handset_Alliance
http://www.businessweek.com/technology/content/aug2005/tc20050817_0949_tc024.htm
http://www.techradar.com/news/phone-and-communications/mobile-phones/a-complete-history-of-android-
470327
http://investing.businessweek.com/research/stocks/private/snapshot.asp?privcapId=23584687
http://es.wikipedia.org/wiki/Dalvik
http://www.webkit.org/
http://www.dalvikvm.com/
http://www.ibm.com/developerworks/xml/library/x-androidsecurity/index.html
Jose Luis Carmona Tamayo Jose Francisco Bravo Sánchez 16