Introduzione ad Android

Slides:



Advertisements
Presentazioni simili
1 Introduzione ai calcolatori Parte II Software di base.
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A1 Introduzione a Java.
Android A. Ferrari.
Recupero debito quarto anno Primo incontro
Applet Java.
Informatica Recupero debito quarto anno Terzo incontro.
Sistemi Operativi Menù: 1) Introduzione al sistema operativo
CONOSCIAMO IL WINDOWS '95.
Massa Laura Mela Enrica
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
NESSUS.
JavaScript Laboratorio di Applicazioni Informatiche II mod. A.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Introduzione a Java: primo programma, installazione dellambiente di sviluppo, compilazione.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Introduzione al linguaggio Java
Perché.Net e non più COM/DCOM ? Superamento dei problemi di COM: Richiede una infrastruttura "non semplice" da ogni applicazione (ad esempio Class Factory.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Primi esempi di interfacce grafiche con Android
CAPITOLO 1 JAVA: UN TUFFO NEL LINGUAGGIO E NELL'AMBIENTE.
© CEFRIEL Ricettario dei principali pattern GoF Docente: Gabriele Lombardi
© CEFRIEL Concorrenza (cenni) Docente: Gabriele Lombardi
Windows Sistema operativo con interfaccia grafica per PC IBM compatibili (varie versioni dal 95) La gestione dei file viene fatta secondo le modalità.
SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (alla lettera, ferramenta). La struttura.
Struttura di un progetto eclipse
Google maps.
Argomenti della lezione
C# LE BASI 2007 Prima lezione - Introduzione.
Android questo sconosciuto … Cosa sapere per poter cominciare a sviluppare Apps Cosa sapere per poter cominciare a sviluppare Apps. Alessandro Franceschetti.
Inserire il CDROM CygWin nel lettore, aprite la directory cyg e lanciare in esecuzione (con un doppio click del pulsante sinistro del mouse sulla relativa.
Java Contardi Carlo A.S. 2008/09.
UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA Facoltà di Ingegneria “Enzo Ferrari” – Sede di Modena Corso di Laurea Specialistica in Ingegneria Informatica.
Introduzione alla programmazione Object Oriented
VIRTUALIZZAZIONE Docente: Marco Sechi Modulo 1.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
Installazione Come tecnico, si potrebbe aver necessità di effettuare una installazione pulita di un sistema operativo. L'esecuzione di una installazione.
Insegnamento “Tecniche audiovisive” Corso di Laurea in Ingegneria delle Comunicazioni Symbian Marco Teodori Assistente Ricercatore - Fondazione Ugo Bordoni.
Astrazione procedurale ed eccezioni
Introduzione a Windows Lezione 2 Riccardo Sama' Copyright  Riccardo Sama'
Un ambiente di sviluppo User Friendly per Java
Programmazione ad oggetti
Sommario Cartelle Gestione delle risorse Manifest dell’applicazione
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Introduzione a Javascript
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Progetto di Ingegneria del Web Anno Accademico 2007/2008 Stefano Pigiani Bruno Ricci Marco Ruzzon.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
I Sistemi Operativi. Definizione Per Sistemi Operativi (di seguito SO) si intendono quei pacchetti software, a loro volta costituiti da più sottoprogrammi.
+ Windows Phone : introduzione e configurazione dell’ambiente Nicolò Sordoni.
Corso di programmazione di sistemi mobile 1 1 Android Architettura, ambiente di sviluppo e struttura di un progetto.
Programmazione orientata agli Oggetti Introduzione a Java.
Corso di programmazione di sistemi mobile 1 1 Android Laboratorio Primo Progetto, Toast.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT M APPE.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Introduzione ad Android Docente: Gabriele Lombardi lombardi@dsi.unimi.it © 2012 - CEFRIEL

The present original document was produced by CEFRIEL and the Teacher for the benefit and internal use of this course, and nobody else may claim any right or paternity on it. No right to use the document for any purpose other than the Intended purpose and no right to distribute, disclose, release, furnish or disseminate it or a part of it in any way or form to anyone without the prior express written consent of CEFRIEL and the Teacher. © copyright Cefriel and the Teacher-Milan-Italy-23/06/2008. All rights reserved in accordance with rule of law and international agreements. © 2012 - CEFRIEL

Sommario Perché Android Strumenti Background Java Primo progetto SLIDE CONTENUTO Perché Android Problematiche delle apps su mobile.. Android Strumenti Setup dell’ambiente di sviluppo/emulazione Background Java Un po’ di ripasso… soprattutto sulla sintassi Primo progetto Creazione, test, analisi Sul dispositivo reale Installazione, marketplace © 2012 - CEFRIEL

«Picard usa Android» SMARTPHONES © 2012 - CEFRIEL

Evoluzione dei dispositivi mobili: Era del mobile Evoluzione dei dispositivi mobili: furono telefoni.. Ora "a volte" sono anche telefoni; da dispositivi "sfortunati" (schermi microscopici a cristalli liquidi, tastiera minimale).. ..a dispositivi «smart» e «phone», con schermo (multi)touch, rete, GPS, … da sistemi embedded custom scritti dalle aziende produttrici di dispositivi mobili… ..ad aziende che si preoccupano di supportare un sistema operativo oramai standard de-facto (uno dei). Il mobile, i tablet, i futuri dispositivi di uso quotidiano, i «Very personal computers»… …promettono di divenire gli strumenti più diffusi per la grande massa.. Avendo già oggi enorme diffusione. © 2012 - CEFRIEL

Dal punto di vista dello sviluppatore Cha sviluppato per dispositivi mobili di "vecchia" generazione sa che: il panorama dei dispositivi mobili è enorme, testare una applicazione su tutti è un lavoro titanico, l’hw è svariato, ma anche i so/framework sono tanti e molto diversi da utilizzare per sviluppare applicazioni, il supporto a java (JME) da parte del mobile ha permesso l’esistenza di applicazioni (quasi) portabili.. ..ma non del tutto e non sufficientemente robuste. Cosa serve? un sistema operativo unico, modulare, customizzabile dai produttori di dispositivi, che supporti tutte le periferiche presenti su mobile, robusto, aperto, … un framework standard di sviluppo che permetta la realizzazione di applicazioni portabili e "controllate". © 2012 - CEFRIEL

Struttura di Android © 2012 - CEFRIEL

Cosa fa Android Ci fornisce: Prevede la realizzazione/utilizzo di: un framework comune programmabile in un linguaggio di programmazione unico e portabile, strumenti di sviluppo (SDK) e di emulazione standard, librerie di utilità comune contenenti API di base, una «struttura» per le apps «incasellandole in un framework comune», non disomogenee tra loro, strumenti per gestire periferiche, comunicazione, sicurezza, storage, interazione fra apps… Prevede la realizzazione/utilizzo di: Attività  porzioni di GUI Servizi  attività "di background" Persistenza  astrazione sulla persistenza dei dati Notifiche  da mostrare all’utente permettendo interazione © 2012 - CEFRIEL

Cosa ci viene fornito Storage: Networking: Multimedia: strumenti di gestione della persistenza, alcuni dati fissi possono essere incorporati nell’applicazione come risorse, altri possono essere scritti nel dispositivo, su sd-card o quant’altro. Networking: accesso alla rete indipendente dal canale (WiFi, GPRS, …), a qualunque livello (socket utilizzabili). Multimedia: dipendono dalle capability del dispositivo.. Che possono essere verificate per adattare l’app. Location access: tramite GPS o IP, per identificare la posizione del dispositivo nel globo, si vedano navigatori, gmaps, … Phone services: accesso alle funzionalità del telefono come la gestione di chiamate, SMS, … © 2012 - CEFRIEL

Java è un linguaggio portabile: Background Java Java è un linguaggio portabile: il codice sorgente (alto livello di astrazione) viene compilato in linguaggio macchina (basso livello di astrazione, bytecode) per una macchina virtuale il cui microprocessore non esiste; una macchina virtuale (JVM) interpreta il bytecode per la CPU su cui la JVM viene eseguita; il Just In Time compiler (JIT) traduce «al volo» (e ottimizza) il bytecode, fornendo performance migliori rispetto alla compilate per CPU «generiche». Java è Object Oriented: esistono i concetti di classe, interfaccia, oggetto, enumerazione, annotazione, package, polimorfismo riferimento, composizione, meccanismo, pattern, … © 2012 - CEFRIEL

Riguardiamo assieme alcuni concetti Classi, classi astratte, interfacce: diversi livelli di astrazione: classi  implementazione concreta classi astratte  implementazione parziale interfacce  dichiarazione di capacità beata ignoranza… e indipendenza: in una architettura SW le dipendenze devono essere minimizzate. un occhio all’ereditarietà e al polimorfismo: ereditarietà = riciclo del codice polimorfismo = riciclo con modifiche Facciamo un esempio assieme! © 2012 - CEFRIEL

Classi innestate e anonime A cosa serve il class nesting? In qualunque architettura SW viene l’ora di implementare una classe concreta, solo metodi e niente classi innestate porta al procedurale! Le classi anonime permettono il lambda-calcolo: porzioni di codice viene passato come parametro. Che differenza c’è tra nesting e nesting statico? il nesting statico altera il naming e permette hiding; Il nesting mantiene riferimento all’oggetto di classe esterna generatore dell’istanza (ci può accedere). In quale caso si trovano le classi anonime? nesting NON statico, possono accedere agli attributi della classe esterna e alle variabili locali final. Vediamo un esempio di nesting NON statico. © 2012 - CEFRIEL

Esempio di nesting NON statico L’albero di mele può produrre mele: le mele SONO SUE e non di un altro albero; le mele sanno a che albero appartengono; senza albero non si producono le mele. public class AlberoDiMele { private String varieta; public class Mela { public String getVarieta() { return varieta; } } public AlberoDiMele(String v) { varieta = v; } public Mela getMela() { return new Mela(); } public String getVarieta() { return varieta; } public static void main(String[] args) { AlberoDiMele adm = new AlberoDiMele("renetta"); AlberoDiMele.Mela mela = adm.getMela(); AlberoDiMele.Mela mela2 = adm.new Mela(); } La classe Mela è innestata NON statica L’albero crea le mele con l’operatore new Gli altri creano mele tramite un albero usando l’operatore: albero.new Mela() La mela si riferisce al proprio albero dicendo AlberoDiMele.this © 2012 - CEFRIEL

Classi astratte e interfacce permettono di definire un’implementazione parziale; consentono di forzare il polimorfismo; tramite l’ereditarietà divengono uno strumento formidabile per il riciclo del codice. Interfacce: NON descrivono l’implementazione ma solamente l’interfaccia di chi dichiara di implementarle; rappresentano delle capacità o un tipo; clonabile, eseguibile, ascoltatore, esecutore, … Come scegliere? Separare i concetti astratti dalle problematiche implementative concrete, utilizzare il proprio framework per poterne valutare la correttezza. © 2012 - CEFRIEL

Cenni sull’XML eXtendible: Markup: Language: l’XML è un meta-linguaggio, è quindi possibile definirne istanze proprietarie che lo “estendano”; nuovi tag e nuovi attributi possono essere definiti, assieme alle regole grammaticali per utilizzarli. esempio: XHTML e RSS sono due diverse applicazioni XML, con scopi e gramatiche differenti. Markup: “come per le bustine da congelatore”, l’XML ha lo scopo di contenere e conservare… dati etichettati; i tag sono i contenitori, gli attributi sono le etichette. Language: sarebbe più corretto meta-language, solo la sintassi è definita, la grammatica dei tag è definita nelle istanze. © 2012 - CEFRIEL

Cenni sull’XML Un documento XML è: Un esempio: un albero radicato in un nodo di tipo Document; formato differenti tipologie di nodi; la radice deve contenere uno e un solo sotto-nodo di tipo di tipo Element (spesso chiamati tag); case-sensitive e normalmente indipendente dall’indentazione (eccetto i nodi di testo); ma soprattutto… è testo “umanamente” leggibile! Un esempio: Direttiva <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <vcards> <vcard surname="Lombardi" name="Gabriele"> <addresses> <address>ilgabbio@yahoo.it</address> <address>lombardi@dsi.unimi.it</address> </addresses> <telephone> <number>0234567890</number> <number>+39340340340</number> </telephone> </vcard> <vcard surname="test" name="test"/> </vcards> Root element Element con attributi Element connsotto-element Element con testo Chiusura di un element Element vuoto (con attributi) © 2012 - CEFRIEL

Come iniziare a sviluppare Strumenti: kit di sviluppo applicazioni in java (JDK JSE), un ambiente di sviluppo (noi useremo NetBeans), Android SDK tools (gestione SDK e AVD), SKD per una specifica piattaforma Android, da installare tramite SDK Manager dei tools, Android Virtual Devices da installare tramite AVD Manager (emulazione dispositivi hardware), plug-in per l’ambiente di sviluppo (ADT per Eclipse, Android di kenai per NetBeans), eventuali altri plug-in (ad esempio per lo unit testing di applicazioni). Per iniziare: installato il SW richiesto, creare un dispositivo virtuale (e configurarne l’hardware), avviarlo (e giocarci un po’), creare un primo progetto di prova (hello world), e provarlo. © 2012 - CEFRIEL

Primo esempio: avviamo l’emulatore Schermo (touch) Periferiche di input Eventi (Intent) mostrati qui Attenzione, i dispositivi non sempre hanno la tastiera da AVD Manager, creare un dispositivo… selezionare l’hardware di interesse (periferiche come l’SD e il touch screen sono in generale utili), Start! Il dispositivo avrà a bordo un SO (Linux) e una versione di Android, nell’esempio 2.3.3. © 2012 - CEFRIEL

Creare un nuovo progetto Android in NetBeans Un primo progetto Creare un nuovo progetto Android in NetBeans installato il plugin, filenuovo progettoAndroid… …ERRORI… di già! Perché? Gli strumenti di Android autogenerano parte di codice, in particolare la classe R delle risorse (vedremo), compilare per ottenere le classi autogenerate in gen. Struttura dell’applicazione impacchettata: in un file apk.. Che è un file zip «camuffato», all’interno un android manifest in XML, la directory delle risorse con un layout in XML, le classi, le risorse, un certificato firmato per lo sviluppo, META-INF con manifest.. con l’SHA delle risorse. © 2012 - CEFRIEL

L’attività è una porzione di interfaccia utente: Un primo progetto L’attività è una porzione di interfaccia utente: public class BaseActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); } E’ una attività Alla creazione si inizializza Ha uno stato salvato e ripristinabile (vedremo) Ha una vista del contenuto attuale Usa delle risorse (???) Cosa è R??? una classe contenente sole costanti… …organizzate in una struttura gerarchica… …generata automaticamente dal contenuto di directory e file nel progetto, contenente "risorse". © 2012 - CEFRIEL

Cosa rappresenta R.layout.main??? Un primo progetto Cosa rappresenta R.layout.main??? una costante della classe R, vediamola: public final class R { public static final class attr {} public static final class layout { public static final int main=0x7f020000; } public static final class string { public static final int app_name=0x7f030000; Autogenerata, contiene identificativi numerici costanti rappresentanti risorse dell’applicazione Cosa rappresenta R.layout.main? L’aspetto grafico di una porzione di interfaccia descritto in XML <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World, BaseActivity"/> </LinearLayout> © 2012 - CEFRIEL

la generazione del codice (classe R) la compilazione del codice Un primo progetto Compilazione: Build… e lo script ant esegue: la generazione del codice (classe R) la compilazione del codice il packaging delle classi e delle risorse la firma digitale di sviluppo il packaging dell’applicazione in un file apk (android package, file zip «camuffato»). Dare un occhio a tools/ant/build.xml nell’SDK. Esecuzione: installazione nell’emulatore (deve essere avviato), esecuzione dell’applicazione con creazione attività. © 2012 - CEFRIEL

Analizziamo la struttura dell’app AndroidManifest.xml: meta-dati che descrivono l’applicazione: nome, icona, elenco delle attività, … Struttura directory: /res  risorse (immagini, layout in xml, valori, …) /gen  codice generato a partire dal contenuto di res /src  sorgenti java scritti da noi /assets  se vi serve incapsulare file custom vostri come risorse, da aprire come raw data…! Classe R: la troviamo nello stesso package della main activity; nella radice dei package troviamo R.java.d elenco di file utilizzati per produrre il contenuto della classe R © 2012 - CEFRIEL

Facciamo qualcosa di semplice Proviamo in maniera «rozza» a creare una piccola applicazione che inverte una stringa: nuovo progetto «InvertiStringhe», modifichiamo la onCreate dell’attività come segue: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); setContentView(layout); final EditText text = new EditText(this); text.setText("Ciao mondo!"); text.setEnabled(true); layout.addView(text); Button reverse = new Button(this); reverse.setText("Reverse"); layout.addView(reverse); reverse.setOnClickListener(new OnClickListener() { public void onClick(View me) { CharSequence txt = text.getText(); StringBuilder b = new StringBuilder(); for (int i=txt.length()-1; i>=0; i--) b.append(txt.charAt(i)); text.setText(b.toString()); } }); } © 2012 - CEFRIEL

In esecuzione otteniamo quanto segue: Attività Layout lineare orizzontale EditText abilitato Button con evento onClick associato Al click si inverte la stringa Cosa non va bene? molto codice da scrivere per qualcosa di semplice, logica dell’applicazione scritta assieme alla descrizione del layout grafico (quindi «incastrata»), testi scritti nel codice, devo ricompilare solo per cambiare nomi, etichette, posizioni, … Il layout DEVE essere separato dalla logica! © 2012 - CEFRIEL

Debugging e controllo: ADB Cos’è ADB? Android Debug Bridge Un tool per interagire da console con il dispositivo fisico o emulato (leggere, scrivere, intallare, …). Utilizzato principalmente per un debug veloce su dispositivi fisici (installazione molto più comoda). Già a disposizione con Android SDK (driver?) Installare i driver USB: NON lasciate che windows installi i driver per voi (non ci riuscirà) ma scaricate quelli del vostro device. Aggiungere al PATH: «…\android-sdk\platform-tools». Sul dispositivo attivate l’opzione: Impostazioni  Applicazioni  Sviluppo  Debug USB © 2012 - CEFRIEL

Debugging e controllo: ADB Un primo test da cmd: da cmd: «adb devices» List of devices attached BC76704D2B24 device notare che anche l’emulatore, se avviato, viene rilevato e può essere controllato tramite adb. Copiare file: adb push miofile percorsoSulDevice adb pull percorsoSulDevice miofile Installare applicazioni: adb –s BC76704D2B24 install –s -r miaApp.apk Installa miaApp sul dispositivo BC76704D2B24 reinstallandola (-r) e scrivendo sulla SD invece che nel telefono (-s) Accedere al sistema tramite una console (shell): adb shell  esegue /system/bin/sh, shell «base» provate con ls e cd a esplorare, ps, exit. Altre funzionalità «di rete» le scopriremo «giocando» con la rete per implementare applicazioni client/server: connessione PPP, port forwarding sul device, … © 2012 - CEFRIEL

Installiamo e proviamo l’applicazione Compilare in BetBeans per generare l’apk; da riga di comando (cmd): entrare in Code\00_overview\InvertiStringhe\bin eseguire il seguente comando adb: per installare sul device (unico): adb –d install –s –r InvertiStringhe-debug.apk per installare sull’emulatore (unico): adb –s install –s –r InvertiStringhe-debug.apk se avete più dispositivi collegati: adb -s BC76704D2B24 install -s -r InvertiStringhe-debug.apk sostituendo il seriale col vostro. Provate la vostra app!  © 2012 - CEFRIEL

I marketplace Preparazione della release: ogni applicazione installata in Android DEVE essere firmata digitalmente (automatico con chiave di debug durante lo sviluppo); generiamo una nostra chiave con: keytool -genkey -v -keystore miaChiave.keystor ci chiederà password e altre info nostre; modifichiamo ant.properties (build properties): key.store=./miaChiave.keystor key.alias=mykey usate sempre lo stesso certificato, altrimenti: gli utenti non potranno fare update a nuove versioni dell’app; applicazioni/moduli diversi non potranno girare nello stesso processo; applicazioni interagenti non potranno condividere permessi. la procedura ant usa queste info per firmare automaticamente l’applicazione, fine lavoro! ant release  il pacchetto di installazione apk viene generato  Google Play: registrarsi a https://market.android.com/publish; richiesto la prima volta un pagamento di 25$; occhio, una applicazione gratuita lo è permanentemente; possibile aggiungere screen-shot, descrizioni, … © 2012 - CEFRIEL

Da qui? Approfondiremo l’analisi della struttura del progetto e della classe R (più risorse!). Passeremo dalla gestione «programmatica» della GUI dell’ultimo esempio a MVC. Molti strumenti NON sono stati nemmeno menzionati, li scopriremo poco a poco! © 2012 - CEFRIEL