ProgettAzione Tecnologie in movimento V anno Applicazioni per sistemi mobili Parola d’ordine: App Nel mondo del mobile la parola d’ordine è App. Per la promozione di un sito, di un’attività, di un gioco o per la divulgazione di informazioni di qualunque genere, non esiste modo più efficace che creare un’App compatibile con tutti i maggiori sistemi operativi del settore: - Android, - iOS, - Windows Phone. Ogni sistema operativo mette a disposizione delle App native che garantiscono accesso immediato a tutte le funzionalità del dispositivo oltre a permettere l’ottimizzazione delle prestazioni. Lo sviluppatore e le App Lo sviluppatore di software può indirizzarsi verso: - le classiche mobile App (cioè App da installare ed eseguire sul proprio dispositivo), le web App (cioè un’App per collegarsi a un’ applicazione in remoto tramite una connessione a Internet). Problematiche programmazione mobile Scrivere codice affinché “giri” su dispositivi mobili comporta dover affrontare tutta una serie di problematiche legate alla natura del dispositivo. Le caratteristiche degli smartphone che rendono più difficile creare applicazioni che vi girino rispetto a crearle per PC, si possono riassumere in: • minor capacità di elaborazione; • memoria limitata; • ridotte dimensioni del display; • assenza di alimentazione esterna; • differenti tecnologie per l’accesso a Internet (WiFi, GPRS, HSDPA ecc.); • nuovi metodi d’immissione (touchscreen, minitastiere, pennini). Il nuovo programmatore Nonostante le maggiori difficoltà da affrontare, è ormai INDISPENSABILE che nel bagaglio del tecnico informatico vi siano le conoscenze fondamentali per saper scrivere programmi per dispositivi mobili. Le motivazioni principali sono da ricercare nella crescita esponenziale del settore. Inoltre è un settore in cui Linux e l’open source hanno un ruolo di primo piano contribuendo alla diminuzione dei costi e all’aumento degli sviluppatori. Non ultimo, è un argomento vicino alle nuove generazioni, quelle dei cosiddetti “nativi digitali”. La nuova mission La mission è quella di arrivare a fare con uno smartphone o un tablet tutto ciò che solitamente si fa con un desktop. I dispositivi mobile Stabilito che la nostra applicazione è destinata a un dispositivo mobile, occorre definire quale. Molti sono i dispositivi mobile in commercio: • cellulari: dispositivi per la telefonia mobile; • palmari (PDA, Personal Digital Assistant): minicomputer di dimensioni tali da stare sul palmo di una mano; • smartphone: combinazione di cellulare e palmare arricchito con le funzionalità tipiche dei dispositivi multimediali in grado di riprodurre musica, scattare foto e girare video; • tablet: computer portatile di dimensioni compatte che utilizza come sistema di input uno schermo controllato tramite tocco (penna o dita) anziché una tastiera e un mouse. I S.O. mobile Chi scrive codice per App dovrà dunque scegliere il sistema operativo sotto cui intende sviluppare le applicazioni. I principali sistemi operativi per dispositivi mobili sono: • Android (Google); • iOS (Apple); • Windows Phone (Microsoft Corporation); • BlackBerry OS (BlackBerry); • Symbian OS (Nokia); • Bada OS (Samsung); • Sailfish OS (Jolla); • Tizen (Linux Foundation); • Ubuntu Salamander OS (Ubuntu Mobile); • Firefox OS (Mozilla). Android Android è un sistema operativo per dispositivi mobili sviluppato inizialmente da Android Inc. e acquisito da Google nel 2005. Android è stato sviluppato basandosi su diverse versioni del Kernel Linux; ciò rende questo sistema operativo diverso dagli altri per la sua natura open source e per la sua versatilità. Architettura Android L’architettura del sistema operativo Android è costituita da uno stack software su quattro livelli ovvero un set di sottosistemi software organizzato a strati che include: - un sistema operativo basato su Kernel Linux, - librerie, - middleware, - applicazioni importanti. Ogni strato dell’architettura fornisce diversi servizi allo strato superiore. Middleware Con il termine middleware si intende un insieme di programmi che fungono da intermediari tra le diverse applicazioni e le componenti software. L’utilizzo di uno strato software aggiuntivo (cuscinetto), consente di ottenere un elevato livello di servizio per gli utenti e un elevato livello di astrazione per i programmatori. Kernel Linux Lo strato di base è il Kernel Linux. L’intero sistema operativo Android è costruito sopra il Kernel Linux 2.6 con alcune modifiche architettoniche apportate da Google. Poiché il suo compito è quello di interagire con l’hardware, contiene tutti i driver hardware necessari allo scopo. I driver sono programmi che controllano e comunicano con l’hardware. Android utilizza Linux per TUTTE le sue funzionalità di base come la gestione della memoria e dei processi, il networking, le impostazioni di sicurezza e così via. Libraries Il secondo livello è costituito dalle librerie native di Android. Questo strato consente al dispositivo di gestire i diversi tipi di dati. Le librerie sono scritte nel linguaggio C/C++ e sono specifiche per un particolare hardware. Alcune delle principali librerie native sono: • Surface Manager • Media Framework • SQLite • WebKit • SGL (Scalable Graphics Library) • OpenGL|ES • SSL/TLS (Secure Socket Layer/Transport Layer Security) • libc Surface Manager La libreria Surface Manager è utilizzata per la composizione delle finestre con la tecnica off-screen buffering. Con l’off-screen buffering lo sviluppatore NON può creare direttamente disegni sullo schermo; le immagini andranno prima composte in un apposito buffer off-screen. Il contenuto del buffer combinato con altre immagini, andrà a formare la schermata finale che l’utente vedrà. Tale tecnica è alla base della trasparenza delle finestre. Media Framework Il Media Framework fornisce CODEC che permettono la registrazione e la riproduzione di diversi formati multimediali. È basato sulla libreria open-source OpenCore. SQLite, WebKit, SGL, OpenGL|ES SQLite è un leggero database utilizzato in Android per scopi di archiviazione dati. WebKit è il motore grafico e di layout del browser, usato per visualizzare il contenuto html. SGL (Scalable Graphics Library) è una libreria C++ per gestire la grafica bidimensionale. OpenGL|ES è un sottoinsieme delle OpenGL per gestire l’accelerazione grafica 3D e per il rendering 2D o 3D di contenuti grafici sullo schermo. SSL/TLS, Libc SSL e TLS (Secure Socket Layer/Transport Layer Security) permettono una comunicazione sicura e l’integrità dei dati su reti TCP/IP. TLS e SSL cifrano la comunicazione dalla sorgente alla destinazione (end-to-end) sul livello Transport. Diverse versioni del protocollo sono ampiamente utilizzate in applicazioni come i browser, l’e-mail, la messaggistica istantanea e il Voice over IP. Libc è la libreria standard Linux, adattata per i dispositivi mobili. Runtime Android La Runtime Android (inserita sempre nel secondo livello dello stack) è composta da: - Dalvik Virtual Machine - Core Libraries Dalvik Virtual Machine L’esigenza di creare applicazioni in grado di rispondere in modo immediato all’utente è fondamentale. Con un hardware a risorse limitate la decisione è stata quella di adottare una Virtual Machine (VM), diversa dalla Java Virtual Machine (JVM) di Sun. La scelta è caduta sulla Dalvik Virtual Machine (DVM), una macchina virtuale, adattata per l’uso su dispositivi mobili, dotata di compilatore Just-In-Time (JIT). Dalvik Virtual Machine L’esigenza di creare applicazioni in grado di rispondere in modo immediato all’utente è fondamentale. Con un hardware a risorse limitate la decisione è stata quella di adottare una Virtual Machine (VM), diversa dalla Java Virtual Machine (JVM) di Sun. La scelta è caduta sulla Dalvik Virtual Machine (DVM), una macchina virtuale, adattata per l’uso su dispositivi mobili, dotata di compilatore Just-In-Time (JIT). La necessità di cambiare VM nasce quindi dall’esigenza di risparmiare quanto più spazio possibile per la memorizzazione e l’esecuzione delle applicazioni. Core libraries L’altra componente della Runtime Android sono le core libraries. Queste librerie forniscono la maggior parte delle funzionalità definite nelle librerie Java J2SE (Standard Edition). Le core libraries sono un insieme di librerie native per le funzionalità core della piattaforma. In sostanza, per eseguire un’App con la DVM non basta l’applicazione in sé ma occorrono anche tutte le classi relative all’ambiente nella quale l’applicazione stessa viene eseguita. In esecuzione il device metterà a disposizione la versione dex del runtime, che costituisce appunto la core library di un’App. Application Framework Tutte le librerie viste finora vengono poi utilizzate da un insieme di componenti di più alto livello (terzo strato) che costituiscono l’Application Framework (AF). Si tratta di un insieme di API e componenti per l’esecuzione di funzionalità specifiche e di fondamentale importanza in ciascuna App Android. L’AF è lo strato cuscinetto (programmi middleware) tra le App e il software di sistema dei livelli bassi. Componenti dell’Application Framework Le componenti dell’Application Framework sono: • Activity Manager • Package Manager • Window Manager • Telephony Manager • Content Provider • Resource Manager • View System • Location Manager • Notification Manager • XMPP Service Activity Manager L’Activity Manager è lo strumento attraverso cui l’utente interagisce con l’applicazione. Il concetto di activity assume FONDAMENTALE IMPORTANZA IN ANDROID. A ogni activity è associata una schermata che permette: - la visualizzazione e la raccolta di informazioni, - l’interazione con l’utente. Organizza le varie schermate di un’App in uno stack a seconda dell’ordine di visualizzazione delle stesse sullo schermo dei dispositivi. Package Manager Il Package Manager gestisce il ciclo di vita delle App. Ciascuna applicazione deve fornire al dispositivo un determinato insieme di informazioni che sono descritte attraverso un apposito file XML di configurazione; tale file va sotto il nome di AndroidManifest. Window Manager Window Manager è la componente che permette di gestire le finestre delle diverse applicazioni in esecuzione in processi diversi, sullo schermo del dispositivo. Può essere considerato come un’astrazione dei servizi nativi del Surface Manager (livello Libraries). Telephony Manager Il Telephony Manager permette una maggiore interazione con le funzionalità caratteristiche di un telefono come la semplice possibilità di effettuare una chiamata o di verificare l’attuale stato della chiamata stessa. Content Provider Content Provider è una componente fondamentale nella realizzazione di applicazioni Android. Ha la responsabilità di gestire la condivisione di informazioni tra i vari processi. Resource Manager Il Resource Manager mette a disposizione una serie di API di semplice utilizzo per la gestione di informazioni diverse dal codice. Un’applicazione Android è composta: - da codice, - da un insieme di file di tipo diverso (immagini, file di configurazione, file di definizione del layout ecc.). Il Resource Manager è una componente che ottimizza le risorse. View System View System è una componente che gestisce il rendering delle componenti e degli eventi associati. L’interfaccia grafica di un’applicazione Android è composta da specializzazioni della classe View, ciascuna caratterizzata da una particolare forma e da un diverso modo di interagire con essa attraverso un’accurata gestione degli eventi associati. Location Manager Il Location Manager mette a disposizione le API per creare App che gestiscono le informazioni relative alla localizzazione: Location Based Application (LBA). Quindi tra le varie applicazioni Android che è possi- bile creare, ci sono quelle relative alla gestione delle mappe. Notification Manager Il Notification Manager mette a disposizione un insieme di strumenti che l’App può utilizzare per inviare una particolare notifica al dispositivo, questi la dovrà poi presentare all’utente con i meccanismi che conosce. L’App può quindi notificare un particolare evento al dispositivo che potrebbe, per esempio, emettere una vibrazione, lampeggiare i led, visualizzare un’icona e altro ancora. XMPP Service XMPP Service è un insieme di protocolli aperti di messaggistica istantanea e presenza basato su XML. L’acronimo sta per Extensible Messaging and Presence Protocol (XMPP). Il software basato su XMPP è diffuso su migliaia di Server disseminati su Internet ed è usato da oltre dieci milioni di persone in tutto il mondo. Applications Sullo strato più alto dell’architettura, poggiano gli applicativi destinati all’utente finale ossia le App vere e proprie che utilizzano i livelli sottostanti appena descritti. Molte App, naturalmente, sono già incluse con l’installazione di base: il browser e il player multimediale sono dei facili esempi; in questo livello si inseriranno anche le App sviluppate da terze parti.