Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata...

123
Relatori: Ing. Saverio Lemma Ing. Marco Lombardi @ Centro ICT per i Beni Culturali Android4U 2016

Transcript of Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata...

Page 1: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Relatori:Ing. Saverio LemmaIng. Marco Lombardi

@ Centro ICT per i Beni Culturali

Android4U

2016

Page 2: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Android: introduzione e concetti chiave• Storia e caratteristiche principali• Architettura• Elementi di base• Sicurezza e permessi

Nativo o ibrido: approcci a confronto• Panoramica sui sistemi operativi mobile• App native, web application e app ibride• Apache Cordova

Sommario

Android4U

Page 3: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Free● https://developer.android.com/training/index.html

Books● Android Guida per lo Sviluppatore, APOGEO

● Beginning Android 3, APRESS

● Advanced Android Development, MURPHY

Bibliografia

Android4U

Page 4: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

La rivoluzione dei dispositivi mobili 1/2

Android4U

Il dispositivo che fino a qualche anno fachiamavamo cellulare oggi è a tutti gli effetti unPersonal Computer.

La vera rivoluzione dal punto di vista degli utenticonsiste nel fatto che uno smartphone è molto piùPersonal di un PC perché ci segue ovunque.

Gli sviluppatori possono finalmente creareapplicazioni che non devono fare più i conti con ilconcetto di "risorse limitate".

Page 5: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

La rivoluzione dei dispositivi mobili 2/2

Android4U

Dal punto di vista dei produttori la rivoluzioneconsiste nel fatto che in passato ogni produttoredi dispositivi mobili ha realizzato un propriosistema operativo, ambiente di sviluppo,linguaggio, tool: nessuno si è affermato comestandard.

Il progetto Android nasce quindi da una esigenzadi standardizzazione su iniziativa di Google.

http://www.android.com/

Page 6: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Android è la prima piattaforma software open perdispositivi mobile

Android è uno stack software per dispositivi mobilied include un sistema operativo, un middlewareed un insieme di applicazioni chiave.

Android è stato sviluppato da Google Inc. e da unconsorzio di aziende chiamato Open HandsetAlliance

Cosa è Android?

Android4U

Page 7: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• Utilizza tecnologie open (linux kernel 2.6 e 3.x dalla4.0).

• Le librerie e le API utilizzate per realizzare Android sonole stesse che possiamo usare per le nostre applicazioni.

• Il kernel linux è rilasciato sotto GNU GeneralPersonal Licence (GPL).

• La piattaforma Android è rilasciata sotto Open SourceApache Software Licence 2.0 (ASL).

Android4U

Perchè Open?

Page 8: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

http://www.openhandsetalliance.com

●Operatori mobili: Telecom, Vodafone, T-Mobile...●Produttori di chip: Arm, Intel, NVIDIA...●Produttori di telefonini: Toshiba, HTC, Acer, Sony,...●Aziende sviluppatrici di software: Google, eBay,Omron, ...●Aziende di commercializzazione: Accenture,Aplix...

Android4U

Open Handset Alliance

Page 9: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Un po’ di storia

Android4U

Page 10: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

9

https://www.android.com/history/

Android4U

Platforms

Page 11: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

I requisiti minimi di ogni versione rilasciata, sonodefiniti mediante l'Android Compatibility Programche consiste di tre componenti chiave:

● Il codice sorgente dello stack software Android Il “Compatibility Definition Document”, che●

descrive le specifiche di compatibilità● La “Compatibility Test Suite”, che rappresenta il

"meccanismo" di compatibilità● Il più recente ACP si riferisce alla 4.4

Android4U

Requisiti minimi 1/2

Page 12: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Per Android 2.2 alcuni dei requisiti minimi sono:

Memoria >= 128MB (kernel) + 150MB (/data) +1GB (Application/SD Card) FotoCamera >= 2 megapixel

Display >= 2,5''

Per Android 4.0 alcuni dei requisiti minimi sono:

Memoria >= 340MB (kernel) + 350MB (/data) +1GB (Application(SD Card) FotoCamera >= 2 megapixel

Display >= 2,5''Android4U

Requisiti minimi 2/2

Page 13: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• Il codice sorgente di Android può essere scaricatoseguendo le indicazioni descritte in

http://source.android.com/source/downloading.html• La versione di Android più recente per la

quale è disponibile il codice sorgente è la 6.0(API level 23)

Codice sorgente Android

Android4U

Page 14: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• Android include un ”application framework”che permette il riutilizzo dei componentisviluppati.

• La Dalvik Virtual Machine ed il nuovoAndroid RunTime sono ottimizzati perl'esecuzione su dispositivi mobili.

• Il browser web integrato è basato sulsoftware open-source ”WebKit”.

• La grafica 2D è basata su unalibreria appositamente sviluppata.

Caratteristiche principali 1/3

Android4U

Page 15: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• La grafica 3D è basata sulla specifica OpenGL ES 1.0e l'accelerazione hardware è opzionale.

• Per l'immagazzinamento strutturato di dati si usa SQLite.• Sono supportati i più comuni formati audio e video

(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).

Android4U

Caratteristiche principali 2/3

Page 16: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• Può supportare GSM, EDGE (2.5G), UMTS(3G), LTE(4G), Bluetooth/BTLE (Low Energy),Wi-Fi, NFC.

• Prevede anche il supporto per fotocamera, GPS,bussola e accelerometro, sensore prossimità,ambient light sensor, finger print scanner.

• Fornisce un ricco ambiente integrato di sviluppoche include un emulatore, strumenti per ildebugging e il profiling di memoria e prestazioni,e più ambienti di svilluppo specifici.

Android4U

Caratteristiche principali 3/3

Page 17: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

http://source.android.com/source/index.htmlAndroid4U

Architettura di Android

Page 18: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Android4U

Architettura di Android

Page 19: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

I componenti mostrati nel precedente schema dell'architettura verranno ora analizzati uno ad uno:• Kernel Linux• Librerie• Android Runtime• Application Framework• Applicazioni

Componenti del sistema

Android4U

Page 20: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Kernel Linux Interfacciare HW e librerie Servizi base come sicurezza, gestione memoria, gestione processi, gestione driver HW Comunicazione tra vari componenti (1 app = 1 processo)

Android4U

Architettura di Android (2)

Page 21: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Librerie Forniscono funzionalità CORE di Android Si riferiscono a progetti Open Source Sono scritte in C/C++

Android4U

Architettura di Android (3)

Page 22: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Surface Manager Gestire view Coordinare varie finestre Disegnare su buffer e visualizzare (tecnica double

buffering) 2D + 3D

Android4U

Architettura di Android (4)

Page 23: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

OpenGL | ES Permette di accedere a acceleratore grafico Versione mobile di OpenGL 1.3 Bassa memoria 1-64Mb

Android4U

Architettura di Android (5)

Page 24: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

SGL Versione mobile render grafica 2D Usata da Surface Manager e Window Manager

Android4U

Architettura di Android (6)

Page 25: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Media Framework Gestire CODEC per acquisizione e riproduzione audio e

video Basato sulla libreria open source OpenCore di PacketVideo MPEG4, H.264, MP3, AAC, AMR, JPG e PNG

Android4U

Architettura di Android (7)

Page 26: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

FreeType Gestione dei font (http://freetype.sourceforge.net) Piccole dimensioni, molto efficiente, altamente

customizzabile e portabile

Android4U

Architettura di Android (8)

Page 27: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

SSL Gestione Secure Socket Layer / Connessioni sicure

Android4U

Architettura di Android (9)

Page 28: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

SQLite Gestione persistenza DBMS relazionale, compatto (C), in-process, senza

configurazione e transazionale

Android4U

Architettura di Android (10)

Page 29: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

WebKit Browser integrato (http://webkit.org) Utilizzato da Safari e Chrome Personalizzato per mobile

Android4U

Architettura di Android (11)

Page 30: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

libc Libreria standard C libc ottimizzata per i dispositivi basati su Linux

Android4U

Architettura di Android (12)

Page 31: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Android Runtime

Funzionalità delle librerie base di JAVA (Core Libraries) Ogni applicazione ha il suo processo con instanziazione

della Dalvik Virtual Machine. Apartire dalla versione 4.4 è stato introdotta la nuovaART VM che hasostituito la DVM.

Android4U

Architettura di Android (13)

Page 32: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Android4U

Core LibrariesLe Core Libraries forniscono molte delle funzionalità delle analoghelibrerie disponibili per il linguaggio di programmazione Java.

• Rappresentano un insieme di librerie molto ”vicine” alla DalvikVirtual Machine ed estratte in parte dal progetto Apache Harmony(2007) ed in parte appositamente adattate.

• Sono distribuite in tre categorie:

1. DalvikVM specific libraries (System Info, Debugging) 2. Java Compatibility libraries (Base and utility classes) 3. Thirty Part Libraries (Apache HttpClient 4.0)

Page 33: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

La Dalvik VM è stata ottimizzata in modo cheuno stesso dispositivo embedded sia in grado di eseguirne più istanze in modo efficiente.

La Dalvik VM esegue un bytecodeincompatibile con quello della Java VM e cheviene detto Dalvik Executable (.dex), ottimizzato per avere una occupazione dimemoria minima.

La Dalvik VM è register-based (mentre laJava VM è stack-based).

Android4U

Dalvik VM (1/2)

Page 34: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Il ciclo di sviluppo prevede che una applicazione venga dapprima sviluppata in Java, e successivamenteun tool (dx) converte i file.class, ottenuti dalla normale compilazione java, in file ottimizzati .dex

Dalvik VM (2/2)

Android4U

Page 35: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Application Framework Fornisce l’accesso alle librerie attraverso API. L’architettura delle applicazioni è progettata per semplificare il riutilizzo dei componenti. Scritto in JAVA. Views (liste, text box, bottoni), Content providers (Apps data), Resource Manager

(immagini, localized strings), Notification Manager (barra di stato), Activity Manager (navigazione app)

Android4U

Architettura di Android (14)

Page 36: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Activity Manager Non solo visualizzazione schermata, ma lo strumento

attraverso il quale l’utente interagisce con l’applicazione Organizzazione in uno stack a seconda dell’ordine

Android4U

Architettura di Android (15)

Page 37: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Package Manager Gestire il ciclo di vita delle applicazioni nel dispositivo XML di configurazione (AndroidManifest) Informazioni sul layout o su aspetti di sicurezza...

Android4U

Architettura di Android (16)

Page 38: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Window Manager Gestire le finestre delle diverse applicazioni gestite da processi

diversi Astrazione Surface Manager

Android4U

Architettura di Android (17)

Page 39: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Telephony Manager Gestire funzionalità di un telefono come, ad esempio, iniziare

una chiamata, o di verificare lo stato della chiamata stessa.

Android4U

Architettura di Android (18)

Page 40: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Content Providers Gestire la condivisione di informazioni tra i vari processi. Repository condiviso con cui le diverse applicazioni possono

interagire inserendo o leggendo informazioni.

Android4U

Architettura di Android (19)

Page 41: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Resource manager Gestione di risorse appartenenti ad un’applicazione (immagini,

file di configurazione o di properties). Trasformazione file in contenuti binari ottimizzati per un

dispositivo.

Android4U

Architettura di Android (20)

Page 42: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

View System Grafica di un’applicazione per Android: è composta da quelle che

saranno specializzazioni della classe View (griglie, text-box, pulsanti). Renderizzazione dei componenti grafici, nonché gestione degli eventi

associati.

Android4U

Architettura di Android (21)

Page 43: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Location Manager Gestione delle mappe Consente la realizzazione di Location Based

Application (LBA)

Android4U

Architettura di Android (22)

Page 44: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Notification Manager Permette a tutte le applicazioni di mostrare avvisi

personalizzati sulla barra di stato. Gestione insieme di strumenti che l’applicazione può

utilizzare per inviare una notifica al dispositivo (es.vibrazione, lampeggiare i LED, visualizzare un’icona).

Android4U

Architettura di Android (23)

Page 45: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Applicazioni Android dispone di base di un insieme di applicazioni:

email, contacts, browser, maps, calendar… Scritte in Java. Nostre App!

Android4U

Architettura di Android (24)

Page 46: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Gli elementi di base per costruire un'applicazionesono

Source: codelearn.org

Android4U

Building blocks

Page 47: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Le Activity sono l'elemento di base più comune.Rappresentano blocchi logici dell'applicazione edinteragiscono con l'utente mediante i dispositivi diinput dello smartphone.Serve una Activity per ogni schermatadell'applicazione (es. una per comporre unmessaggio, una per consultare la rubrica e unaper le configurazioni).Vengono derivate dalla classe baseandroid.app.Activity.

Android4U

Activity (1/7)

Page 48: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● La propria Activity derivata mostrerà unainterfaccia utente composta da View erisponderà ad eventi.Spostarsi da una schermata all'altra fa avviare unanuova Activity.In certi casi l'Activity chiamata restituirà un valoreall'Activity chiamante (ad esempio una schermatache permette di selezionare una foto restituirà alchiamate la foto scelta).Quando si apre una nuova schermata, quellaprecedente è messa in pausa e inserita in una pila(activity stack).

Android4U

Activity (2/7)

Page 49: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• L'utente può quindi navigare avanti e indietro tra leschermate aperte nell'activity stack.

• Per alcune schermate può essere inappropriato rimanerenell'activity stack, e in questo caso è possibile rimuoverle.

• Android mantiene un activity stack per ogniapplicazione lanciata dalla schermata Home.

source: www.edeureka.co

Android4U

Activity (3/7)

Page 50: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Pur essendo possibileavviare più applicazionicontemporaneamentesoltanto una puòoccupare il display,mentre le altre saranno”nascoste” inbackgroundQuesto è il motivo percui, il concetto dichiusura è secondario enormalmente nontroveremo il pulsante”Esci”

Android4U

Activity (4/7)

Page 51: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Android4U

Activity (5/7)

Page 52: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● onCreate(Bundle): e' invocato quando l'activity viene avviataper la prima volta. Il Bundle savedInstanceState serve perriportare l'Activity nello stesso stato in cui si trovava laprecedente istanza dell'Activity terminata. Activity esistenteonStart(): è invocato quando l'activity sta per esserevisualizzata. Activity visibileonResume(): è invocato non appena l'activity inizia ad"interagire" con l'utente. Activity attivaonPause(): è invocato non appena l'activity sta per essere”ibernata” (per es. e' stata avviata un'altra activity). Activity visibileonStop(): è invocato nel momento in cui l'activity non e' piu'visibile all'utente. Activity esistente

Android4U

Activity (6/7)

Page 53: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

onRestart(): è invocato quando l'Activity sta per essereriavviata dopo essere stata precedentemente arrestata.onDestroy(): è invocata poco prima che l'Activity siadistrutta.onSaveInstanceState(Bundle): è invocata per salvarelo stato dell'Activity.onRestoreInstanceState(Bundle): è invocata solo sein precedenza è stato salvato uno stato.

Android4U

Activity (7/7)

Page 54: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Con Android 3.0 sono stati introdotti i Fragment.Un Fragment costituisce una porzione di UI di unadata Activity con le seguenti proprietà:

● E' caratterizzata da un proprio ciclo di vitaPossiede un proprio inputPuò essere aggiunto e rimosso mentre l'Activity è inesecuzione

● Per es., una Activity potrebbe includere moltiFragment quando il display è abbastanza ampio,oppure solo alcuni in caso contrario.

Android4U

Activity - Fragment

Page 55: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Riutilizzo di componenti: quando un’applicazione ha bisogno dieseguire un’operazione, crea un Intent, richiedendo l’utilizzo di unaqualche risorsa, o componente in grado di poterla esaudire.

L'Intent rappresenta un messaggio in grado di attivare i trecomponenti-base di una applicazione: Activity, Service e BroadcastReceiver.Un Intent descrive cosa una applicazione vuole che venga fatto.La struttura dati dell'Intent si compone dell'azione da effettuare e deidati su cui agire.Valori tipici per l'azione sono MAIN (la schermata principaledell'applicazione), VIEW, PICK, EDIT etc.

Android4U

Intent (1/4)

Page 56: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Un Intent può essere Esplicito o Implicito:

Esplicito: all'interno del costruttore dell'Intent specifichiamola classe da eseguire (tipicamente una Activity).Nell'esempio seguente è istanziato un Intent in cui èdichiarata una Activity da eseguire.

Intent intent = new Intent(this, SubActivity.class); startActivity(intent);

Intent (2/4)

Android4U

Page 57: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Implicito: rappresenta l'essenza della filosofiaAndroid. Un Intent implicito dichiara l'azione daeseguire pur senza sapere chi la eseguirà.Nel seguente esempio è dichiarato un Intentmediante cui avviare una Activity chevisualizzerà il sito definito nell'URI.

Uri uri = Uri.parse("http://www.google.com"); Intent it = new Intent(Intent.ACTION_VIEW,uri); startActivity(it);

Android4U

Intent (3/4)

Page 58: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● In generale, potrebbe essere necessario richiedere specifici "permission" per eseguire un particolare IntentTali permessi devono essere dichiarati nelmanifest.xml, ad esempio:

<uses-permission android:name="android.permission.INTERNET" />

Intent (4/4)

Android4U

Page 59: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Una classe correlata si chiama IntentFilter: è unmeccanismo che permette ad un’applicazione di dichiararel’insieme degli Intent che è in grado di gestire.Una Activity che è in grado di mostrare le informazioni dicontatto per una persona pubblicherà un IntentFilter nelquale dirà che sa come gestire l'azione VIEW quandoessa è applicata a dati che rappresentano una persona.Le Activity pubblicano i loro IntentFilter nel fileAndroidManifest.xml.La navigazione da una schermata all'altra viene effettuatarisolvendo gli Intent.

Android4U

Intent Filter (1/2)

Page 60: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

<activity android:name=".IntentSample" android:label="@string/app_name">

<intent-filter><action android:name="android.intent.action.MAIN" /><category

android:name="android.intent.category.LAUNCHER" /></intent-filter>

</activity>

Un IntentFilter sempre presente nella nostraapplicazione è il seguente:

● La action dichiara che si tratta di un entry point,mentre la category indica che questo entry pointpuò essere listato nell'Application LauncherOvvero, la nostra Activity si rende disponibile nellahome per essere eseguita mediante click/tapsull'icona relativa

Android4U

Intent Filter (2/2)

Page 61: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Per navigare avanti una Activity chiama

startActivity(myIntent);

Il sistema guarda quindi gli IntentFilter per tutte leapplicazioni installate e sceglie l'Activity il cuiIntentFilter è più appropriato per myIntent.

La nuova Activity è informata dell'Intent, e vienequindi lanciata.

Intent - navigazione

Android4U

Page 62: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Le Activity possono riutilizzare funzionalità di altricomponenti semplicemente facendo una richiestasotto forma di un Intent.Le Activity possono essere sostituite in ognimomento da una nuova Activity con un IntentFilterequivalente.Rif:http://developer.android.com/reference/android/content/Intent.html

Il fatto di risolvere gli Intent al tempo di esecuzione soloquando startActivity() viene chiamata comporta almenodue benefici principali:

Intent – esecuzione a run time

Android4U

Page 63: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Un elemento di base di una applicazione è laclasse BroadcastReceiver definita all'internodel package android.content.Viene utilizzato quando si vuole che parte delcodice della propria applicazione vengaeseguito in risposta ad un evento esterno (es. iltelefono squilla, o una connessione dati diventadisponibile, oppure quando è mezzanotte).Affinché un BroadcastReceiver venga chiamatonon è necessario che la relativa applicazionesia in esecuzione.

Android4U

Broadcast Receiver (1/2)

Page 64: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• I BroadcastReceiver non hanno interfaccia grafica, ma possonousare il NotificationManager per avvisare l'utente che èsuccesso qualcosa di interessante.

• Anche i BroadcastReceiver come gli IntentFilter sono registratinel file AndroidManifest.xml, ma possono essere ancheregistrati dal sorgente usando la chiamataContext.registerReceiver().

• Le applicazioni possono lanciare i broadcast alle altre conContext.sendBroadcast().

Android4U

Broadcast Receiver (2/2)

Page 65: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Un altro elemento di base delle applicazioniAndroid è il Service, ovvero del codice senzainterfaccia grafica e sono definiti all'interno delpackage android.app.Un buon esempio è la riproduzione di un branomusicale: poiché si vuole che la riproduzionecontinui anche dopo che l'utente ha cambiatoschermata, non la si può lasciare eseguire aduna Activity ma bisogna chiamareContext.startService() per eseguirla inbackground.

Service

Android4U

Page 66: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Un Service non è un processo separato: in altreparole l'applicazione e il suo servizio sonoeseguiti all'interno dello stesso processo (senon altrimenti specificato)Non è un thread: non è uno strumentomediante cui fare eseguire delle attività al difuori del thread principale

Android4U

Cosa non è un Service

Page 67: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Un Service è uno strumento mediante cuil'applicazione vuol comunicare al sistema cheuna data operazione deve essere eseguita inbackground anche quando l'utente non stainteragendo direttamente con essa.Uno strumento mediante il quale l'applicazionemette a disposizione di altre applicazioni alcunedelle proprie funzionalità. Ciò può essererealizzato invocando una Context.bindService()mediante la quale viene stabilita unaconnessione tra l'applicazione richiedente ed ilservizio richiesto.

Android4U

Cosa è un Service

Page 68: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Quando viene invocato ilmetodo startService() il sistemaverifica se tale servizio è inesecuzione altrimenti esegueonCreate().Successivamente è invocato ilmetodo onStartCommand() e ilservizio è finalmente nello statodi esecuzione dove rimane finoa quando non sarà richiamatostopService() oppure stopSelf().

Android4U

Ciclo di vita di un Service (1/2)

Page 69: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

onCreate(): a differenza delle Activity non presenta alcunparametro. Creato il servizio viene invocato il metodoonStartCommand(). Viene invocato una sola volta.onStartCommand(): invocato questo metodo il servizioresterà in esecuzione e rimarrà in questo stato fino aquando non sarà invocato stopService() da partedell'Activity che lo ha generato, oppure stopSelf() da partedel servizio stesso. Può essere invocato più volte inseguito all'esecuzione di onStartService() da partedell'Activity.onDestroy(): l'invocazione di stopService() da partedell'Activity produrrà la chiamata di questo metodo delServizio. In seguito a questa chiamata il servizio saràeliminato.

Android4U

Ciclo di vita di un Service (2/2)

Page 70: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● L'ultimo elemento di base è il Content Provider,definito all'interno della classe Android.ContentSolitamente le applicazioni memorizzano i lorodati all'interno del file-system oppure in undatabase SQLite, ma se i dati di unaapplicazione devono essere condivisi con lealtre bisogna usare la classe ContentProvider.Un ContentProvider è una classe cheimplementa un insieme standard di metodi perpermettere alle altre applicazioni di salvare erecuperare dati.

Android4U

Content Provider

Page 71: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Per ogni applicazione che viene eseguita,Android avvia un nuovo processo LinuxDi default, tutti i componenti di una dataapplicazione (per es. Activity + Service) sonoeseguiti all'interno dello stesso processoSe al momento di avviare una applicazione esistegià un processo assegnato ad essa perchè unsuo componente è stato eseguito in precedenza,allora tale applicazione sarà eseguita all'internodi questo processo

Android4U

Applicazioni e Processi (1/3)

Page 72: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Nel caso in cui la memoria a disposizione pereseguire una applicazione in foreground (visibileall'utente) ovvero per eseguire un importanteprocesso non sia disponibile, allora il sistema puòdecidere di eliminare uno o più processi inbackground secondo una logica ben definita.Ad ogni processo viene assegnata una sorta diimportanza gerarchica in base ai suoicomponenti in esecuzione ed al loro stato.Ovviamente i processi di minore importanzasaranno i primi ad essere eliminati per liberarememoria.

Android4U

Applicazioni e Processi (2/3)

Page 73: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Sono state definite 5 tipologie di processi ordinateper importanza decrescente:● Foreground Process

Visible Process Service Process Background Process Empty Process

Android4U

Applicazioni e Processi (3/3)

Page 74: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

I processi Foreground sono quelli che eseguonocomponenti di interazione con l'utente:

• Activity in cima allo Stack

• Azioni di un BroadCastReceiver (OnReceive())

• Metodi di callback nella gestione di un servizio come Start(), Create() o Destroy()

Normalmente il numero di questo tipo di processi èlimitato. Android potrà decidere di eliminarne unocome ultima chance per risolvere il problema dimemoria

Android4U

Foreground process

Page 75: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Sono processi che pur non essendo direttamentevisibili all'utente (non possiedono componenti inForeground), si trovano in uno stato in cui possonocomunque avere effetto su quello che l'utente vedevisualizzato.

• Activity non in Foreground che esegue OnPause().• Service connesso ad un'Activity in Foreground.

Android4U

Visible process

Page 76: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Sono processi che eseguono Service.Pur non interagendo direttamente con l'utente,Android li ritiene più importanti delle Activity inBackground.L'esempio classico è la riproduzione di un fileaudio: pur non interagendo direttamente conl'utente, questo accetterà malvolentieril'interruzione dell'ascolto del brano. PertantoAndroid proverà ad eliminare uno o più processimeno importanti prima di eliminare un ServiceProcess.

Android4U

Service Process

Page 77: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Sono processi che si occupano di eseguireActivity non più in Foreground per i quali è statoinvocato il metodo OnStop().Il loro numero è in genere superiore a quellodelle altre categorie.L'eliminazione all'interno di questa categoriatiene in considerazione il criterio di Least RecentUsed (LRU).Per questi processi è comunque definito unmeccanismo di salvataggio e ripristino.

Android4U

Background process

Page 78: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Sono i processi candidati per l'eliminazione.Non eseguono alcun componente.

Il motivo per cui non vengono eliminati nelmomento in cui sono svuotati dai componenti cheeseguivano è legato a strategie di caching.Gli empty Process più vecchi sarannovelocemente eliminati, mentre per quelli piùrecenti è più probabile che l'utente richiami unsuo componente precedentemente visualizzato.

Android4U

Empty Process

Page 79: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Sicurezza dei Sistemi Android

Android4U

1 Miliardo di dispositivi

1.500.000Applicazioni

Più di 5.000.000 di

malware!

Page 80: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Molte applicazioni non vengono scaricare dal market standard di Android (Google Play), maanche da market di terze parti

Prezzi più vantaggiosi

Applicazioni che non si trovano sullo store ufficiale

Questo si combina col fatto che, molto spesso, l’operazione svolta più spesso per violare lasicurezza di Android è quella di prendere i permessi di root

Eseguita dallo stesso utente!

Consente di prendere il controllo completo delle funzionalità del telefono

Questi due elementi hanno portato al diffondersi di malware attraverso, principalmente, storesdi terze parti

Molti sfruttano il fatto che la vittima abbia permessi di root

Altri, anche se tali permessi non sono presenti, creano numerosi danni, soprattutto economici

Sicurezza: Introduzione

Android4U

Page 81: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Come può una applicazione Android sfruttare le risorse del sistema?Deve chiedere il permesso…

Il modello di permessi garantisce la sicurezza a livello dell’applicazione

I permessi vengono approvati/non approvati QUANDO VIENE INSTALLATA L’APPLICAZIONE

Non si può tornare indietro una volta accettati…

Le richieste vengono definite nel Manifest.xml dallo sviluppatore

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 (se, ad

esempio, ci sono applicazioni prodotte da diversi produttori che hanno bisogno di condividere le stesse risorse)

Sicurezza: Permessi

Android4U

Page 82: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Sicurezza: Permessi

Android4U

Un’applicazione malevola potrebbe richiederel’accesso a dei permessi pericolosi…

Sicuramente, se una applicazione non richiedePermessi, non potrà eseguire nessuna azione(quindi è, di fatto, innocua).Il problema è che, molto spesso, anche leapplicazioni legittime richiedono permessipericolosi (a volte inutili).

I permessi, da soli, non bastano per capire seuna applicazione è malevola o meno.

Page 83: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Applicazioni che eseguono azioni malevole

Sms a numeri premium

Furto dati personali

Telefonate “indesiderate”

Trasformazione del terminale in botnet

Più di 50 famiglie di malware diverse!

Tecniche di creazione principali

Repackaging

Update

Drive-By-Download

Altre (stand-alone)

Più di 50 famiglie di malware diverse!

Per tecniche di attivazione (BroadCast receivers)

Per tipo di attacco (payload)

Sicurezza: Malware

Android4U

Page 84: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Viene iniettato un payload maligno all’interno dell’applicazione decompressa che viene poiricompressa e firmata

Infine, viene sottomessa ad uno store (solitamente di terze parti)

Possono essere sfruttati dei permessi contenuti nell’applicazione principale (permessidangerous)

E’ la tecnica più usata per la sua semplicità e per la disponibilità di frameworks per l’attacco

AFE (Android Framework For Exploitation)

Numerosi lavori per individuare il repackaging sono stati effettuati a livello di ricercascientifica

Tecniche di Creazione - Repackaging

Android4U

Page 85: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Tecniche di Creazione - Update

Android4U

Dopo aver installato l’applicazione (legittima),vi viene chiesto di scaricare un aggiornamento

L’aggiornamento contatta un url malevolo chescarica una app malicious che viene poieseguita

N.B. A volte l’app “aggiornata” può esserecontenuta dentro l’applicazione stessa!

Questa tecnica è utilizzata da alcuni tra i malwaremobile più famosi (es. Base Bridge e Droid KungFu)

Page 86: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Stessa tecnica usata nei malware comuni

Un advertisement vi reindirizza verso un url maligno

Dall’url verrà scaricata una app maligna che verrà eseguita

Esempi malware:

GGTracker JIFake

Oltre alle tecniche viste finora, un malware può essere progettato “stand-alone”

Spyware Malware che usano interfacce simili ad applicazioni legittime (nota: NON SONO

REPACKAGED! Esempio: FakeNetflix) Applicazioni con funzionalità ibride (eseguono funzionalità legittime reali, miste a malicious)

Tecniche di Creazione – Drive-By-Download e altre

Android4U

Page 87: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Alcuni malware, per attivarsi, sfruttano ilmeccanismo dei “broadcast receivers“ e si attivanoricevendo dei segnali

BOOT_COMPLETED (Avvio del sistema) SMS_RECEIVED (Rimuove messaggi verso numeri premium in

modo che l’utente non si accorga di essere infetto) …e diversi altri!

Vediamo, ora, le principali tipologie di attacco

Root Exploits

Sfruttano dei bug nel sistema Android per ottenere permessidi Root

In questo modo, una applicazione malevola può prendere ilcontrollo del sistema

Esempio: (libsysutils, Gingerbreak, RATC, etc.) Tutti per versioni fino alla 2.3.6!

Remote Control Trasformazione dello smartphone in un bot

Utilizzato da quasi tutti i malware! Vengono utilizzati dei commandi HTTP per pilotare i bot da

alcuni server specifici A volte la comunicazione è criptata (es. PjApps)

Financial Charge

Esiste una funzione chiamata sendTextMessage (attivabile conpermesso), capace di mandare sms senza che l’utente possacontrollarlo

Ovviamente, i numeri contattati sono premium a costoaltissimo…

A volte, viene proprio effettuata una “sottoscrizione” a servizipremium

Il malware è programmato per mandare determinate “risposte” al servizioche ne comportano la sottoscrizione

Financial Charge

Molte informazioni possono essere di interesse per unattaccante: numeri di telefono (rubrica), SMS, indirizzi mail,credenziali utente

Tecniche di Attivazione e Tipi di Attacco

Android4U

Page 88: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

L’offuscamento è un insieme di strategie per rendere il codice meno leggibile quandoviene disassemblato

Agiscono principalmente sul Dalvik Bytecode (cioè, il contenuto del classes.dex)

Ma anche sul Manifest.xsml

Queste tecniche vengono usate per evadere anche gli antivirus che si basano sulbytecode o sul Manifest per individuare gli attacchi

Offuscamento

Android4U

Page 89: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Android è un settore molto “ricco” dal punto di vista della sicurezza.

E’ la piattaforma mobile preferita per i malware

Il loro numero di malware è molto vasto!

E gli Antivirus commerciali si stanno evolvendo…

La ricerca scientifica è molto attiva da questo punto di vista

Numerose tecniche di analisi per applicazioni Android sono state sviluppate

E’ un settore, perciò, in continua evoluzione!

Sicurezza: Conclusioni

Android4U

Page 90: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Approcci allo sviluppo di App

Android4U

Page 91: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● 1996● Palm OS

Windows CE●

● 2000● Symbian

Windows Pocket PC●

● 2006● Java ME

Fino ai primi anni 90 non si puòparlare di piattaforme ma di Sistemi Embedd

Android4U

Piattaforme del passato

Page 92: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Windows Phone

● iOS

● Android

● Blackberry

Attualmente le più diffuse piattaforme per dispositivi mobili sono:

Android4U

Piattaforme attuali

Page 93: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Android4U

Mercato Italia 2013-2014

Page 94: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Source: http://www.primaonline.it/

Mercato Italia 2014-2015

Android4U

Page 95: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

fonte: idc.comAndroid4U

Mercato mondiale 2011-2015

Page 96: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Mercato 2015

Android4U

Page 97: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Source: http://endeavour.it/

Frammentazione Android

Android4U

Page 98: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● I telefoni Blackberry di RIM (Research-In-Motion) sono prodotti diffusi da anni nell'ambito enterprise.Sono specializzati nella gestione della postaelettronica in modalità ”push”.Sebbene siano stati considerati prodotti all'avanguardia, sono sempre stati utilizzati solo nell'ambito aziendale e non hanno quindi avuto una grande diffusione nel mercato consumer che garantisce i volumi più elevati.

Android4U

Blackberry

Page 99: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• Di conseguenza nei prossimi anni la vera lotta tra i sistemioperativi per smartphone avverrà fra tre grandi concorrenti:Windows Phone, iOS e Android.

• Dietro questi sistemi operativi si celano i colossi del mondo IT,ovvero Microsoft, Apple, Google, Samsung.

Android4U

Sistemi operativi per smartphone

Page 100: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• Per tutte le piattaforme prese in considerazione l'SDK che permette lo sviluppo di applicazioni è liberamenente disponibile.

• Riguardo ai linguaggi di programmazione da adoperare, per Windows Mobile è possibile utilizzare indifferentemente C++,C# e VB.NET.

• Per iOS si usa Objective-C.

• PerAndroid e BlackBerry si usa Java.

Android4U

Confronto tra SO: strumenti di sviluppo

Page 101: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

● Open Source – Linux based

● Open Source – Linux based

● Closed Source, Cloud based –Android Fork

Android4U

Nuove piattaforme mobile

Page 102: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

• Come sviluppare?

Native

Web App -> Web View

Cross Platform(Apache Cordova - Titanium)

Hybrid

•Tempo•Costo•Conoscenza ambiente•Funzionalità•Qualità

Approcci allo sviluppo di App

Android4U

Page 103: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

S.O. e linguaggiiOS: Objective-C Android: JavaWindows Phone: Silverlight, .Net Framework C#

App native

Android4U

Applicazione creata per un determinato dispositivo e sviluppata in linguaggi diprogrammazione specifici per ogni sistema operativo mobile.

Page 104: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

App native – Vantaggi e svantaggi

Android4U

Vantaggi• Accesso completo a tutte le funzionalità native del device• User-Experience: interfacce utente ottimizzate• Distribuzione: maggiore visibilità mediante Store• Modalità offline

Svantaggi• Portabilità• Flessibilità: aggiornamenti via Store

Page 105: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

HTML5 + CSS + Javascript

Sencha TouchjQuery MobileThe-M-ProjectDaVinci StudioWinkKendo UI

Alcuni Framework

WebApp

Android4U

Le mobile web application sono applicazioni Internet-enabled che possono essere fruite daun tablet o uno smartphone. Sono accessibili tramite browser del dispositivo mobile e nonhanno bisogno di essere scaricate e installate sul dispositivo.

Page 106: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

WebApp – Vantaggi e svantaggi

Android4U

Vantaggi• Portabilità• Distribuzione: accesso mediante indirizzo web• Spazio utilizzato

Svantaggi• Accesso ridotto alle funzionalità

native del device• User-Experience dipende dal browser• Mancanza dello Store• Prestazioni

Page 107: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

App e WebApp - utilizzo

Android4U

Page 108: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Il sogno del "code one, run everywhere"

Oltre ad una serie di template di progetto per i vari ambienti di sviluppo,fondamentalmente è costituito da una libreria Javascript che fa da bridge trail nostro codice in pagina e le funzionalità native del telefono, dandoci difatto la possibilità di accedere a funzionalità native del sistema e deldispositivo, come i contatti, il GPS o la fotocamera.

Alcune soluzioni:Apache Cordova Appcelerator Titanium Marmalade SDK

App ibride

Android4U

• L’approccio ibrido appare come un giusto compromesso tra sviluppoweb based e native app in quanto permette l’accesso e il controlloall’hardware sviluppando però l’essenza dell’applicazione in linguaggicome HTML5, CSS e Javascript.

• Una hybrid application è in sostanza un contenitore sviluppato nellinguaggio destinato ad una specifica piattaforma che però sfrutta, al suo interno, funzioni tipicamente legate al normale sviluppo web.

A cosa servono i framework?

Page 109: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

App ibride – Vantaggi e svantaggi

Android4U

Vantaggi• Ingloba in sé tutti gli aspetti positivi delle altre due tipologie di App; su tutti:

1.Realizzazioni di app multi-piattaforma, 2.Gestione di interfacce come le web app,3.Controllo e interazione col device.

Svantaggi• Perdita Look & Feel• Rischi pubblicazione• Minore fluidità• Debug ed errori

Page 110: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Confronto tra le caratteristiche delle mobile application

Android4U

Page 111: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Confronto tra le caratteristiche delle mobile application

Android4U

Page 112: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Scelta approccio di sviluppo

Android4U

Come sapere quale tipologia di App scegliere per la propria attività

• A chi si rivolge l’App?• Cosa deve poter fare l’App?• Quanto sono disposto ad investire?• La nostra App richiede caratteristiche particolari di interazione col

device?• La nostra App di fatto è un elenco di contenuti categorizzati e

navigabili?

Page 113: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Non focalizzarsi su una sola piattaforma!

Blackbarry è passato dall’essere il più diffuso, alla quasi completa scomparsa!

Scelta approccio di sviluppo

Android4U

Page 114: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Scelta approccio di sviluppo

Android4U

Sviluppo Multi-piattaformaRiduzione di costi e tempi

Linguaggi di programmazione comuni

Le hybrid app stanno diventando un ottimo compromesso per chi è interessato ad uno sviluppo diapplicazioni che operino in logica multipiattaforma a ridotti costi di sviluppo e manutezione.Se questa differenza dovesse continuare, secondo un recente studio di Gartner, entro il 2016 siarriverà ad una situazione in cui oltre il 50% delle app saranno sviluppate in modalità ibrida.

Page 115: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

App ibride: il framework Apache Cordova

Android4U

Page 116: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Apache Cordova

Android4U

Apache Cordova è una piattaforma che consente di creare applicazioni mobile native utilizzando HTML, CSS e JavaScript mediante l’approccio “Write once, run anywhere” (WORA)

Page 117: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Apache Cordova: Storia

Android4U

• Pensato e realizzato da Nitobi Software ad un evento iPhoneDevCamp con il nome di PhoneGap.• Open-source & free software dall’inizio (MIT License), ora licenza Apache.

• Nitobi viene acquisita da Adobe nell’ottobre del 2011. • Il codice di PhoneGap entra quindi a far parte della Apache Software Foundation inizialmente con il

nome di Apache Callback e successivamente Apache Cordova.• Adobe continua a distribuire la sua Build con il nome di PhoneGap.

Page 118: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Apache Cordova: Architettura

Android4U

Page 119: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Apache Cordova: Funzionamento

Android4U

Apache Cordova / PhoneGap Esempio di architettura diun’app con PhoneGap

Page 120: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Apache Cordova: Interfaccia Utente

Android4U

• The User Interface for Apache Cordova applications is created using HTML, CSS, and JavaScript.

• The UI layer is a web browser view that takes up 100% of the device width and 100% of the device height.

• The web view used by application is the same web view used by the native operating system

• iOS: Objective-C UIWebView class• Android: android.webkit.WebView• WP7: WebBrowser• WP8: WebBrowser control (Internet Explorer 10)• BlackBerry: WebWorks framework

Page 121: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Apache Cordova: API

Android4U

• Provides an application programming interface (API) • enables you to access native operating system functionality using

JavaScript.• APIs for Accelerometer, Camera, Compass, Media, FileSystem, etc• Extendable using native plug-in

• docs.phonegap.com

Cordova Application

Cordova JavaScript APIand

Cordova Native Library Native API

Page 122: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Apache Cordova: Plugin e Piattaforme supportate

Android4U

AccelerometerMonitor the motion sensor on the device.

CameraTake pictures with the device cameraallow the user to select images from their photo library on the device.

CaptureCapture video and still images from the camera, and audio from the microphone.

CompassGive users of your app some direction.

ContactsSearch and Create contacts in the user’s address book.

FileLow level read and write access to the file system. Upload and download files from a web server.

GeoLocationMake your app location aware.

MediaPlay and record audio files.

NetworkMonitor the device connections

NotificationAccess to vibration, beep and alerts.

StoragePersistent data store in WebStorage.

Updated list:http://wiki.apache.org/cordova/PlatformSupport

Page 123: Android4U - StudentIngegneria · o. nCreate(Bundle): e' invocato quando l'activity viene avviata per la prima volta. Il. Bundle savedInstanceState. serve per riportare l'Activity

Apache Cordova: Strumenti di sviluppo

Android4U

• Tools for development• Any HTML & JS editor• Platform SDK e.g. Android SDT, Android SDK, BB SDK, Xcode, Visual Studio Mobile.• Platform Emulator (usually provide along with SDK)• JS/HTML GUI Mobile framework e.g. JQuery, Sencha Touch, dojo Mobile• Browser e.g. Firefox with Bugzilla extension, Chrome Browser

…Xcode Android SDK

Eclipse ADT Plug-inBB Java Eclipse Plug-inRipple

Visual Studio, Windows Phone Dev Tools

Use platform SDK to develop application for each target platform