Sviluppo di applicazioni mobili - a.a. 2012/13

Avvisi

Logistica e testi

Logistica

Libri di testo

Materiale di approfondimento

Lucidi delle lezioni

  1. Prima lezione: lucidi.
    Introduzione al corso, logistica, modalità d'esame. Breve storia di Android, stato del mercato, l'ambiente di sviluppo, dettagli sull'installazione. (Vincenzo Gervasi)
  2. Seconda lezione: prima parte, seconda parte.
    Architettura di un sistema Android: kernel, sandbox, framework. Linux, Dalvik, e la sicurezza.
    Approfondimenti sulla macchina virtuale Dalvik. (Vincenzo Gervasi)
  3. Terza lezione: lucidi.
    Struttura di un'applicazione Android (in sviluppo, in deployment, in esecuzione). Il sistema delle risorse: architettura generale, risorse alternative, esempi. AndroidManifest.xml (Vincenzo Gervasi)
  4. Quarta e quinta lezione: lucidi.
    Componenti di un'applicazione: activity, service, broadcast receiver, content provider. Comunicazione fra componenti attraverso Intent. Ancora su AndroidManifest.xml. Dettagli su Activity (prima parte). (Vincenzo Gervasi)
    Dettagli su Activity (seconda parte). Il ciclo di vita di un'activity. Salvataggio e ripristino dello stato. Salvataggio automatico dello stato della UI. (Vincenzo Gervasi)
  5. Sesta lezione: lucidi.
    Definire la UI di un'Activity. Layout & View. Interazione (con richiami sui Listener). Il sistema dei menu. Laboratorio (Vincenzo Gervasi)
  6. Settima e ottava lezione: lucidi.
    Ancora sulla UI. Scrivere proprie View; negoziazione del layout, repaint. La pipeline di rendering 2D e le classi Canvas e Paint. Un esempio completo. (Vincenzo Gervasi)
    Ancora sulla UI. ListView e DataAdapter; gestione dell'input nelle ListView. Esempio di DataAdapter custom: una semplice applicazione di Gallery. (Vincenzo Gervasi)
  7. Nona lezione: lucidi.
    Ancora sulla UI. Uso di adapter in altri ViewGroup. La classe Drawable e le sue sottoclassi (con dettagli su 9 patch). La classe WebView: uso, configurazione, specializzazione. Notifiche all'utente: Toast, Dialog, Notification bar. (Vincenzo Gervasi)
  8. Decima e undicesima lezione: lucidi.
    Tematiche di storage. Storage temporaneo: salvataggio temporaneo dello stato, Bundle e Parcelable. Storage permanente: preferenze, PreferenceScreen e PreferenceActivity; accesso al file system. (Vincenzo Gervasi)
    Accesso a database. Il DBMS SQLite e la classe SQLiteDatabase. Eseguire statement SQL. Query e la classe Cursor. Incapsulare l'accesso al database: la classe SQLOpenHelper e i pattern di progettazione relativi. (Vincenzo Gervasi)
  9. Dodicesima lezione: lucidi.
    Condivisione di dati su Android. ContentProvider e ContentResolver. Accesso a ContentProvider di sistema; il meccanismo delle URI. Scrivere ed esportare propri ContentProvider. La gestione dei permessi. (Vincenzo Gervasi)
  10. Tredicesima lezione: lucidi.
    Esecuzione in background: i Services. Ciclo di vita di un Service. Servizi bound e unbound. Esempio: il Random Music Player. (Vincenzo Gervasi)
  11. Quattordicesima e quindicesima lezione: lucidi.
    Segnalazioni broadcast; i Broadcast Receiver. Registrazione statica (in XML) e dinamica (a run-time) di un Receiver. Invio di messaggi broadcast. Le varianti con permessi, serializzazione, terminazione, raccolta risultati, persistenza. (Vincenzo Gervasi)
    Multithreading. Ripasso / anticipazione sul multithreading in Java: Thread e Runnable, controllo di thread, meccanismi di notifica (wait/notify) e serializzazione (synchronized). La classe AsyncTask. Altri approcci all'esecuzione asincrona: post() e runOnUiThread(). Gli allarmi. Il servizio AlarmManager e le varie tipologie di allarmi (con wake-up, ripetuti, imprecisi). (Vincenzo Gervasi)
  12. Sedicesima lezione: lucidi.
    Casi tipici di programmazione in background: uso di AsyncTask per il caricamento di immagini da web; i Loader e l'uso di cursori asincroni; uso del servizio DownloadManager e del ContentProvider associato. Esempi. (Vincenzo Gervasi)
  13. Diciassettesima lezione: lucidi.
    Tematiche di sicurezza. Il modello di sicurezza di Android (con approfondimenti sulla parte kernel). Tecniche di priviledge escalation; alcuni casi classici: Exploid, RageAgainstTheCage, KillingInTheName, ZimperLich, GingerBreak. Il processo di installazione remota via Google Play e relative debolezze. Persistenza degli exploit. (Vincenzo Gervasi)
  14. Diciottesima lezione: lucidi.
    Accesso ai sensori. Sensor discovery; i diversi tipi di sensori; ottenere le letture tramite callback. Pooling dei SensorEvent e cautele relative. (Vincenzo Gervasi)
  15. Diciannovesima e ventesima lezione: lucidi..
    Servizi di localizzazione. LocationManager e LocationProvider; processo di discovery; uso di listener e intent; strategie per la selezione delle locazioni; esempi; Proximity Alert. Aspetti etici e giuridici del tracking. Geocoding; forward e reverse geocoding; l'oggetto Geocoder; la classe Address; esempi. (Vincenzo Gervasi)
    Le API di Google Maps. MapView e Maps API v1. Google Play Services e Maps API v2. Approfondimento sui Fragment. L'oggetto GoogleMap e il controllo della camera. Uso di Marker. (Vincenzo Gervasi)
  16. Ventunesima lezione: lucidi.
    Tecnologie di rete. Networking TCP/IP in Java. Il ConnectivityManager. Bluetooth: introduzione, discovery, pairing, comunicazioni. Wi-Fi Direct: design del framework, discovery, connessione, trasferimento. (Vincenzo Gervasi)

Esami e progetti

Modalità d'esame

Gli appelli d'esame si tengono presso lo studio del docente, stanza 333 del Dipartimento di Informatica. Gli studenti devono aver consegnato, prima della data fissata, la documentazione e il codice (sorgente ed eseguibile) del loro progetto, tramite una email a gervasi@di.unipi.it.

Lo studente dovrà presentarsi fornito di computer portatile su cui è installato l'ambiente di sviluppo utilizzato, con il progetto in forma sorgente. L'esame consisterà in una presentazione/dimostrativo dell'applicazione, a cura dello studente, e di un walkthrough del codice, accompaganto da domande di natura teorica.

Gli studenti che non disponessero di un computer portatile adatto, possono contattare il docente con sufficiente anticipo per organizzare modalità alternative (per esempio, lo svolgimento dell'esame presso un laboratorio didattico).

Date degli appelli

  1. 14 Gennaio 2013 ore 11:00
  2. 8 Febbraio 2013 ore 11:00
  3. 4 Giugno 2013 ore 11:00
  4. 26 Giugno 2013 ore 11:00
  5. 24 Luglio 2013 ore 11:00
  6. 16 Settembre 2013 ore 11:00

Progetti approvati

StudenteProgettoPrescrizioni
Davide AnzaloneMenu elettronicoSenza pagamenti, senza editing online dei piatti
Matteo MazzaSudokuGrafica ed effetti da videogame
Daniele Di SarliSMS Auto-responderInterfaccia di editing delle regole accurata
Antonio PandolfiWidget on/off datiNon approvata (troppo semplice)
Gioacchino MazzurcoRetroShare 
Giacomo DonatiWaypoint ManagerDifferenziarlo da altre app analoghe già esistenti
Markus WindeggerSASAbusNon approvata (l'applicazione è già esistente, in base all'orientamento corrente del CCL non può essere accettata come prova d'esame)
Michael SanelliLabirinto 3DNon approvata (troppo complessa)
Dario AntonacciGeoReminderGeneralizzazione degli eventi e delle azioni, in stile IFTTT (è accettabile che i trigger siano limitati alla posizione geografica)
Francesco DonzelloIndovina l'immagineSi raccomanda di non investire troppo sforzo nella parte server
Alessandro Di PrimaHant Hunt 
Francesco RuvoloMobile AdminLa UI non deve essere "in stile desktop/web"
Matteo NardiRicettarioDeve includere invito a cena per tutto il corso in caso di esito positivo
Andrea CardaciAriannaAggiungere una componente audio
Luigi De BianchiGestione mazzi MTGCurare particolarmente la UI e la condivisione
Michael SanelliQuiz multiplayerCurare particolarmente la UI e la gestione delle sessioni multiplayer
Markus WindeggerInfoBus
Piero SolinasLettore fumetti
Giuseppe Lo ConteIndovina chi?