Sei sulla pagina 1di 8

Per iniziare

Per qualunque tipo di sviluppatore (desktop, enterprise, web o mobile) Android rappresenta una opportunit nuova per la progettazione e l'implementazione di applicazioni innovative destinate a dispositivi mobili.

Android uno stack software open source, che include sistema operativo, lo strato middleware, applicazioni native, un set di librerie e di API per la scrittura di applicazioni destinate dispositivi mobili.

I moderni telefonini sono sempre pi piccoli, dallo stile accattivante ma soprattutto potenti: sono dotati di buone capacit di calcolo e di svariate funzionalit (video-camera, media-palyer, GPS, touch-screen, accelerometro) grazie alle diverse periferiche di cui sono dotati.

Le piattaforme di sviluppo e le applicazioni software, "purtroppo" non hanno saputo tenere il passo dell'evoluzione della tecnologia e dei dispositivi mobili.

Le tecnologie e le piattaforme dei dispositivi mobili rappresentano di fatto ambienti chiusi costruiti si sistemi operativi proprietari con strumenti di sviluppo proprietari

Gli stessi dispositivi "privilegiano" le applicazioni native rispetto a quelle scritte dagli utenti, creando di fatto una barriera verso la speranza degli sviluppatori di creare applicazioni che sfruttino pienamente le potenzialit di hardware sempre pi potente.

In Android, le applicazioni native e quelle cosiddette "terze-parti" ovvero scritte da sviluppatori, sono basate sullo stesso set di API ed eseguite nello stesso ambiente di run-time.

Tali API consentono l'accesso alle funzionalit del dispositivo e quindi di fatto accesso all'hardware, ai servizi location-based, alle attivit map-based etc....

Questo corso aiuter a comporendere come usare le API suddette per creare una applicazione Android.

Nel seguito di questa lezione saranno introdotte alcune linee guida per lo sviluppo si dispositivi mobili e saranno presentate alcune funzionalit e caratteristiche del framework di sviliuppo di Android.

Storicamente

Gli sviluppatori, per sistemi embedded e/o dispositivi mobili, sono "costretti" a studiare e comprendere il funzionamento dell'hardware dei dispositive target e scrivere codice C o C++ per pilotarli e/o gestirli. Questo sforzo deve essere fatto per ogni dispositivo o famiglia di dispositivi.

Questo approccio non pu essere considerato se si vuole stare al passo con l'evoluzione tecnologica.

Piattaforme pi "recenti" quali Symbian, ad esempio, sono state create per fornire agli sviluppatori la possibilit di distribuire le stesse applicazioni a pi dispositivi dalla caratteristiche "simili". Questo ha permesso di fare avvicinare sempre pi sviluppatori al mercato mobile.

Queste piattaforme forniscono qulache accesso alle periferiche del dispositivo ma richiedono la scrittura di complicate e complesse funzioni C o C++ basate pesantemente per altro su API proprietarie spesso di difficile comprensione. La difficolt di sviluppo si amplifica se si vuole sviluppare codice per dispositivi differenti che fanno uso di periferiche e funzionalit particolare (es. GPS).

Grossi passi in avanti sono stati fatti con l'introduzione e l'uso di MIDlets. Queste ultime, classi java sviluppate per il mobile, vengono eseguite su una Java Virtual Machine e permettono di astrarre il livello hardware, consentendo allo sviluppatore di progettare e sviluppare software per diversi dispositivi che supportano Java Run Time.

Prezzo da pagare: l'utilizzo di MIDlets, limita l'accesso alle risorse hardware. Le MIDlets sviluppate sembrano sempre pi applicazioni desktop ridisegnate per funzionare su uno schermo pi piccolo.

Il Futuro .....

Windows Mobile ed Apple IPhone, forniscono oggi ambienti di sviluppo per applicazioni mobili molto semplici ed efficienti. Purtroppo, per, essi sono stati costruiti su sistemi operativi proprietari e privilegiano applicazioni native a scapito di quelle create da terze parti, e comunque pongono delle severe restrizioni sulla possibilit di comunicazione tra applicazioni e sull'accesso ai dati nativi relativi al "telefono".

Android offre

nuove possibilit e prospettive per le applicazioni mobili grazie a un ambiente di sviluppo aperto basato di un kernel Linux open source;

accesso all'hardware disponibile per tutte le applicazioni attraverso una serie di librerie di API;

supporto completo per la comunicazione e l'interazione tra applicazioni ed i relativi dati

Android non :

Una Implementazione di Java ME: le applicazioni Android sono scritte utilizzando il linguaggio Java ma non sono eseguiti attraverso una Java ME virtula machine; Classi java e eseguibili non gireranno nativamente su Android.

Semplicemente un application Layer: Android inclulde un application Layer ed inoltre descrive uno staclk software comprendente il sottostante sistema operativo, le librerie API, e le applicazioni stesse.

La risposta di Google all'iPhone: iPhone un dispositivo proprietario cosiccome lo la piattaforma software, entrambi rilasciati da una unica azienda (??); Android invece uno stack software open source prodotto e supportato da Open Handset Alliance e progettato per funzionare su ogni sistema mobile con le caratteristiche richieste.

Una Piattaforma Open per lo sviluppo su dispositivi mobili


(An Open Platform for Mobile Development) The first truly and comprehensive platform for mobile devices, all of the software to run a mobile phone but without the proprietary obstacles that have hindered mobile innovation.

Android costituto da diversi componenti tutti necessari e dipendenti; tali componenti includono:

Un progetto hardware di riferimento che descrive le "capacit" che un dispositivo mobile deve possedere per poter supportare lo stack software.

Un kernel di sistema operativo Linux che fornisce l'interfaccia a basso livello con l'hardware e si occupa della gestione della memoria, del controllo dei processi in un ottica di ottimizzazione per i dispositivi mobili.

Un insieme di librerie open source per lo sviluppo di applicazioni: SQLite, WebKit, OpenGL, Media Manager...

Un ambiente di run-time usato per ospitare ed eseguire le applicazioni Android inclusa la Dalvik virtual machine e le librerire kernel (core) per funzionalit specifiche.

Un framework che permette di esporre i servizi di sistema al livello applicazioni incluso il window manager, content providers.....

o o o

Un framwork per l'interfaccia utente usata per lanciare le applciazioni. Set di applicazioni preinstallate. Un kit per lo sviluppo (SDK), utilizzato per creare applicazioni e che include tool, plug-in e documentazione.

Applicazioni Native Installate e Distribuite con Android


I "telefonini" Android vengono normalmente forniti con una suite di applicazioni preinstallate che includono almeno:

Un Client per la posta elettornica compatibile con Gmail ma non limitato ad esso. Un'applicazione per la gestione di SMS. Una suite PIM (Personal Information Management) che include: calendario e lista di contatti pienamente integrati con i servizi on-line di Google.

La versione mobile di Google Maps compatibile al 100% che include StreetView. Un Browser web basato su web-kit. Un client di Istant Messaging. Un lettore musicale ed un viewer per immagini. Un client per l'acceso al marketplace di Android.

Tutte le applicazioni native sono state scritte in Java utilizzando l'SDK di Android e sono esegutire sulla Virtual machine Dalvik. I dati memorizzati ed utilizzati dalle applicazioni native, esempio i dettagli dei contatti, sono anche disponibili per le applicazioni terze-parti. Analogamente tali applicazioni possono gestire eventi quali l'arrivo di una chiamata o di un nuovo SMS

Il vero appeal di Android come ambiente di sviluppo sta di fatto nelle API che offre agli sviluppatori.

Seguno alcune funzionalit/caratteristiche degne di nota:

o o o

Nessuna tassa/fee per licenza, distribuzione e sviluppo. Accesso all'hardware wi-fi. Utilizzo delle reti GSM, EDGE e 3G per effetture e ricevere chiamate e/o SMS e per scambiare dati nella rete mobile .

Set completo di API per servizi location-based (GPS).Supporto completo per applicazioni che integrano controlli di mappe nella propria user interface.

Il supporto nativo alle mappe offerto da Android consente la creazione di una vasta gamma di operazioni basate sulle mappe.

Android permette di creare attivit che includono le Google Maps Interattive come parte dell'interfaccia utente garantendo accesso pieno alle mappe stesse.

I servizi location-based di Android sono in grado di gestire tecnologie quali GPS e/o Google GMS cell-based location che consentono la determinazione della posizione attuale del dispositivo(le API utilizzate sono indipendenti dalla tecnologia utilizzata).

Per combinare mappe e posizioni (locations) Android include API per il forward ed il revere geocoding che consentono di trovare le coordinate di un indirizzo ed un indirizzo date le coordinate.

Controllo completo dell'hardware per il multimedia (camera, microfono, altoparlante): playback e registrazione dalle periferiche.

o o

API per accelerometro e bussola. Background Services:

I moderni dispositivi mobili sono per natura multitasking. Ma la limitata dimensione dello schermo, e a volte scelte implementative che non prevedono l'esecuzione in background, limitano il numero di applicazioni che possono essere eseguite "contemporaneamente".

Android supporta l'esecuzione in background di applicazioni e servizi. Questo servizio consente di lanciare delle appliaczioni che eseguono operazioni senza input diretto dell'utente.

Un applicazione che fa uso di questo servizio potrebbe essere per esempio eventdriven.

Condivisione dei dati e comunicazione interapplicazione:

Android fornisce tre tecniche che consentono di trasmettere informazioni e dati da una applicazione per essere tilizzati altrove:

Notification: rappresenta la tecnica standarda secondo la quale un dispositivo "allerta" un utente. Utilizzando le API opportune possibile attivare per esempio Allarmi Audio, attivare la Vibrazione attivare il Led o usare la barra di stato delle notifiche.

Intents: fornicono un meccanismo per il "message passing" all'interno di applicazioni e tra applicazioni. Utilizzando tale tecnica possibile mandare in broadcast delle azioni per consentirne la gestione da parte di altre applicazioni (ese. risposta ad una chiamata).

Content Providers: fornisce una via per accedere in maniera "managed" al database privato di una applicazione.

Supporto alla comunicazione P2P attraverso Google Talk.

Il supporto fornito basato su Google Talk, e consente la creazione di una connessione attraverso socket tra il dispositivo in uso e un qualsiasi altro dispositivo Android on-line.

Il servizio pu essere utilizzato per l'instant messaging convenzionale o per lo scambio di dati ed informazioni tra applicazioni su due diversi dispositivi.

Anche se da solo rappresenta un servizio molto interessante se combinato con altri diventa fondamentale (es. trasmissione della posizione e conseguente visualizzazione su una mappa delle posizioni acquisite).

SQLite Database: Android fornisce un database relazionale per ogni applicazione grazie all'utilizzo di SQLite. Grazie a questo servizio possibili memorizzare e reperire informazioni e dati in maniera rapida, efficiente e sicura. Per default ogni database accessibile dalla sua applicazione. I content Providers forniscono,come accennato, un meccanismo per condividere questi database.

Gestione Ottimizzata di processi e memoria

In maniera simile a Java e .NET, Android usa il suo ambiente run time e la virtual machine per la gestione della memoria di una applicazionie. Diversamente dalle altre tecnologie Android gestisce anche la vita di un processo.

Android assicura la responsivit di una applicazione stoppando o killando processi per liberare risorse richieste da applicazioni con pi alta priorit. Fare attenzione a questi particolari durante la fase di progettazione di una applicazione.

o o o o

Supporto ottimizzato per grafica 2D e 3D grazie ad OpenGL. Media Libraries. Un framework di sviluppo orientato alle compontenti ed al relativo riuso. Possibilit di rimpiazzare le applicazioni native con applicazioni utente custom.

Linux Kernel:

basato su un Kernel Linux 2.6 permette di fornire i servizi principali (drivers hardware, gestione dei processi e della memoria, sicurezza, rete, power management).

Fornisce un livello di astrazione per gli strati superiori dello stack

Libraries:

Girano subito sopra il kernel, Android include diverse librerie C/C++ quali libc ed SSL ma anche:

Media Library: per la gestione ed il playback di video ed audio Surface Manager: per la gestione del display Graphics library: per al gestione di oggetti SGL ed OpenGL 2D e 3D SQLite: per il supporto nativo a Database SSL e WebKit: browser e sicurezza internet.

Android-Run Time:

o o

E' l'elemento che differenzia Android da una semplice implementzione di Linux. Include le Core Libraries e la Dalvik Virtual Machine ed il motore che da vita all'applicazione ed insieme alle librerie di fatto alla base dell'application framwork

Core Libraries: forniscono la maggior parte delle funzionalit del core Java libraries e quelle delle librerie specifiche di Android

Dalvik Virtual Machine: Si tratta di una virtual machie register-based, ottimizzata per assicurare che uno stesso dispositivo pu eseguirne istanze multiple efficientemente. Si base sul kernel Linux per la gestione dei thread e della memoria.

Application Framework:

o o

Fornisce le classi per creare le applicazioni Android. Fornisce inoltre un'astrazione per l'accesso all'hardware, permette la gestione dell'interfaccia utente e delle risorse necessarie all'applicazione.

Application Layer:

Tutte le applicazioni, native e terze-parti, sono costruite sull'Application Layer utilizzando le stesse librerie di API.

Viene eseguito all'interno del run Time di Android utilizzando le classi ed i servizi resi disponibili dall'application framework

L'architettura imposta nelle applicazioni Android incoraggia il riuso dei componenti permettendo la condivisione di attivit, servizi e dati con altre applicazioni con accesso gestito e restrizioni di sicurezza imposti localmente.

I seguenti servizi rappresentano i cardini delle applicazioni e costituiscono il framework da utilizzare per il software prodotto:

o o o o o

Activity Manager: controlla il ciclo di vita dell'applicazione; Views: utilizzate per la costruzione delle interfacce utente; Notification Manager:fornisce un meccanismo per le segnalazioni all'utente; Content Providers: permette la condivisione dei dari tra applicazioni; Resource Manager: permette la gestione di risore esternalizzate