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