SISTEMIOPERATIVI
ANDROID
Argomenti
GiorgioGiacinto2015
»
»
»
»
»
IntroduzionealsistemaAndroid
Generalitàsull’architetturadelsistema
ArchitetturaalivelloKernel
Architetturaalivelloapplicazione
Gestionedeipermessi
2
SistemiOperativiMobile
GiorgioGiacinto2015
quotedimercatoinbaseall’uso
3
http://www.netmarketshare.com
SistemiOperativiMobile
GiorgioGiacinto2015
quotedimercatoinbaseallevendite
4
IlsuccessodiAndroid
» Piattaformaaperta
˃ facilitàdisviluppoediffusione
˃ Diversidispositivihardware,conampiagammadi
modellieprezzi
» Applicazionivenduteinpiùsiti
GiorgioGiacinto2015
˃ GooglePlay- ufficiale
˃ Amazon,GetJar,SlideME- nonufficiali
» Costidisviluppocontenuti
» Librerieestrumenticonsolidatiperlosviluppo
5
StoriadiAndroid
» SviluppatoinizialmentedaAndroid Inc.
» Acquisitanel2005daGoogle
» Ufficialmentenatonel2007epossedutodalla
OpenHandset Alliance
» CompletamenteOpenSource
GiorgioGiacinto2015
˃ disponibileilcodicesorgente
» Interamentepensatoperdispositivimobili
˃ ottimizzazionebatteria,ecc.
6
GiorgioGiacinto2015
VersioniAndroid
7
https://developer.android.com/about/dashboards/
Strutturadelsistema
» 4StratiFondamentali
˃ Funzionideltelefono(Rubrica,messaggi,etc.)
˃ ApplicationFramework(gestionedelleattività,
risorse,contentproviders,etc.)
˃ Librerienativeeambienteruntime(Dalvik)
GiorgioGiacinto2015
˃ KerneldiLinux(funzionifondamentalidelsistema)
8
GiorgioGiacinto2015
ArchitetturasoftwarediAndroid
9
Frameworkperleapplicazioni
GiorgioGiacinto2015
» Costituitodablocchidifunzionalitàadalto
livelloaccessibilidalprogrammatoreviaAPI
standardizzate
» Componentiprincipali
Activity
Manager
Window
Manager
Gesticeilciclodivitadelle
applicazioni
AstrazioneJavadelSurface
Managerchesitrovanello
stratoinferiore
Responsabileperl’avvio,la
terminazioneeilrecupero
diunaapplicazione
Consenteallaapplicazione
didichiararel’areautente
sulloschermoel’utilizzodi
funzionalitàcomelabarradi
stato
Package
Manager
Telephony
Manager
Installaerimuovele
applicazioni
Telefono,SMS,MMS
10
Frameworkdelle
applicazioni
» ContentProviders
˃ funzionicheincapsulanoidatidelleapplicazioniperpoterli
condividereconaltreapplicazioni(ades.,iContatti)
» ResourceManager
˃ Gestiscelerisorsedelleapplicazioni
» View System
˃ Primitiveperl’interfacciautente(UI)eperglieventicorrelati
» LocationManager
GiorgioGiacinto2015
˃ GestionedellalocalizzazioneviaGPS,IDdellacellatelefonica,o
databasedelleposizioniWi-Fi
» NotificationManager
˃ Gestisceglieventi:messaggiinarrivo,appuntamenti,ecc.
» XMPP
˃ funzionidimessaggisticafraapplicazioni
11
Librerie disistema “native”
» FunzionidisistemascritteinCorC++eutilizzateda
diversicomponentidiAndroid
» Chiamatedalleapplicazioniattraversouna
interfacciaJava
˃ disponibileallosviluppatoreattraversoilframework
˃ IlprogrammatoreAndroid disolitononusadirettamente
questelibrerie
https://developer.android.com/tools/sdk/ndk/
GiorgioGiacinto2015
» Alcunelibreriedisistema
+
+
+
+
+
+
Surface Manager
OpenGL
MediaFramework
SQLDatabase
BrowserEngine
Bionic LibC
12
ART
Android Runtime
» Ogniapplicazionevieneeseguitainun
ambienteisolato(sandbox)
Android RunTime
GiorgioGiacinto2015
˃ Ogniapp accedesoloalsuoinsiemedirisorse
˃ Seunaapp vienecompromessa,lealtreapp nonne
vengonoinfluenzate
» L’ambientediesecuzionefinoallaversione4.4
avevailnomeDalvik
» OgnioperazioneinARTvieneeseguita
richiamandolacorrispondentelibreriaC/C++
usandol’interfacciaJNI(JavaNativeInterface)
13
Ambientediesecuzione
JVM- Dalvik
» LeapplicazioniAndroid sonoscritteinJava
...malaJavaVirtualMachine(JVM)èpoco
efficiente
˃ nonèottimizzataperessereeseguitadadispositivi
GiorgioGiacinto2015
+ conmemorialimitata
+ alimentatidaunabatteria
» Dalvik èuna(application)virtual machinesimile
aJVMmaottimizzataperdispositivimobile
» IlcodiceDalvik èottenutoattraversola
conversionedalbytecode Javadopola
compilazione
14
GiorgioGiacinto2015
JVM- Dalvik
15
JVM- Dalvik
» LaJavaVirtualMachineèunamacchinaastack
˃ Ades.,primadiunaoperazionematematicagli
argomentidevonoesseredepositatinellostack
˃ consumapiùistruzioni
GiorgioGiacinto2015
» LaDalvik VirtualMachineèunamacchinaa
registri
˃ Ad es., risultati parziali e complessivi memorizzati in
registri
virtuali
(iniziano
tutti
per
V).
non coincidono con i registri della CPU
˃ Consumamenoistruzioni
16
Esempio
GiorgioGiacinto2015
esecuzioneJVM– esecuzioneDalvik
JavaVM
Dalvik VM
Iparametri sono
sempre contenuti
negli ultimi registri
inquesto caso V1
17
Architetturadisistema
Applications and Framework
Binder IPC
Android System Services
Media Server
AudioFlinger
Camera
Service
System Server
MediaPlayer
Service
Other Media
Services
Power
Manager
Service
Activity
Manager
Window
Manager
Other Services
GiorgioGiacinto2015
Android Runtime/Dalvik
Hardware Abstraction Layer (HAL)
Camera HAL
Audio HAL
Graphics HAL
Other HALs
Linux Kernel
Camera Driver
Audio Driver
(ALSA, OSS, etc)
Display Drivers
18
Other Drivers
IlkernelLinux
» Gestionedeiprocessi
» Driverperl’accessoarisorsefisiche
˃ L’usodeidriverèabilitatodachiamatedisistema
» Supportacomunicazionefraprocessi(IPC)
GiorgioGiacinto2015
˃ DriverBinder(Intents)
˃ Sockets
» Dallaversione4.3SELinux
˃ SecurityEnhanced Linux
19
IPCinAndroid
» OltrealleIPCLinux
˃ Segnali,Semafori,Pipe,ecc.
GiorgioGiacinto2015
Android prevedealtristrumentidiIPC
˃ Binder
alivellodikernel
˃ Intents
ades.,l’intenzionediusareunbrowseresterno
˃ InterazioneconiContentProviders perla
condivisionedeidati
20
GiorgioGiacinto2015
21
Applicazioni
» Duetipologie
˃ Native
+ partidiAndroidstessooinstallatedaivendors
Possonoaverecertificatidisicurezza
˃ Installatedall’utente
GiorgioGiacinto2015
» ServiziCloud-Based
˃ GooglePlay
˃ AndroidUpdates
˃ ApplicationServices
22
Componentidiunaapplicazione
» Ogniapplicazioneèformatadaunoopiùelementi
appartenentiallequattrotipologiedicomponenti.
˃
˃
˃
˃
Attività
Servizi
Contentproviders
Broadcastreceivers
GiorgioGiacinto2015
» Applicationcontext
˃
˃
˃
˃
˃
ambientedell’applicazione
eseguitainunprocessoLinux
conilproprioLinuxuser ID
lapropriaDVM
ilpropriofilesystem
23
Attività
» Singolaschermatadell’applicazione
» Unaattivitàperschermata
˃ quandol’utentecambiaschermata,cambia anche
attività
» Unaapplicazionehaattivitàmultiple
GiorgioGiacinto2015
˃ cioèschermatemultiple
» Diverseattivitàpossonoessereinesecuzione
» Androidottimizzalagestionedelleattivitàconil
ciclodelleattività
24
Diagramma
ditransizione
deglistati
Activity
launched
onCreate()
Entire
Lifetime
onStart()
User navigates
to the activity
onRestart()
Visible
Lifetime
onResume()
App process
killed
Apps with higher
priority need memory
Foreground
Lifetime
User returns
to the activity
Resumed
onPause()
Paused
GiorgioGiacinto2015
User navigates
to the activity
onStop()
Stopped
25
onDestroy()
Activity
shut down
GiorgioGiacinto2015
Statidelciclodiattività
» ActivityLaunched:l’attivitànonèancorainmemoria.
Vengonoeseguitiunaseriedimetodiperportarlaallostatodi
running(altoconsumodienergia)
» Resumed:attivitàinquelmomentoeseguitadall’utente(dove
puòinteragire).Assumeprioritàrispettoatuttelealtre
» Paused:statointermediorispettoallostop.
Disolitosihaquandounaattivitàèsulloschermomanonin
“focus”(cioèl’utentenoninteragisce).
» Stopped:l’attivitànonèvisibile,maèancorainmemoria.
Questocapitaperchéspessosipassadaunaattivitàadun’altra
usatapocoprecedentemente.
» Destroyed:l’attivitàvienerimossadallamemoria
» Killed:incasodinecessitàdimemoria,ilsistemapuòterminare
unadelleattività dell’applicazione
26
Processi eThread
» Aciascunaapplicazionesono
associati
˃ unprocesso
˃ unthread
» Ilprogrammatorepuòprevederela
creazionedipiùprocessiothread
GiorgioGiacinto2015
˃ CPUmulticore
˃ eseguitinellaVM
» Incasodinecessitàdimemoria,il
sistemapuòterminare(kill)unoo
piùprocessi.
˃ Selezioneinbaseallagerarchiadi
precedenzafraprocessi
Foregroundprocess
Visibleprocess
Serviceprocess
Backgroundprocess
Emptyprocess
27
Multithreading
» Adogniapplicazioneèassociatounthread
principalechiamatoUIthread (UserInterface)
» Incasodioperazionilentechepotrebbero
bloccareUIsipuòcreareunaltrothread
GiorgioGiacinto2015
˃ worker thread chevieneeseguitoinbackground
+ ades.incasodiconnessionediretelental’UIthread
potrebbebloccarsiconmessaggio“l’applicazionenon
risponde”
˃ unworker thread nonpuòaccederedirettamente
allaUImapuòsolocomunicareconilUIthread
28
Avviodelsistema
» All’avviodeldispositivovieneavviatoilprocesso
Zygote
˃ vengonocaricacomponenticomunidelframework,
risorsecomeitemi,ecc.
GiorgioGiacinto2015
» Ilprocessoassociatoadogniapp viene
generatodaZygote attraversofork
˃ inquestomodosievitadiavereinRAMcopiadei
componenticomunialleapp
29
Servizi
» Richiestidaunaapplicazioneoavviatidalsistema
» Esecuzionedioperazioniinbackground
˃ richiedonotempoperillorocompletamento
» Consentonodiaumentareiltempodirisposta
dell’interfacciautente
˃ UIthread- threadprincipale
GiorgioGiacinto2015
» Esempi
˃ creazionediunthreadperlariproduzionediunbrano
musicaledisottofondo
˃ creazionediunthreadpergestiretrasferimentodatidalla
rete
» Ciclodivitachesirichiamaaquellodelleattività
30
GiorgioGiacinto2015
Ciclodeiservizi
31
BroadcastReceivers
GiorgioGiacinto2015
» Sfruttanoilmeccanismopublish/subscribe
» Ilreceiver èunmeccanismocheresta
“dormiente”esiattivasoloquandoaccadeun
certoeventodelsistemaaquestoè
“sottoscritto”
» Esempi
˃ Arrivodiunsms
˃ Telefonate
˃ Batteriascarica
» Nonsonoeseguiti“attivamente”inmemoria
32
GiorgioGiacinto2015
ContentProviders
» Interfacceperlacondivisionedidatifralevarie
applicazioni
» L’esecuzioneinsandbox,infatti,fasìcheogni
applicazionelavorisolosuunaspecificaparte
dellerisorse
» LeloroAPIaderisconoalmodelloCRUD(Create
ReadUpdateDelete)
» UsatodatantissimeapplicazioniAndroid
Ades.Contatti
33
ContentProviders
SQLite database
GiorgioGiacinto2015
Sicreanoegestisconoi
contenutiattraversouna
libreriadialtolivello
34
GiorgioGiacinto2015
EsempiodiContentProvider
35
Intents
» “Messaggi”chegestisconolacomunicazionefra
˃ iblocchidell’applicazionestessa
˃ blocchidiapplicazionidiverse
GiorgioGiacinto2015
» Possonoessereespliciti oimpliciti
˃ esplicitiquandovieneCHIARAMENTEspecificatoil
destinatario(ades.,l’applicazioneda“contattare”)
˃ implicitiquandononvienespecificatoildestinatario
masolol’azione(ades.voglioaprireunapagina
web:chisi“candida”?)
36
GiorgioGiacinto2015
EsempiodiIntent
37
Formatomemorizzazione
applicazioniAPK
» Formatocompresso(comelozip)checontiene
tuttiidatinecessariadeseguirel’applicazione
» Contienetreelementiprincipali:
GiorgioGiacinto2015
˃ Fileeseguibile(classes.dex)
˃ Filedirisorse(tipicamenteXML)
˃ Manifest.xml
38
Eseguibile
» Sempredenominatoclasses.dex
» E’ilfilechecontienetutteleclassiusatedal
programma
» Contieneanchelamaggiorpartedellestringhe
GiorgioGiacinto2015
˃ nonnecessariamentetutte:alcunepossonoesserenei
filedirisorse
» Formatodaunaseriedisezioniinterconnesse
» E’unfilemolto“delicato”:unasingolamodificadi
unbytepuòinteramentecompromettere
l’applicazione
˃ Meccanismodicontrollodell’integritàdell’applicazionea
runtime chiamato“verificatore”
˃ Qualsiasiviolazionediintegritàbloccal’esecuzione
39
classes.dex
» Sezionedellestringhe
» Sezionedeitipi
˃ formatadastringhecherappresentanoitipi
» Sezionedeiprototipi
˃ definiscetipodiritorno,parametrienomedeimetodi
» Sezionedeimetodi
GiorgioGiacinto2015
˃ definisceleinformazionidelmetodo,comeadesempioil
suobytecode
» Sezionedelleclassi
˃ definisceleinformazionisullaclasse,comeillorotipo
» Sezionedelleannotazioni edeldebug
˃ informazioniaggiuntivesuclassiemetodi
40
GiorgioGiacinto2015
Risorse
» FileXML
» Definisconoprincipalmenteproprietàgrafiche
dellaapplicazione,comeadesempioillayout
delleattività
» Mapossonoancheconteneredellestringhe
usatedall’applicazione
» Avolteèpiùfacileprogrammareuna
applicazionevalorizzandoalmassimoifilesdi
risorse
41
manifest.xml
GiorgioGiacinto2015
» Definiscetuttiicomponentidell’applicazione
Android
˃ entrypoints(ipuntidi“avvio”dell’applicazione)in
unaapplicazioneAndroidnonesisteilmain
˃ Definiscelalistadelleattività
˃ Definiscelapresenza/assenzadicontentproviders
˃ Definisceifiledirisorseutilizzati
˃ DefinisceiltipodiSDK (ovvero,laversionedi
Android)sucuil’applicazionevieneeseguita
˃ altreinformazioni
42
Permessi
» Sistemadipermessiperusarelerisorsedel
sistema
GiorgioGiacinto2015
˃ evoluzionepermessiadogninuovoAPILevel
» Ilmodellodipermessigarantiscelasicurezzaa
livellodell’applicazione
» Ipermessivengonoapprovati/nonapprovatial
momentodell’installazionedell’applicazione
» Lerichiestevengonodefinitedallosviluppatore
nelmanifest.xml
43
PermessiinAndroid
» Quattrodiversecategorie
˃ Normal:permessichenoncostituisconounpericoloperla
sicurezza
˃ Dangerous:permessicheaccedonoadatisensibilidell’utente
GiorgioGiacinto2015
+ diquestipermessivienechiestaconfermaall’utentealmomento
dell’installazione
˃ Signature:permessichepossonoessereottenutisolose
l’applicazionehalostessocertificatodelproduttoredel
dispositivo
˃ SignatureOrSystem:permessiusatisolonelleapplicazioni
presentinell’immaginedelsistemaAndroid
+ usatiades.daapplicazioniprodottedadiversiproduttoriche
hannobisognodicondividerelestesserisorse
44