Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
ANDROID
SISTEMI OPERATIVI
Argomenti» Introduzione al sistema Android» Generalità sull’architettura del sistema» Architettura a livello Kernel» Architettura a livello applicazione» Gestione dei permessi
Gior
gio
Giac
into
201
8
2
Sistemi Operativi Mobilequote di mercato in base all’uso
Gior
gio
Giac
into
201
8
3
http://www.netmarketshare.com
Sistemi Operativi Mobilequote di mercato in base alle vendite
Gior
gio
Giac
into
201
8
4
Il successo di Android» Piattaforma aperta
˃ facilità di sviluppo e diffusione˃ Diversi dispositivi hardware, con ampia gamma di
modelli e prezzi
» Applicazioni vendute in più siti˃ Google Play - ufficiale˃ Amazon, GetJar, Slide ME - non ufficiali
» Costi di sviluppo contenuti» Librerie e strumenti consolidati per lo sviluppo
Gior
gio
Giac
into
201
8
5
Storia di Android» Sviluppato inizialmente da Android Inc.» Acquisita nel 2005 da Google» Ufficialmente nato nel 2007 e posseduto dalla
Open Handset Alliance» Completamente Open Source
˃ disponibile il codice sorgente
» Interamente pensato per dispositivi mobili˃ ottimizzazione batteria, ecc.
Gior
gio
Giac
into
201
8
6
Versioni AndroidGi
orgi
o Gi
acin
to 2
018
7
https://developer.android.com/about/dashboards/
Struttura del sistema» 4 Strati Fondamentali
˃ Funzioni del telefono (Rubrica, messaggi, etc.)
˃ Application Framework (gestione delle attività, risorse, content providers, etc.)
˃ Librerie native e ambiente runtime (Dalvik)
˃ Kernel di Linux (funzioni fondamentali del sistema)
Gior
gio
Giac
into
201
8
8
ArchitetturaGi
orgi
o Gi
acin
to 2
018
9
Framework per le applicazioni» Costituito da blocchi di funzionalità ad alto
livello accessibili dal programmatore via API standardizzate
» Componenti principali
Gior
gio
Giac
into
201
8
10
Activity Manager
Gestice il ciclo di vita delle applicazioni
Responsabile per l’avvio, la terminazione e il recupero
di una applicazione
Window Manager
Astrazione Java del Surface Manager che si trova nello
strato inferiore
Consente alla applicazione di dichiarare l’area utente sullo schermo e l’utilizzo di
funzionalità come la barra di stato
Package Manager
Installa e rimuove le applicazioni
Telephony Manager
Telefono, SMS, MMS
Framework delleapplicazioni» Content Providers
˃ funzioni che incapsulano i dati delle applicazioni per poterli condividere con altre applicazioni (ad es., i Contatti)
» Resource Manager˃ Gestisce le risorse delle applicazioni
» View System˃ Primitive per l’interfaccia utente (UI) e per gli eventi correlati
» Location Manager˃ Gestione della localizzazione via GPS, ID della cella telefonica, o
database delle posizioni Wi-Fi» Notification Manager
˃ Gestisce gli eventi: messaggi in arrivo, appuntamenti, ecc.» XMPP
˃ funzioni di messaggistica fra applicazioni
Gior
gio
Giac
into
201
8
11
Librerie di sistema “native”» Funzioni di sistema scritte in C or C++ e utilizzate da
diversi componenti di Android» Chiamate dalle applicazioni attraverso una
interfaccia Java˃ disponibile allo sviluppatore attraverso il framework˃ Il programmatore Android di solito non usa direttamente
queste libreriehttps://developer.android.com/tools/sdk/ndk/
» Alcune librerie di sistema+ Surface Manager+ OpenGL+ Media Framework+ SQL Database+ Browser Engine+ Bionic LibCGi
orgi
o Gi
acin
to 2
018
12
ARTAndroid Runtime» Ogni applicazione viene eseguita in un
ambiente isolato (sandbox)Android RunTime˃ Ogni app accede solo al suo insieme di risorse˃ Se una app viene compromessa, le altre app non ne
vengono influenzate» L’ambiente di esecuzione fino alla versione 4.4
aveva il nome Dalvik» Ogni operazione in ART viene eseguita
richiamando la corrispondente libreria C/C++ usando l’interfaccia JNI (Java Native Interface)
Gior
gio
Giac
into
201
8
13
Ambiente di esecuzioneJVM - Dalvik» Le applicazioni Android sono scritte in Java
...ma la Java Virtual Machine (JVM) è poco efficiente˃ non è ottimizzata per essere eseguita da dispositivi
+ con memoria limitata+ alimentati da una batteria
» Dalvik è una (application) virtual machine simile a JVM ma ottimizzata per dispositivi mobile
» Il codice Dalvik è ottenuto attraverso la conversione dal bytecode Java dopo la compilazione
Gior
gio
Giac
into
201
8
14
JVM - DalvikGi
orgi
o Gi
acin
to 2
018
15
JVM - Dalvik» La Java Virtual Machine è una macchina a stack
˃ Ad es., prima di una operazione matematica gli argomenti devono essere depositati nello stack
˃ consuma più istruzioni
» La Dalvik Virtual Machine è una macchina a registri˃ Ad es., risultati parziali e complessivi memorizzati in
registri virtuali (iniziano tutti per V).non coincidono con i registri della CPU
˃ Consuma meno istruzioni
Gior
gio
Giac
into
201
8
16
Java VM Dalvik VMI parametri sonosempre contenutinegli ultimi registriin questo caso V1
Esempio esecuzione JVM – esecuzione Dalvik
Gior
gio
Giac
into
201
8
17
Il kernel Linux» Gestione dei processi
» Driver per l’accesso a risorse fisiche˃ L’uso dei driver è abilitato da chiamate di sistema
» Supporta comunicazione fra processi (IPC)˃ Driver Binder (Intents)˃ Sockets
» Dalla versione 4.3 SELinux˃ Security Enhanced Linux
Gior
gio
Giac
into
201
8
18
IPC in Android» Oltre alle IPC Linux
˃ Segnali, Semafori, Pipe, ecc.
Android prevede altri strumenti di IPC˃ Binder
a livello di kernel˃ Intents
ad es., l’intenzione di usare un browser esterno˃ Interazione con i Content Providers per la
condivisione dei dati
Gior
gio
Giac
into
201
8
19
Gior
gio
Giac
into
201
8
20
Applicazioni» Due tipologie
˃ Native + parti di Android stesso o installate dai vendors
Possono avere certificati di sicurezza˃ Installate dall’utente
» Servizi Cloud-Based˃ Google Play˃ Android Updates˃ Application Services
Gior
gio
Giac
into
201
8
21
Componenti di una applicazione» Ogni applicazione è formata da uno o più elementi
appartenenti alle quattro tipologie di componenti. ˃ Attività˃ Servizi˃ Content providers˃ Broadcast receivers
» Application context˃ ambiente dell’applicazione˃ eseguita in un processo Linux˃ con il proprio Linux user ID ˃ la propria DVM˃ il proprio file system
Gior
gio
Giac
into
201
8
22
Attività» Singola schermata dell’applicazione» Una attività per schermata
˃ quando l’utente cambia schermata, cambia anche attività
» Una applicazione ha attività multiple ˃ cioè schermate multiple
» Diverse attività possono essere in esecuzione » Android ottimizza la gestione delle attività con il
ciclo delle attività
Gior
gio
Giac
into
201
8
23
Diagramma di transizione degli stati
Gior
gio
Giac
into
201
8
24
Resumed
Paused
EntireLifetime
VisibleLifetime
ForegroundLifetime
Stopped
Figure 4.17 Activity State Transition Diagram
Activitylaunched
App processkilled
Activityshut down
onCreate()
onStart() onRestart()
onResume()
onPause()
onStop()
onDestroy()
User returnsto the activity
Apps with higherpriority need memory
User navigatesto the activity
User navigatesto the activity
Stati del ciclo di attività» Activity Launched: l’attività non è ancora in memoria.
Vengono eseguiti una serie di metodi per portarla allo stato di running (alto consumo di energia)
» Resumed: attività in quel momento eseguita dall’utente (dove può interagire). Assume priorità rispetto a tutte le altre
» Paused: stato intermedio rispetto allo stop. Di solito si ha quando una attività è sullo schermo ma non in “focus” (cioè l’utente non interagisce).
» Stopped: l’attività non è visibile, ma è ancora in memoria. Questo capita perché spesso si passa da una attività ad un’altra usata poco precedentemente.
» Destroyed: l’attività viene rimossa dalla memoria » Killed: in caso di necessità di memoria, il sistema può terminare
una delle attività dell’applicazioneGior
gio
Giac
into
201
8
25
Processi e Thread
Gior
gio
Giac
into
201
8
26
Foreground process
Visible process
Service process
Background process
Empty process
» A ciascuna applicazione sono associati˃ un processo˃ un thread
» Il programmatore può prevedere lacreazione di più processi o thread˃ CPU multicore˃ eseguiti nella VM
» In caso di necessità di memoria, ilsistema può terminare (kill) uno opiù processi.˃ Selezione in base alla gerarchia di
precedenza fra processi
Multithreading» Ad ogni applicazione è associato un thread
principale chiamato UI thread (User Interface)» In caso di operazioni lente che potrebbero
bloccare UI si può creare un altro thread˃ worker thread che viene eseguito in background
+ ad es. in caso di connessione di rete lenta l’UI threadpotrebbe bloccarsi con messaggio “l’applicazione non risponde”
˃ un worker thread non può accedere direttamente alla UI ma può solo comunicare con il UI thread
Gior
gio
Giac
into
201
8
27
Avvio del sistema» All’avvio del dispositivo viene avviato il processo
Zygote˃ vengono carica componenti comuni del framework,
risorse come i temi, ecc.
» Il processo associato ad ogni app viene generato da Zygote attraverso fork˃ in questo modo si evita di avere in RAM copia dei
componenti comuni alle app
Gior
gio
Giac
into
201
8
28
Servizi» Richiesti da una applicazione o avviati dal sistema» Esecuzione di operazioni in background
˃ richiedono tempo per il loro completamento» Consentono di aumentare il tempo di risposta
dell’interfaccia utente ˃ UI thread - thread principale
» Esempi˃ creazione di un thread per la riproduzione di un brano
musicale di sottofondo˃ creazione di un thread per gestire trasferimento dati dalla
rete» Ciclo di vita che si richiama a quello delle attività
Gior
gio
Giac
into
201
8
29
Ciclo dei servizi
Gior
gio
Giac
into
201
8
30
Broadcast Receivers» Sfruttano il meccanismo publish/subscribe» Il receiver è un meccanismo che resta
“dormiente” e si attiva solo quando accade un certo evento del sistema a questo è “sottoscritto”
» Esempi˃ Arrivo di un sms˃ Telefonate˃ Batteria scarica
» Non sono eseguiti “attivamente” in memoria
Gior
gio
Giac
into
201
8
31
Content Providers» Interfacce per la condivisione di dati fra le varie
applicazioni» L’esecuzione in sandbox, infatti, fa sì che ogni
applicazione lavori solo su una specifica parte delle risorse
» Le loro API aderiscono al modello CRUD (Create Read Update Delete)
» Usato da tantissime applicazioni AndroidAd es. Contatti
Gior
gio
Giac
into
201
8
32
Content ProvidersGi
orgi
o Gi
acin
to 2
018
33
SQLite database
Si creano e gestiscono i contenuti attraverso una libreria di alto livello
Esempio di Content Provider
Gior
gio
Giac
into
201
8
34
Intents» “Messaggi” che gestiscono la comunicazione fra
˃ i blocchi dell’applicazione stessa
˃ blocchi di applicazioni diverse
» Possono essere espliciti o impliciti˃ espliciti quando viene CHIARAMENTE specificato il
destinatario (ad es., l’applicazione da “contattare”)
˃ impliciti quando non viene specificato il destinatario ma solo l’azione (ad es. voglio aprire una pagina web: chi si “candida”?)
Gio
rgio
Gia
cint
o 20
18
35
Esempio di Intent
Gior
gio
Giac
into
201
8
36
Formato memorizzazione applicazioni APK» Formato compresso (come lo zip) che contiene
tutti i dati necessari ad eseguire l’applicazione
» Contiene tre elementi principali:˃ File eseguibile (classes.dex)˃ File di risorse (tipicamente XML)˃ Manifest.xml
Gior
gio
Giac
into
201
8
37
Eseguibile» Sempre denominato classes.dex» E’ il file che contiene tutte le classi usate dal
programma» Contiene anche la maggior parte delle stringhe
˃ non necessariamente tutte: alcune possono essere nei file di risorse
» Formato da una serie di sezioni interconnesse» E’ un file molto “delicato”: una singola modifica di
un byte può interamente compromettere l’applicazione˃ Meccanismo di controllo dell’integrità dell’applicazione a
runtime chiamato “verificatore”˃ Qualsiasi violazione di integrità blocca l’esecuzione
Gior
gio
Giac
into
201
8
38
classes.dex» Sezione delle stringhe» Sezione dei tipi
˃ formata da stringhe che rappresentano i tipi» Sezione dei prototipi
˃ definisce tipo di ritorno, parametri e nome dei metodi» Sezione dei metodi
˃ definisce le informazioni del metodo, come ad esempio il suo bytecode
» Sezione delle classi˃ definisce le informazioni sulla classe, come il loro tipo
» Sezione delle annotazioni e del debug˃ informazioni aggiuntive su classi e metodiGi
orgi
o Gi
acin
to 2
018
39
Risorse» File XML» Definiscono principalmente proprietà grafiche
della applicazione, come ad esempio il layout delle attività
» Ma possono anche contenere delle stringhe usate dall’applicazione
» A volte è più facile programmare una applicazione valorizzando al massimo i files di risorse
Gior
gio
Giac
into
201
8
40
manifest.xml» Definisce tutti i componenti dell’applicazione
Android˃ entry points (i punti di “avvio” dell’applicazione) in
una applicazione Android non esiste il main˃ Definisce la lista delle attività˃ Definisce la presenza/assenza di content providers˃ Definisce i file di risorse utilizzati˃ Definisce il tipo di SDK (ovvero, la versione di
Android) su cui l’applicazione viene eseguita˃ altre informazioni
Gior
gio
Giac
into
201
8
41
Permessi» Sistema di permessi per usare le risorse del
sistema˃ evoluzione permessi ad ogni nuovo API Level
» Il modello di permessi garantisce la sicurezza a livello dell’applicazione
» I permessi vengono approvati/non approvati al momento dell’installazione dell’applicazione
» Le richieste vengono definite dallo sviluppatore nel manifest.xml
Gior
gio
Giac
into
201
8
42
Permessi in Android» Quattro diverse categorie
˃ Normal: permessi che non costituiscono un pericolo per la sicurezza
˃ Dangerous: permessi che accedono a dati sensibili dell’utente + di questi permessi viene chiesta conferma all’utente al momento
dell’installazione˃ Signature: permessi che possono essere ottenuti solo se
l’applicazione ha lo stesso certificato del produttore del dispositivo
˃ SignatureOrSystem: permessi usati solo nelle applicazioni presenti nell’immagine del sistema Android
+ usati ad es. da applicazioni prodotte da diversi produttori che hanno bisogno di condividere le stesse risorse
Gior
gio
Giac
into
201
8
43