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

Vegeu també Android_i_seguretat#Arquitectura_de_seguretat

Arqand0julià.png
Arqand1julià.jpg
*Libc: la llibreria de android. Conte el basic de funcionament de C, per a començar a treballar.
*Webkit: Es un navegador, URLs, processament de URLs, descarga de URLs...
*Ssl: Xifratge i criptografia.
*Sqlite: Es la base de dades estàndard. Utilitza l'open office.
*Freetyme: Gestio de fonts.
*Media frame: Gestor del contingut multimèdia vídeo, imatge, sons...
*OpenGl: Gestió dels gràfics.
*Surface manager: Gràfics 3D per a jocs

Kernel de Linux

El nucli actua com una capa d'abstracció entre el hardware y la resta de capes. No pot accedir directament a esta capa, si no que te que utilitzar les llibreries disponible en capes superiors. Per a cada element del hardware del telefon existeix un controlador o "driver" dins del kernel que permet utilitzar-ho des de el software.

Linux security

A nivell de sistema operatiu Android proveïx de segurat mitjançant el Kernel Linux i una comunicació segura entre processos de forma que es puguin intercomunicar si és necessari però que en tot cas mai un procés pugui afectar el rendiment d'un altre procés.

Inclús el codi nadiu o codi propi del sistema s'executa en una Application Sandbox. El sanbox és un entorn controlat en el que s'executa un procés de forma que qualsevol vulnerabilitat o eplotació i·licíta del procés no afecti a la resta de processos.

IMPORTANT: The system would prevent the rogue application from harming other applications, the Android system, or the device itself

The foundation of the Android platform is the Linux kernel. The Linux kernel itself has been in widespread use for years, and is used in millions of security-
sensitive environments. Through its history of constantly being researched, attacked, and fixed by thousands of developers, Linux has become a stable and secure  
kernel trusted by many corporations and security professionals.

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

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

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.

If application A tries to do something malicious like read application B's data or dial the phone without permission (which is a separate application), then the 
operating system protects against this because application A does not have the appropriate user privileges. The sandbox is simple, auditable, and based on  
decades-old UNIX-style user separation of processes and file permissions.

Cal tenir en compte que aquest model no només s'aplica a les aplicacions d'usuari sinó a les aplicacions natives del SO Android. Tot el software que està per sobre del kernel està sota aquestes restriccions (p.ex. operating system libraries, application framework, application runtime...)

NOTA: native code is just as secure as interpreted code.

TODO

In some operating systems, memory corruption errors generally lead to completely compromising the security of the device. This is not the case in Android due to all applications and their resources being sandboxed at the OS level. A memory corruption error will only allow arbitrary code execution in the context of that particular application, with the permissions established by the operating system.

Like all security features, the Application Sandbox is not unbreakable. However, to break out of the Application Sandbox in a properly configured device, one must compromise the security of the the Linux kernel.

Llibreries

Esta situada damunt del kernel i està formada per les biblioteques natives de android. Estan escrites en C o C++. Aquestes normalment estan fetes pel fabricant, qui també s'encarrega d'instal·lar-les en el dispositiu abans de posar-ho a la venda. L'objectiu de les llibreries és proporcionar funcionalitat a les aplicacions per a tasques que es repeteixen amb freqüència, evitant haver de codificar-les cada vegada i garantint que es duen a terme de la forma “més eficient”.

Entre les llibreries incloses habitualment trobem OpenGL (motor gràfic), Biblioteques multimèdia (formats d'àudio, imatge i video), Webkit (navegador), SSL (xifrat de comunicacions), FreeType (fonts de text), SQLite (base de dades), entre unes altres.

Entron d'execussió

Com podem apreciar en el diagrama, l'entorn d'execució de Android no es considera una capa en si mateix, atès que també està format per llibreries. Aquí trobem les llibreries amb la funcionalitats habituals de Java així com altres específiques de Android. El component principal de l'entorn d'execució de Android és la màquina virtual Dalvik. Les aplicacions es codifiquen en Java i són compilades en un format específic perquè aquesta màquina virtual les executi. L'avantatge d'això és que les aplicacions es compilen una única vegada i d'aquesta forma estaran llestes per distribuir-se amb la total garantia 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, per la qual cosa no és compatible amb el bytecode Java. Java s'usa únicament com a llenguatge de programació, i els executables que es generen amb el SDK de Android tenen l'extensió .dex que és específic per Dalvik, i per això no podem córrer aplicacions Java en Android ni viceversa. ====Framework d'aplicacions====:La següent capa està formada per totes les classes i serveis que utilitzen directament les aplicacions per 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. Seguint el diagrama trobem:

  • Activity Manager. S'encarrega d'administrar la pila d'activitats de la nostra aplicació així com el seu cicle de vida.
  • Windows Manager. Se encarga de organizar lo que se mostrará en pantalla. Básicamente crea las superficies en la pantalla que posteriormente pasarán a ser ocupadas por las actividades.
  • Content Provider. Aquesta llibreria és molt interessant perquè crea una capa que encapsula les dades que es compartiran entre aplicacions per tenir control sobre com s'accedeix a la informació.
  • Views. En Android, les vistes els elements que ens ajudaran a construir les interfícies d'usuari: botons, quadres de text, llestes i fins a elements més avançats com un navegador web o un visor de Google Maps.
  • Notification Manager. Engloba els serveis per notificar a l'usuari quan alguna cosa requereixi la seva atenció mostrant alertes en la barra d'estat. Una dada important és que aquesta biblioteca també permet jugar amb sons, 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 en el dispositiu Android, a més de gestionar la instal·lació de nous paquets. Amb paquet ens referim a la forma en què es distribueixen les aplicacions Android, aquests contenen l'arxiu .apk, que al seu torn inclouen els arxius .dex amb tots els recursos i arxius addicionals que necessiti l'aplicació, per facilitar la seva descàrrega 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 es 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, imatges, sons o layouts. En un post relacionat a l'estructura d'un projecte Android veurem això més a fons.
  • 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 maquinari 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àmera: Amb aquesta llibreria podem fer ús de la(s) càmera(s) del dispositiu per prendre fotografies o per gravar vídeo.
  • Multimèdia.Permeten reproduir i visualitzar àudio, vídeo i imatges en el dispositiu.

Aplicacions

En l'última capa s'inclouen totes les aplicacions del dispositiu, tant les que tenen interfície d'usuari com les quals no, les nadives (programades en C o C++) i les administrades (programades en Java), les que vénen preinstaladas en el dispositiu i aquelles que l'usuari ha instal·lat. En aquesta capa trobem també l'aplicació principal del sistema: Inici (Home) o llançador (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 fins i tot ginys, que són també aplicacions d'aquesta capa.

Com podem veure, Android ens proporciona un entorn summament poderós perquè puguem programar aplicacions que facin qualsevol cosa. Gens dins de Android és inaccessible i podem jugar sempre amb les aplicacions del nostre telèfon per optimitzar qualsevol tasca.

El potencial de Android se situa en el control total que se li dóna a l'usuari perquè faci del seu telèfon un dispositiu a la seva mesura.


Versions

TODO: http://eceansar.blogspot.com.es/2011/07/complete-history-of-android-successthe.html
Android-infograph.png

Desenvolupament

Un activity es una classe, que te una gerarquia d'herencia.

Jeuu.png

Activity launched

App process killed

Activity running

Son les activitats que estem veient.

'

Basic.png

Intent

Un intent és una descripció abstracta d'una operació a reañlitzar. Es pot utilitzar amb:

  • startActivity: per iniciar una nova activitat.
  • broadcastintent: per tal d'enviar el intent a un possible BroadcastReciver 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óm, el lligam, entre activitats.

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

  • action:


Hi ha dos tipus d'intents:

  • Explicit Intents: són aquells intents en s'especifica un componets utilitzant els metodes setComponent(ComponentName) o setClass(context, Clas).

Intents filters

Sembla que fan com de màscara que indixca quins intents implicits podrà realitzar o no l'aplicació. Els intents filters son 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