22
ANDROID SISTEMI OPERATIVI Argomenti » Introduzione al sistema Android » Generalità sull’architettura del sistema » Architettura a livello Kernel » Architettura a livello applicazione » Gestione dei permessi Giorgio Giacinto 2018 2

ANDROID - University of Cagliari...2018/12/18  · classes.dex » Sezione delle stringhe » Sezione dei tipi ˃ formata da stringhe che rappresentano i tipi » Sezione dei prototipi

  • 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