IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Introducció

Android és un software pensat per a molts tipus de hardware. També es pot definir com un conjunt de programari per a telèfons mòbil que inclou un sistema operatiu, programari intermediari i aplicacions. Google i altres membres de la Open Handset Alliance van col·laborar en el desenvolupament i llançament de l'Android. L'Android Open Source Project (AOSP) té l'objectiu de mantenir i continuar desenvolupant l'Android. El sistema operatiu Android és la plataforma per a smartphones amb més vendes.

Arquitectura

Hugolucas androidarch1.jpeg

Per començar amb el desenvolupament d'aplicaciones en Android és important coneixer com està estructurat aquest sistema operatiu. Això és el que anomenem arquitectura i en el cas d'Android està formada per diverses capes que faciliten al desarrollador la creació d'aplicacions.

Hugolucas androidarch2.jpeg

Kernel

El Kernel d'Android està basat en el kernel 2.6 de Linux.

El kernel està desenvolupat en C i C++.

El kernel s'encarrega de la seguretat del sistema operatiu.

Caracteristiques

El nucli de Linux proveïx les següents característiques de seguretat:

  • A user-based permissions model
  • Process isolation
  • Extensible mechanism for secure IPC
  • The ability to remove unnecessary and potentially insecure parts of the kernel

El kernel utilitza el sistema multiusuari.

Cada procès que s'executa, s'executa amb un usuari diferent. Per cada aplicació oberta hi ha un usuari diferent, això comporta que tinguem una seguretat més efectiva.

En un sistema operatiu multiusuari és important la isolació dels recursos d'usuari. La idea es protegir els usuaris els uns dels altres per tal de:

Prevenir que l'usuari A tingui accés als fitxers de l'usuari B
Assegurar que l'usuari A no s'acaba la memòria de l'usuari B ni altres recursos com la CPU
Assegurar que l'usuari A no monopolitza l'ús de dispositius (telèfon, GPS Bluetooth)

Aplicació Sandbox

Android assigna un unique user ID (UID) a cada aplicació Android i l'executa com si fos d'aquest usuari en un procés separat.

IMPORTANT: Vegeu la important diferència amb altres sistemes operatius. Android no és multisuari amb la idea típica d'usuari! Cada procés és executat per un usuari diferent

Això és el que s'anomena un kernel-level Application Sandbox.

El nucli força la seguretat entre aplicacions a nivell de sistema utilitzant els recursos típics de Linux (com els usuaris i grups de linux i els permisos)

IMPORTANT: Per defecte les aplicacions no poden interactuar entre sí i tenen un accés molt limitat al sistema operatiu.

Llibreries

Són biblioteques natives de Android també anomenades llibreries. Estan escrites en C o C++ i compilades per a l'arquitectura hardware específica del telèfon.

libc

Són les llibreries de C. És imprescindible ja que conté les llibreries bàsiques de C per executar tota mena d'aplicacions i funcions més bàsiques. L'objectiu de les llibreries és proporcionar funcionalitat a les aplicacions per a tasques que es repeteixen amb freqüència, evitant haver de que codificar-les cada vegada i garantitzant que es porten a terme de la forma "més eficient".

Webkit

Funcions bàsiques per poder navegar per internet.(Processament d'URLS)

SQLite

Base de dades lleugera i bàsica.

FreeType

Gestor de fonts de text.

Media Framework

Reproduccio de videos, visualització de fotografies, etc.

Surface Manager

Controla la pantalla tàctil.

SGL

Controla els gràfics en 2D (dues dimensions).

SSL

Administra el llenguatge xifrat de les comunicacions.

OpenGL | ES

Administra el motor gràfic. (exemple: jocs.)

Android Runtime o Entorn d'execució

Aquí trovem les librerías amb les funcionalitats habituals de Java així com altres específiques d'Android. El component principal de l'entorn d'execució d'Android és la màquina virtual Dalvik. Les aplicacions es codifiquen en Java i són compilades en un format específic per a que aquesta màquina virtual les executi. La ventatja d'això és que les aplicacions es compilen una única vegada i d'aquesta manera estaran llestes per a distribuir-se amb la total garantia de que podran executar-se en qualsevol dispositiu Android que disposi de la versió mínima del sistema operatiu que requereixi l'aplicació. Cal aclarir que Dalvik és una variació de la màquina virtual de Java, i no és compatible amb el bytecode Java. Java s'utilitza únicament amb llenguatge de programació, i els executables que es generen amb el SDK d'Android tenen la extensió .dex que és específic per a Dalvik, i per això no podem correr aplicacions Java en Android ni viceversa.

Framework d'Aplicacions

Aquesta capa està formada per totes les classes i serveis que utilitzen directament les aplicacions per a realitzar les seves funcions. La majoria dels components d'aquesta capa són llibreries Java que accedeixen als recursos de les capes anteriors a través de la máquina virtual Dalvik.

  • Activity Manager. S'encarrega d'administrar les activitats de la nostra aplicació així com el seu cicle de vida.
  • Windows Manager. S'encarrega d'organitzar el que es mostrarà per pantalla. Basicament crea les superficies a la pantalla que posteriorment pasaran a ser ocupades per les activitats.
  • Content Provider. Aquesta llibreria és molt interessant per que crea una capa que encapsula les dades que es compartiran entre aplicacions per a tenir control sobre com s'accedeix a la informació.
  • Views. Amb Android, les vistes dels elements que ens ajudaran a construir les interficies d'usuari: botons, quadres de text, llistes i fins i tot elements més avançats com un navegador web o un visor de Google Maps.
  • Notification Manager. Engloba els serveis per a notificar a l'usuari quan alguna cosa requereixi la seva atenció mostrant alertes a la barra d'estat. Una dada important és que Aquesta biblioteca també permet jugar amb so, activar el vibrador o utilitzar els LEDs del telèfon en cas de tenir-los.
  • Package Manager. Aquesta biblioteca permet obtenir informació sobre els paquets instal·lats al dispositiu Android, a més a més de gestionar la instalació de nous paquets. Amb aquest paquet ens referim a la forma amb que es distribueixen les aplicacions Android, aquests contenen l'arxiu .apk, que a la vegada incloüen els arxius .dex amb tots els recursos i arxius adicionals que necessite l'aplicació, per a facilitar la seva descarga i instal·lació.
  • Telephony Manager. Amb aquesta llibreria podrem realitzar trucades o enviar i rebre SMS/MMS, encara que no permet reemplaçar o eliminar l'activitat que és mostra quan una trucada està en curs.
  • Resource Manager. Amb aquesta llibreria podrem gestionar tots els elements que formen part de l'aplicació i que estan fora del codi, és a dir, cadenes de text traduïdes a diferents idiomes, imàtges, sons o layouts.
  • Location Manager. Permet determinar la posició geogràfica del dispositiu Android mitjançant GPS o xarxes disponibles i treballar amb mapes.
  • Sensor Manager. Ens permet manipular els elements de hardware del telèfon com l'acceleròmetre, giroscopi, sensor de lluminositat, sensor de camp magnètic, brúixola, sensor de pressió, sensor de proximitat, sensor de temperatura, etc.
  • Cámara: Amb aquesta llibreria podem fer ús de les càmeres del dispositiu per a prendre fotografies o per a gravar video.
  • Multimedia.Permeten reproduir i visualitzar audio, video i imàtges al dispositiu.

Aplicacions

En la última capa se incluyen todas las aplicaciones del dispositivo, tanto las que tienen interfaz de usuario como las que no, las nativas (programadas en C o C++) y las administradas (programadas en Java), las que vienen preinstaladas en el dispositivo y aquellas que el usuario ha instalado. En esta capa encontramos también la aplicación principal del sistema: Inicio (Home) o lanzador (launcher), porque es la que permite ejecutar otras aplicaciones mediante una lista y mostrando diferentes escritorios donde se pueden colocar accesos directos a aplicaciones o incluso widgets, que son también aplicaciones de esta capa.

Activity

Un activity és una classe java, i que te una jerarquia d'herència.

Cicle de vida

Les activitats en el sistema es gestionen com una pila d'activitat. Quan una nova activitat que s'inicia, es col·loca en la part superior de la pila i es converteix en l'activitat en execució - l'activitat anterior sempre roman per sota en la pila, i no s'acosta a la part frontal fins que tanques l'última activitat.

Una activitat té essencialment quatre estats:

  • Si una activitat està en primer pla de la pantalla (a la part superior de la pila), està activa o en funcionament.
  • Si una activitat ha perdut el focus, però segueix sent visible, està pausada. Una activitat en pausa està completament viva (manté la informació d'estat i membre i roman unida al gestor de finestres), però pot ser eliminada pel sistema en situacions extremes de poca memòria.
  • Si una activitat està completament enfosquida per una altra activitat, s'atura. Encara conserva tota la informació d'estat i membre, però, ja no és visible per a l'usuari pel que la seva finestra està oculta i sovint seran matats pel sistema quan es necessiti memòria en un altre lloc.
  • Si una activitat està en pausa o detinguda, el sistema pot deixar caure l'activitat de la memòria o bé demanant-ho, o simplement matar el seu procés. Quan es mostre de nou a l'usuari, serà reiniciada i restaurada al seu estat anterior.

El diagrama següent mostra les rutes estatals importants d'una activitat. Els rectangles quadrats representen mètodes de devolució de trucada que es poden implementar per portar a terme les operacions quan es mou l'activitat entre els estats. Els ovals de colors són els estats més importants de l'activitat pot estar endins

Hugolucas lf1.jpeg
Hugolucas lf2.jpeg
Hugolucas lf3.jpeg

Estructura d'un projecte Android

Hugolucas EstructuraProjecteAndroid.jpeg

  • src: Conté el codi font en java.
  • gen: Conté codi autogenerat, en principi no s'ha de tocar.
  • Android 4.1: és java compilat que conté llibreries
  • res: són recursos que utilitzarà l'aplicació com text, imatges, icones, videos, etc.
  • Drawable: Les imatges que creem estaran a dintre d'aquestes carpetes i cada una conté icones o imatges adaptades per a una resolució específica.
  • Layout: És on es guarden definides les interficies gràfiques, imatges, botons, etc. en format xml.
  • Values: Dintre trobem el strings.xml que conté el text de l'aplicació i també trobem el styles.xml que conté els estils que defineixen el text de strings.xml
  • Assets: Fa la mateixa funció que la carpeta res guarda els recursos com la carpeta res però els guarda en format no executable que sol el pot interpretar el programa.
  • bin:
  • libs:

Guarda metainformació de l'aplicació.

User Interface

Hugolucas Androidui.jpeg

System bars

Hugolucas Androidui1.jpeg

Layouts

Input Controls

Vegeu també

http://androideity.com/2011/07/04/arquitectura-de-android

http://developer.android.com/reference/android/app/Activity.html