Sistemi Mobili e Wireless Android – Introduzione alla piattaforma Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat [email protected] Cos'è Android? • Android è una piattaforma software open-source creata da Google e dalla Open Handset Alliance • E' una piattaforma originariamente mirata a dispositivi mobili quali gli smartphone, estesa successivamente ad altri dispositivi (tablet, TV), ma potenzialmente utilizzabile in molti altri mercati “embedded” 2 www.android.com Open Handset Alliance • A group of technology and mobile companies that have come together to accelerate innovation in mobile and offer consumers a richer, less expensive, and better mobile experience (da: www.openhandsetalliance.com) 3 Versioni Android 4 Versioni Android 5 Schermi Android 6 Schermi Android 7 Perchè Android? • Piattaforma aperta e open-source – Costruttori possono adattarla alle loro esigenze – Sviluppatori non si legano ad una piattaforma chiusa – Chiunque può contribuire al suo sviluppo • Ricchezza di funzionalità per gli sviluppatori – Disponibilità di API e servizi predefiniti – Facile accesso alle funzionalità “di basso livello” del dispositivo (es., chiamate, SMS, GPS, camera, sensori) • Architettura basata su componenti – Ogni applicazione può sfruttare componenti messi a disposizione da altre applicazioni, in modo simile ai mash-up su Internet 8 Perchè Android? • Gestione automatica del ciclo di vita delle applicazioni, ottimizzata per dispositivi con risorse limitate • Nessuna differenza tra le applicazioni “core” e quelle sviluppate da terze parti, tutte hanno gli stessi “diritti” • E' possibile personalizzare ogni aspetto (software) di un dispositivo Android (es., sostituire le applicazioni “core” con altre preferite) • Supporto di ricche funzionalità multimediali e (relativamente) facile portabilità su dispositivi con caratteristiche differenti (es., input, schermi, ...) 9 Caratteristiche Android • Application framework che permette il riuso e la sostituzione di componenti • Macchina virtuale Dalvik ottimizzata per dispositivi mobili • Browser Web integrato basato sul motore open-source WebKit • Libreria grafica 2D ottimizzata; grafica 3D basata su OpenGL ES (accelerazione hw opzionale) • Data storage strutturato tramite database SQLite • Supporto a formati audio e video comuni (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) • Bluetooth, EDGE, 3G, 4G, Wi-Fi, NFC (dipendente dall'hw) • Camera, GPS, bussola, accelerometro, ... (dipendente dall'hw) • Ricco ambiente di sviluppo che include emulatore, strumenti di debugging, profiling di memoria e prestazioni, plugin per Eclipse 10 Il “sistema” Android 11 Perchè Linux? • Il kernel di Linux è una piattaforma stabile e collaudata che fornisce un ricco insieme di funzionalità (gestione driver, gestione memoria, gestione processi, ...) • In un dispositivo mobile quale uno smartphone, l'affidabilità è più importante delle prestazioni, perchè la comunicazione è l'utilizzo primario di un telefono • Linux fornisce un'hardware abstraction layer che consente di mantenere inalterati gli strati superiori dell'architettura anche se vi sono modifiche a livello dell'hardware • All'apparire sul mercato di nuove periferiche, è possibile supportarle implementando dei driver al livello del kernel come in altre piattaforme basate su Linux 12 Perchè la macchina virtuale Dalvik? • Le applicazioni di terze parti così come quelle “core” di Android sono scritte in Java e compilate in bytecode (.dex) • Il bytecode viene interpretato a runtime dalla macchina virtuale Dalvik • E' possibile avere più macchine Dalvik attive allo stesso tempo • Il bytecode Dalvik è logicamente equivalente al bytecode Java ma consente di: – Ottimizzare le prestazioni per dispositivi mobili (batteria, memoria, CPU, ...) – Eseguire applicazioni in un ambiente libero dalle restrizioni della licenza Sun/Oracle – Sfruttare i miglioramenti apportati dalla comunità 13 ART • A partire da Android 4.4, esiste una ambiente di runtime alternativo a Dalvik chiamato ART (Android Runtime) • Al contrario di Dalvik, che sfrutta la compilazione JIT (Just in Time) al lancio delle applicazioni, ART introduce la compilazione AOT (ahead-of-time) al momento dell'installazione delle applicazioni • L'utilizzo di ART permette migliori prestazioni ed un minor consumo della batteria (dovuto alla minore quantità di operazioni che devono essere svolte al lancio di un'applicazione) • ART è disponibile come technology preview in Android 4.4 e rimpiazzerà Dalvik a partire da Android L 14 Android vs. Java • Android supporta il linguaggio Java standard ed un sottoinsieme delle librerie Java Standard Edition 5-6-7 • Vengono supportati tutti i tipi intrinseci (byte, char, short, int, long, float, double, Object, String, and arrays) ma è preferibile evitare l'utilizzo intenso dei tipi floating-point • Thread multipli sono supportati tramite time-slicing – tipicamente le applicazioni utilizzano 2 thread (UI, operazioni lente) – è supportata la sincronizzazione • La reflection (capacità degli oggetti di esaminare se stessi a runtime) è supportata ma è costosa in termini di risorse computazionali – La reflection può permettere, ad esempio, di verificare la presenza di specifiche classi, metodi, interfacce (consentendo di scrivere un unico codice per versioni diverse di Android) 15 Android vs. Java • Package supportati: 16 Android vs. Java • Package di terze parti: 17 Android vs. Java • Package non supportati: 18 Applicazioni Android: processi • Ogni applicazione corrisponde ad un utente Linux diverso e possiede un Linux user ID • Ogni applicazione Android viene eseguita all'interno di un differente processo Linux all'interno di una differente macchina virtuale (tranne rare eccezioni) • Ogni applicazione ha accesso solamente ai componenti di cui ha bisogno per funzionare e nulla più • Un'applicazione può chiedere di accedere a dati e servizi esterni (contatti, SMS, camera, …) tramite un meccanismo basato su permessi espliciti richiesti all'utente 19 Applicazioni Android: componenti • Un'applicazione Android consiste nella combinazione di uno o più dei seguenti componenti: – Activities: ogni activity corrisponde grossomodo ad una schermata di un'applicazione – Services: componenti che funzionano in background senza interazione diretta con l'utente – Broadcast receivers: componenti che consentono di rispondere ad eventi globali ed attivare altri processi/componenti – Content providers: consentono la condivisione di dati tra applicazioni (ma ogni applicazione può avere i suoi dati privati) 20 Applicazioni Android: intent • Ogni applicazione Android può sfuttare i componenti di altre applicazioni – Ad esempio, se un'applicazione ha bisogno di catturare una foto può sfruttare un componente già pronto di un'altra applicazione che fa proprio quello • Poichè ogni applicazione gira in un processo separato, un'applicazione non può attivare direttamente un componente di un'altra applicazione • Per attivare un componente, un'applicazione manda un messaggio di richiesta al sistema Android tramite il meccanismo degli intent • Il sistema Android si occuperà di attivare il componente adatto alla richiesta 21 Applicazioni Android: intent • Activities, services e broadcast receivers vengono attivati mediante intent • Ogni intent definisce un messaggio per attivare uno specifico componente o uno specifico tipo di componente – “Voglio vedere i dati relativi a questo contatto” – “Apri il seguente sito web” – “Attiva questo componente” • Per quanto riguarda activities e services, un intent definisce un'azione da eseguire e può specificare i dati su cui agire • Per i broadcast receivers, l'intent definisce semplicemente il messaggio di cui viene fatto il broadcast (es., batteria in esaurimento) 22 Applicazioni Android: ciclo di vita • Il ciclo di vita delle applicazioni viene gestito autonomamente da Android in base alle azioni di navigazione degli utenti ed alle risorse disponibili nel sistema • Gli utenti non si accorgono di come i processi vengono gestiti dal sistema http://www.youtube.com/watch?v=fL6gSd4ugSI&feature=channel 23