![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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/7.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/13.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/14.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/15.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/16.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/47.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/48.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/49.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/50.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/52.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/54.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/55.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/56.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/57.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/58.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/59.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/60.jpg)
<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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/61.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/62.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/63.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/64.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/65.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/66.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/67.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/68.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/69.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/70.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/71.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/72.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/73.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/74.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/75.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/76.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/77.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/78.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/79.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/80.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/81.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/82.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/83.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/84.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/85.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/86.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/87.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/88.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/89.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/90.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/91.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/92.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/93.jpg)
Android4U
Mercato Italia 2013-2014
![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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/95.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/96.jpg)
Mercato 2015
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/98.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/99.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/100.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/101.jpg)
● 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/102.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/103.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/104.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/105.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/106.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/107.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/108.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/109.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/110.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/111.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/112.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/113.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/114.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/115.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/116.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/117.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/118.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/119.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/120.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/121.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/122.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042210/5eaed334a0f4c4066c7e0bbb/html5/thumbnails/123.jpg)
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