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 conjunt de programari per a telèfons mòbil que inclou un sistema operatiu, programari intermediari i aplicacions. Google Inc. va comprar el desenvolupador inicial del programari, Android Inc., el 2005. El sistema operatiu per a mòbils d'Android es basa en una versió modificada del nucli Linux.

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.

Google va llançar gran part del codi de l'Android sota la Llicència Apache, una llicència de programari lliure oberta.

Arquitectura

Andrescorazon ArquitecturaAndroid.png
Andrescorazon ArquitecturaAndroid2.jpg

Kernel de Linux

El nucli del sistema operatiu Android està basat en el kernel de Linux versió 2.6 però adaptat per a dispositius mòbils.

El nucli actua com una capa de abstracció entre el hardware i la resta de les capes de l'arquitectura.

El nucli també s'encarrega de gestionar els diferents recursos del telèfon (energia, memòria, etc.) i del sistema operatiu en si: processos, elements de comunicació (networking), etc.

Característiques:

  • Seguretat robusta a nivell de sistema operatiu, mitjançant el nucli Linux (kernel).
  • Permisos definits per les aplicacions i atorgats per l'usuari.
  • Application sandbox obligatori per a totes les aplicacions.
  • Comunicació segura entre processos (Secure IPC).
  • Signatura d'aplicacions.

Objectius:

  • Protegir les dades dels usuaris.
  • Protegir els recursos del sistema (incloent la xarxa).
  • Proveir d'isolació d'aplicacions.

Application 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.

LLibreries

Les biblioteques natives de Android. Estan escrites en C i C++ i compilades per a l'arquitectura hardware específica del telèfon.

Entre les principals llibreries trobem:

  • libc. Llibreria bàsica de funcionament de C. Imprescindible.
  • WebKit. És el navegador bàsic per a navegar i fer peticions.
  • SQLite. Gestor de base de dades bàsic.
  • SSL. Xifratge i criptografia de comunicacions.
  • FreeType. Gestió de fonts de text.
  • MediaFramework. Gestió multimèdia.
  • OpenGL | ES. Motor gràfic.
  • SGL. Gràfics en 3D.
  • Surface Manager. Gestiona la pantalla tàctil.

Entorn d'execució

No es considera una capa en sí mateix, ja que també està format per llibreries, aquí trobem les de Java i algunes específiques de Android. El component principal de l'entorn de execució de Android es la màquina virtual Dalvik, una variació de la màquina virtual de Java. Les aplicacions es codifiquen en Java i són compilades en un formato específic per a que esta màquina virtual les executi.

Framework d'aplicacions

Llibreries necessàries per a desenvolupar les aplicacions. Trobem les següents:

  • Activity Manager. S'encarrega d'administrar la pila de activitats de la nostra aplicació així como el seu cicle de vida.
  • Windows Manager. S'encarrega d'organitzar el que es mostrarà per pantalla. Bàsicament crea les superfícies en la pantalla que posteriorment passaran a ser ocupades per les activitats.
  • Content Provider. Aquesta llibreria és molt interessant perquè crea una capa que encapsula les dades que es compartiran entre aplicacions per a tenir el control sobre com s'accedeix a la informació.
  • Views. En Android, les vistes, els elements que ens ajudaran a construir les interfícies de l'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. Avarca els serveis per a notificar a l'usuari quan alguna cosa requereix la seva atenció mostrant alertes en la barra de notificacions.
  • Package Manager. Aquesta biblioteca permet obtenir informació sobre els paquets instal·lats en el dispositiu Android, a més a més de gestionar la instal·lació de nous paquets.
  • Telephony Manager. Amb aquesta llibreria podrem realitzar trucades o enviar i rebre SMS/MMS.
  • 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, imatges, 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 el acceleròmetre, giroscopi, sensor de lluminositat, sensor de camp magnètic, brúixola, sensor de prensió, sensor de proximitat, sensor de temperatura, etc.
  • Càmera. Amb aquesta llibreria podrem fer ús de les càmeres del dispositiu per a prendre fotos o gravar vídeos.
  • Multimèdia. Permet reproduir i visualitzar àudio, vídeo e imatges en el dispositiu.

Aplicacions

Inclou totes les aplicacions del dispositiu, tant les de interfície de l'usuari, com les natives, les pre-instal·lades en el dispositiu i les que instal·la l'usuari. En aquesta capa també trobem l'aplicació inicial del sistema, l'anomenada inici, home o launcher perquè és la que permet executar altres aplicacions mitjançant una llista i mostrant diferents escriptoris on es poden col·locar accessos directes a aplicacions o inclús widgets.

Versions d'Android

Andrescorazon DistribucioVersionsAndroid.png

Desenvolupament

Activity

És una classe java i té la jerarquia d'herència següent:

java.lang.Object
  ↳ 	 android.content.Context
 	   ↳ 	 android.content.ContextWrapper
 	  	   ↳ 	 android.view.ContextThemeWrapper
 	  	  	   ↳ 	 android.app.Activity
  • Cicle de vida de l'activitat, diagrama de flux:
Andrescorazon activity lifecycle.png

Els 4 estats principals són el següents:

  • Activity lunched
  • Activity running
  • Activity shut down
  • App process killed

Després dels mètodes onCreate(), onStart() i onResume(), l'activitat esta funcionant.

La paraula clau super fa referència al pare i permet executar la funció del pare.

El mètode setContentView() permet veure per pantalla l'activitat.

  • Il·lustració simplificada del cicle de vida de l'activitat en forma de piràmide:
Andrescorazon activity piramidelifecycle.png

Podem definir quina activitat utilitzar com a principal a l'arxiu de manifest d'Android, AndroidManifest.xml , que està en l'arrel del directori del projecte.

L'activitat principal de l'aplicació ha de ser declarat en el manifest amb un <intent-filter> que inclou l'acció MAIN i la categoria LAUNCHER. Per exemple:

        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Intent

Un intent és una descripció abstracte d'una operació a realitzar. Es pot utilitzar amb:

  • startActivity: per iniciar una nova activitat.
  • broadcastIntent: per tal d'enviar el intent a un possible BroadcastReceiver component.
  • startService o bindService: per tal de comunicar-se amb un servei en segon terme.

Un dels usos més comuns és iniciar noves activitats des de altres activitats, hi en aquest sentit és un component que descriu la relació, el lligam, entre les dos activitats.

Un Intent té la següent estructura, resumida en dos parts:

  • action: Acostuma a ser una constant que indica el tipus d'acció a realitzar (veure, modificar, editar, borrar, etc.). Exemples: ACTION_VIEW, ACTION_EDIT, ACTION_MAIN, etc.
  • data: una URI que indica de forma unívoca el recurs o dades sobre les que s'aplicarà l'acció.

Aquestes són les parts principals però també hi ha 4 parts secundaries:

  • category
  • type
  • component: el codi que s'ha d'executar per a dur a terme l'intent, la classe que s'encarrega de realitzar l'intent.
  • extras: informació que se mou des de l'origen fins el destí de l'intent.

Hi ha dos tipus d'intents:

  • Explicit Intents: són aquells intents en que s'especifica un components utilitzant els mètodes setComponent(ComponentName) o setClass(Context, Class). Així s'indica de forma explícita quina classe s'ha d'executar. Sovint s'utilitza aquest tipus d'intents sense cap mena d'informació més afegida a l'intent, sent aquesta una manera típica d'executar Activitats des de altres Activitats.
  • Implicit Intents: no s'especifica la part del components de l'acció. Aleshores se suposa que l'Intent té prou informació per tal que el sistema pugui determinar quin component ha d'executar l'intent.

Intent filters

Fan com de màscara o filtres que indiquen quins intents implícits podrà realitzar o no l'aplicació. Els intent filters són la forma en que qualsevol component pot fer saber al sistema operatiu Android quines són les seves capacitats. Aquestes capacitats es declaren al fitxer AndroidManifest.xml.

Estructura d'un projecte Android

Andrescorazon EstructuraProjecteAndroid.png

Cada projecte Android creat amb l'assistent del ADT conté les següents carpetes:

  • src: conté el codi font en Java.
  • gen: Generated Java Library. És d'ús intern només per a Android. Conté el codi que genera l'Android SDK per enllaçar el codi font amb els recursos.
  • assets: conté recursos externs com la carpeta res, però la diferència principal és que els recursos es troben guardats en cru codificats i només es poden llegir a través del codi font.
  • res: en aquesta carpeta es guarden els recursos, com qualsevol tipus de fitxer (imatges, vídeos, etc.), fitxers XML definint els layouts de la UI, etc., és a dir, tot el que no és codi font:
  • drawable: aquí s'emmagatzemen els diferents fitxers gràfics. Hi ha diferents fitxers per a cada resol·lució de pantalla.
  • layout: aquí és troben els fitxers XML que defineixen els layouts, les diferents vistes, de la nostra aplicació.
  • menu: conté les vistes dels menús.
  • values: fitxers XML que emmagatzemen tots els textos (títols, etiquetes, etc.).

Els fitxers més importants d'un projecte Android són:

  • AndroidManifest.xml: guarda meta-informació de l'aplicació, és on es defineix tota la informació.
  • MainLayout.xml:
  • Activity class:

Vegeu també

Enllaços externs