Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e...

40
Piattaforme di Sviluppo - Sistemi Mobili M 1 Sistemi Mobili M Sistemi Mobili M Università di Bologna CdS Laurea Magistrale in Ingegneria Informatica II Ciclo - A.A. 2011/2012 Corso di Sistemi Mobili M (6 cfu) 04 – Piattaforme di Sviluppo (e non solo): Panoramica, J2ME e Android Docente: Paolo Bellavista [email protected] http://lia.deis.unibo.it/Courses/sm1112-info/ http://lia.deis.unibo.it/Staff/PaoloBellavista/ Piattaforme di Sviluppo - Sistemi Mobili M 2 Panoramica su Panoramica su Piattaforme di Sviluppo Piattaforme di Sviluppo Molte soluzioni possibili oggi per fare sviluppo di middleware e applicazioni per sistemi mobili. Perché? Eterogeneità e frammentazione Scelta market-driven Caratteristiche molto differenziate dispositivi disponibili, “piattaforme” e requisiti applicativi Pletora di soluzioni: Symbian, Palm, RIM, Maemo/Meego, iOS, Android, Java Mobile Edition (J2ME), .NET Compact Framework (CF), Python, Lazarus, Brew, Flash Lite, Web runtime environment (micro- browser, HTML5, XHTML/CSS, JavaScript, Mobile Ajax, …), … Proviamo a mettere un po’ d’ordine… Quali livelli coinvolti?

Transcript of Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e...

Page 1: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 11

Sistemi Mobili MSistemi Mobili M

Università di BolognaCdS Laurea Magistrale in Ingegneria Informatica

II Ciclo - A.A. 2011/2012Corso di Sistemi Mobili M (6 cfu)

04 – Piattaforme di Sviluppo (e non solo):Panoramica, J2ME e Android

Docente: Paolo [email protected]

http://lia.deis.unibo.it/Courses/sm1112-info/

http://lia.deis.unibo.it/Staff/PaoloBellavista/

Piattaforme di Sviluppo - Sistemi Mobili M 2

Panoramica su Panoramica su Piattaforme di SviluppoPiattaforme di Sviluppo

Molte soluzioni possibili oggi per fare sviluppo di middleware e applicazioni per sistemi mobili. Perché?

Eterogeneità e frammentazione

Scelta market-driven

Caratteristiche molto differenziate dispositivi disponibili, “piattaforme” e requisiti applicativi

Pletora di soluzioni: Symbian, Palm, RIM, Maemo/Meego, iOS, Android, Java Mobile Edition (J2ME), .NET Compact Framework (CF), Python, Lazarus, Brew, Flash Lite, Web runtime environment (micro-browser, HTML5, XHTML/CSS, JavaScript, Mobile Ajax, …), …

Proviamo a mettere un po’ d’ordine…

Quali livelli coinvolti?

Page 2: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 3

Panoramica su Panoramica su Piattaforme di SviluppoPiattaforme di Sviluppo

Livello di sistema operativo (ad es. Android è un sistema operativo?)

Livello di supporto runtime all’esecuzione (framework, container, macchine virtuali, …)

Livello di supporto allo sviluppo - SDK (librerie, componenti di supporto, container, …)

Ancora una volta livelli NON con contorni netti e NON facilmente separabili…

Prevalentemente a livello di SO: Symbian, Palm, RIM (BlackBerry), Maemo/Meego, iOS, …

Prevalentemente a livello di supporto runtime all’esecuzione: Kernel-based Virtual Machine (KVM) o Dalvik VirtualMachine per Java, Common Language Runtime (CLR) per .NET, Flash Lite, Web runtime environment

Piattaforme di Sviluppo - Sistemi Mobili M 4

Panoramica su Panoramica su Piattaforme di SviluppoPiattaforme di Sviluppo

Prevalentemente a livello di supporto allo sviluppo: mondo J2ME, mondo .NET CF, ActionScript per Flash Lite, mondo Android, Web runtime environment

Due principali categorie di approccio:

Basato su applicazioni native

Basato su integrazione con Web (specie vedi sforzo di standardizzazione legato a HTML5)

Partiamo dal primo approccio, scegliendo di dare un’occhiata a 4 famiglie di soluzioni principali: J2ME, .NET CF, Flash Lite, Android

Page 3: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 5

Panoramica su Panoramica su J2ME, .NET CF, Flash Lite, AndroidJ2ME, .NET CF, Flash Lite, Android

Piattaforme di Sviluppo - Sistemi Mobili M 6

J2ME in una SlideJ2ME in una Slide

Edizione del mondo Java per dispositivi a risorse limitate (smart phone, set-top box) – http://java.sun.com/j2me/

Bytecode messo in esecuzione su Kernel-based VirtualMachine (KVM), indipendenza da SO

Concetto di configurazione: minime caratteristiche VM e insieme librerie supporto per una famiglia orizzontale di dispositivi

Connected Limited Device Configuration (CLDC)

Concetto di profilo: librerie specializzate per le caratteristiche di una specifica tipologia/classe di dispositivi

Mobile Information Device Profile (MIDP), sopra CLDC

Applicazioni Java su CLDC/MIDP vengono chiamate MIDlet

Avete già visto che cosa si intende per Java Community Process (JCP) e Java Specification Request (JSR)?

Page 4: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 7

.NET CF in una Slide.NET CF in una Slide

Sottoinsieme di piattaforma .NET (circa 30% classi e

funzionalità) per dispositivi con MS Windows Mobile

uso di Common Language Runtime (CLR); in linea di

principio, supporto per differenti SO e differenti linguaggi (ancora solo WinMobile, C# e VB.NET)

Idea di transizione morbida da sviluppo applicazioni desktop a sviluppo per mobile, comunque spinto da un grande vendor e comunità di sviluppatori

Costo correlato a esecuzione di codice intermedio(Common Intermediate Language – CIL)

Costo relativamente alto in termini di memory footprint

Non ha problemi di “frammentazione” come nel caso J2ME

Piattaforme di Sviluppo - Sistemi Mobili M 8

Adobe Flash Lite in una SlideAdobe Flash Lite in una Slide

Tecnologia proprietaria popolare per sviluppo di contenuto multimediale e giochi

Di base, supporto a grafica vettoriale e animazioni; aggiunta di logica applicativa e di presentazione tramite linguaggio ad-hoc, chiamato ActionScript, che esegue in un supporto runtime

Transizione morbida per sviluppatori esperti in Flash

Soluzione incompleta per applicazioni stand-alone full-fledged; soluzione non-general purpose

Integrazione forte con caratteristiche di basso livello dei dispositivi, con conseguente buona efficienza

Performance limitate per costo gestione grafica vettoriale

Vedi tentativo analogo del mondo Java con JavaFX Mobile –http://javafx.com

Page 5: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 9

Android in una SlideAndroid in una Slide

Lanciato da Google nel 2007 come piattaforma Apache free-software, basato su LinuxApplicazioni sviluppate in linguaggio Java e compilate in Dalvik Executable format (DEX – bytecode di tipo custom, ad es. più compatto di usuali .class)

Sottoinsieme abbastanza ampio di J2SE + ricca libreria di funzionalità di supporto (Android SDK) a disposizione della comunità di sviluppatori

Gestione touch screen, sensori locali (accelerometri, GPS, …), grafica 3D, supporto per location-based service, …

Anche qui problemi di frammentazione fra versioni diverse di SO e utilizzo di estensioni dello stack di supporto (data la apertura della soluzione)

Piattaforme di Sviluppo - Sistemi Mobili M 10

Un Confronto su unUn Confronto su un’’Applicazione GiocattoloApplicazione Giocattolo((GavalasGavalas etet al, IEEE Software, 2011)al, IEEE Software, 2011)

Page 6: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 11

Un Primo ConfrontoUn Primo Confronto

Piattaforme di Sviluppo - Sistemi Mobili M 12

Un Primo ConfrontoUn Primo Confronto

Page 7: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 13

Un Primo ConfrontoUn Primo Confronto

Piattaforme di Sviluppo - Sistemi Mobili M 14

Un Primo ConfrontoUn Primo Confronto

Page 8: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 15

Un Primo ConfrontoUn Primo Confronto

Piattaforme di Sviluppo - Sistemi Mobili M 16

ScendiamoScendiamo maggiormentemaggiormente nelnel dettagliodettaglio::

Java 2 Micro EditionJava 2 Micro Edition

In termini generali, diverse edizioni di “distribuzioni” Java

Ruolo centrale dello stackKVM + CLDC + MIDP

Page 9: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 17

JSR 248: JSR 248: Mobile Service Mobile Service ArchitectureArchitecture (MSA)(MSA)

17

In realtà, situazione piùcomplicata e articolata

Importanti problemi di

frammentazione

MSA, in due versioni:

full (17/14) o subset (8/9)

Piattaforme di Sviluppo - Sistemi Mobili M 18

J2ME: J2ME: ConfigurazioniConfigurazioni e e ProfiliProfili

Una configurazione definisce una piattaforma minimaper un raggruppamento orizzontale di dispositivi

Requisiti analoghi su memoria e capacità computazionali

Definisce caratteristiche linguaggio Java e virtual machinedisponibile su tale gruppo di dispositivi

“A Configuration is a specification that defines a minimum Java Platform functionality for a family of devices. It defines the minimum number of Java libraries, VM capabilities, Security specification, and a Generic Connection Framework.”

Profilo come insieme di API aggiuntive che estendono unaconfigurazione con capacità utili per un gruppo specificodi dispositivi

“A Profile is a collection of Java APIs that supplement a Configuration to provide capabilities for a specific device group or market type.”

Page 10: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 19

J2ME: J2ME: ConfigurazioniConfigurazioni DisponibiliDisponibili

Connected Device Configuration (CDC)Tipicamente per dispositivi con maggiori risorse computazionaliche non low-end device come telefoni (ancora valido oggi?)Ad esempio set-top box, inizialmente alcuni tipi di PDA, …

Connected, Limited Device Configuration (CLDC)Per dispositivi con risorse particolarmente limitate

Macchina virtuale per CLDC: Sun’s Kilo Virtual Machine (KVM)Piccolo footprint di memoria (60K)Memoria minima totale = 160KProcessori 16/32-bitVelocità processore = da 8 a 32MHz Hardware tipico configurazione CLDC

Per CLDC l’unico requisito forte è dimensione di memoria disponibile:Almeno 128K non-volatile per KVM e librerie CLDCAlmeno 32K volatile per KVM runtime

Piattaforme di Sviluppo - Sistemi Mobili M 20

ProfiliProfili J2MEJ2ME

Ogni profilo definisce requisiti per una famiglia didispositivi associati a uno specifico mercato verticale

Estende (con un layer superiore) una configurazione. Sempre on top di una delle configurazioni previste

Definisce una piattaforma Java standardizzata per una famiglia didispositivi a fini di interoperabilità (tentativo di ridurre problema diframmentazione)

Include librerie di classi con granularità più fine che non in unaconfigurazione

Profili disponibili:

Mobile Information Device Profile (MIDP)on top of CLDC. Include funzionalità GUI aggiuntive, supportomultimedia e gaming, sicurezza end-to-end, supporto esteso a connettività di rete per telefoni mobili e PDA entry-level

Page 11: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 21

ProfiliProfili J2ME J2ME DisponibiliDisponibili(continua(continua……))

…Foundation Profile

on top of CDC. Insieme di API Java di base per dispositivi con capacità limitate; punto cruciale è mancanza di supporto GUI standard

Personal Profileon top of CDC. Assieme a Foundation Profile, Personal Profile realizza l’ambiente per sviluppo di applicazioni adatto a PDA high-end. Personal Profile include l’insieme completo di API AWT, supporto per applet e Xlet

Personal Basis Profileon top of CDC. Fornisce un ambiente di sviluppo per applicazionicon connettività di rete e un livello elementare di supportografico alla presentazione contenuti

Piattaforme di Sviluppo - Sistemi Mobili M 22

MIDP: MIDP: RequisitiRequisiti HardwareHardware

Memoria (in aggiunta a quella per CLDC)128K non-volatile per componenti MIDP8K non-volatile per dati persistenti delle applicazioni32K volatile per KVM

DisplaySchermo almeno 96x54 pixelDisplay depth (o color depth o bit per pixel) almeno pari a 1-bitFattore forma pixel (aspect ratio) = 1:1

Periferiche di Input (una o più)One-handed keypadTwo-handed keypadTouch screen

NetworkingTwo-wayWirelessGestione intermittenzaBanda limitata

Page 12: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 23

ArchitetturaArchitettura MIDPMIDP

Mobile Information Device (MID)

CLDC

MIDP

SO Nativo + Software di Sistema

Applicazioni

MIDP

Applicazioni

OEM-Specific

Classi

OEM-Specific

ApplicazioniNative

Original Equipment Manufacturer (OEM)

Piattaforme di Sviluppo - Sistemi Mobili M 24

Libreria di ClassiLibreria di Classi

CLDCjava.lang

java.io

java.util

javax.microedition.io

MIDPjavax.microedition.lcdui

javax.microedition.midlet

javax.microedition.rms

Page 13: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 25

ModelloModello ApplicazioniApplicazioni MIDPMIDP

Applicazioni MIDP vengono indicate con iltermine “MIDlet”Modello MIDlet è per molti versi simile al modello applet in J2SE: modellocomponente-container e gestione ciclo divitaAnche supporto a sicurezza per applicazioni checondividono risorse/dati (tramite MIDlet Suite)Ciclo di vita MIDlet descritto da transizioni distato in stato, come indicato a fianco:

Start – acquisizione risorse e inizio esecuzionePause – rilascio risorse e ingresso stato di“quiescenza” (wait)Destroy – rilascio risorse, distruzione thread e fine di tutte le attività

Java Application Manager (JAM) per gestione ciclo di vita MIDlet

Pause

Active

Destroyed

star

tAp

pd

estr

oyA

pp

pau

seA

pp

des

tro

yAp

p

Piattaforme di Sviluppo - Sistemi Mobili M 26

TipicoTipico Stack Stack SupportoSupporto J2MEJ2ME

Mobile Information

Device Profile

KVMCLDC = KVM + J2ME Core

API in questoesempio DSP chip

(e.g., ARM)

J2ME core APIs

YourMIDlet

Pagine gialle, orariotreni e biglietteria, giochi, …

UI, HTTP networking, ...

Supporto threads, no floating point…

32-bit RISC, 256K ROM, 256K Flash, 64K RAM

KVM + CLDC + MIDP: si realizzano applicazioni on top di questo stack standardizzato, indipendenti da SO e dettagli hw

Page 14: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 27

CLDC/MIDP: CLDC/MIDP: qualchequalche DettaglioDettaglio susu Package Package PrincipaliPrincipali

Packagejavax.microedition.io

javax.microedition.lcdui (user interface per display lcd)javax.microedition.midlet

javax.microedition.rms (persistent storage)

Supporto a widget per GUI utenteForm, TextField, TextBox, DateField, List, Image, Gauge, Alert, Canvas, Graphics, Display Due differenti tipologie di API (livello di astrazione più alto e piùbasso) per gestione GUI

High level per widget, scrolling, ...Low level per grafica e controllo GUI fine-grained

Classi per gestione eventi – Command e CommandListenerPiù importante: è per tutti ovvio, vero ☺, qual è il modellodi threading sottostante?

Piattaforme di Sviluppo - Sistemi Mobili M 28

SolitoSolito ““Hello WorldHello World””in forma in forma didi MIDletMIDlet

import javax.microedition.lcdui.*;import javax.microedition.midlet.*;

public class HiMIDlet extends MIDlet {

private TextBox textbox;public HiMIDlet() {textbox = new TextBox ("", "Hello World!", 20, 0);

}

public void startApp() {Display.getDisplay(this).setCurrent(textbox);

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}}

Page 15: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 29

MIDlet: MIDlet: Gestione Semplice GUIGestione Semplice GUI

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class HelloWorld extends MIDlet implements CommandListener {

private Form mainscreen;private Form detailsscreen;private Display myDisplay;private Command exitCommand;private Command resetCommand;private Command detailsCommand;

public HelloWorld(){

myDisplay = Display.getDisplay(this);mainscreen = new Form("Hello World");detailsCommand = new Command("Details",Command.SCREEN, 1);resetCommand = new Command("Reset",Command.SCREEN,1);exitCommand = new Command("Exit", Command.EXIT, 1);

}

Piattaforme di Sviluppo - Sistemi Mobili M 30

StringItem strItem = new StringItem("Hello", " World");

mainscreen.addCommand(detailsCommand);mainscreen.addCommand(resetCommand);mainscreen.addCommand(exitCommand);mainscreen.append(strItem);mainscreen.setCommandListener(this);

public void startApp() { myDisplay.setCurrent(mainscreen); }

protected void pauseApp() { }

protected void destroyApp(boolean unconditional) { }

MIDlet: MIDlet: Gestione Semplice GUIGestione Semplice GUI

Page 16: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 31

public void commandAction(Command c, Displayable s) {if (c == exitCommand) {

destroyApp(false);notifyDestroyed(); }

else if (c == detailsCommand) {detailsscreen = new Form("Details");detailsscreen.addCommand(resetCommand);detailsscreen.setCommandListener(this);myDisplay.setCurrent(detailsscreen); }

else if (c == resetCommand) {myDisplay.setCurrent(mainscreen); }

}}

MIDlet: MIDlet: Gestione Semplice GUIGestione Semplice GUI

Piattaforme di Sviluppo - Sistemi Mobili M 32

import java.io.*;import javax.microedition.io.*;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class PrimitiveMIDlet extends MIDletimplements CommandListener {

private Display mDisplay;private Form mMainForm;private Command mExitCommand, mConnectCommand;

public void startApp() {mDisplay = Display.getDisplay(this);if (mMainForm == null) {mMainForm = new Form("PrimitiveMIDlet");mMainForm.append(new StringItem("", "Select Connect to

make a network connection"));mExitCommand = new Command("Exit", Command.EXIT, 0);mConnectCommand = new Command("Connect",

Command.SCREEN, 0);

MIDlet: MIDlet: un Esempio piun Esempio piùù RealisticoRealistico

Page 17: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 33

mMainForm.addCommand(mExitCommand);mMainForm.addCommand(mConnectCommand);mMainForm.setCommandListener(this); }

mDisplay.setCurrent(mMainForm); }

public void commandAction(Command c, Displayable s) {if (c == mExitCommand) notifyDestroyed();else if (c == mConnectCommand) connect();

}

private void connect() {String url = getAppProperty("NetworkThreading.URL");try { //interroga server e riceve rispostaHttpConnection hc = (HttpConnection)Connector.open(url);InputStream in = hc.openInputStream();int contentLength = (int)hc.getLength();if (contentLength == -1) contentLength = 255; byte[] raw = new byte[contentLength];int length = in.read(raw);

MIDlet: MIDlet: un Esempio piun Esempio piùù RealisticoRealistico

Piattaforme di Sviluppo - Sistemi Mobili M 34

in.close();hc.close();// Show the response to the user.String s = new String(raw, 0, length);Alert a = new Alert("Response", s, null, null);a.setTimeout(Alert.FOREVER);mDisplay.setCurrent(a, mMainForm); }catch (IOException ioe) { Alert a = new Alert(

"Exception", ioe.toString(), null, null);a.setTimeout(Alert.FOREVER);mDisplay.setCurrent(a, mMainForm); }

}public void pauseApp() {}public void destroyApp(boolean unconditional) {}

}

MIDlet: MIDlet: un Esempio piun Esempio piùù RealisticoRealistico

Quali potenziali problemi in uno scenario reale di utilizzo?

Page 18: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 35

MIDlet: MIDlet: un Esempio piun Esempio piùù RealisticoRealistico

Quali potenziali problemi in uno scenario reale di utilizzo?

Nessun feedback GUI durante intervallo di tempo richiesto per connessione => utente “spazientito” che genera altri comandi…

Più importante: modello di threading

thread di sistema “prestati” all’esecuzione di una MIDlet

i soli thread di appartenenza della MIDlet sono quelli che MIDlet esplicitamente istanzia

Come in altre tecnologie, ad es. per gestione GUI: thread di sistema che si occupa di fare da event dispatcher; gestori eventi devono restituire controllo rapidamente per non bloccare interfaccia MIDlet

La soluzione più sensata sarebbe quindi…

Piattaforme di Sviluppo - Sistemi Mobili M 36

public void commandAction(Command c, Displayable s) {if (c == mExitCommand)

notifyDestroyed();else if (c == mConnectCommand) {

Thread t = new Thread() {public void run() {

connect(); }};t.start(); }

}

MIDlet: MIDlet: un Esempio piun Esempio piùù RealisticoRealistico

Quali potenziali problemi in questo caso?

Page 19: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 37

Classe SingleWorker…public synchronized void run() {while (mTrucking) {

try { wait(); }catch (InterruptedException ie) {}if (mTrucking) connect(); }

}public synchronized void go() {notify(); }

Classe SingleMIDletimport java.io.*;…public class SingleMIDlet extends MIDlet implements CommandListener {private Display mDisplay;private Form mMainForm, mWaitForm;private SingleWorker mWorker;private Command mExitCommand, mConnectCommand, mCancelCommand;…

MIDlet: MIDlet: un Esempio piun Esempio piùù RealisticoRealistico

Piattaforme di Sviluppo - Sistemi Mobili M 38

public void startApp() {mDisplay = Display.getDisplay(this);if (mMainForm == null) {

//preparazione form…mWorker = new SingleWorker(this, url);mWorker.start(); }

mDisplay.setCurrent(mMainForm); }

public void commandAction(Command c, Displayable s) {if (c == mExitCommand) notifyDestroyed();else if (c == mConnectCommand) {

mDisplay.setCurrent(mWaitForm); mWorker.go(); }else if (c == mCancelCommand) {

mDisplay.setCurrent(mMainForm); mWorker.cancel(); }}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {mWorker.stop();

} …

MIDlet: MIDlet: un Esempio piun Esempio piùù RealisticoRealistico

Page 20: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 39

J2ME: J2ME: TipologieTipologie didiConnessioneConnessione Web Web SupportateSupportate

HTTP/HTTPSSemplice da utilizzare

XML over HTTP/HTTPSUso più diffuso di recente grazie a disponibilità di vari parser

Model: crea rappresentazione a oggetti di documento in memoria, ad es. DOMPush: fa parsing di un intero documento, distribuendo eventiai listener registrati, ad es. SAXPull: fa parsing di una porzione di documento alla volta, restituendo singolo elemento o tag

Inoltre, molto spesso, sfruttamento funzionalità forniteda JSR addizionali: fra tutte, JSR82 (Bluetooth), JSR179 (Location), JSR135 (Mobile Media), JSR180 (SIP), JSR172 (Web Services)

Piattaforme di Sviluppo - Sistemi Mobili M 40

EsercitazioneEsercitazione susu J2ME:J2ME:Come Come sisi ProgettaProgetta ApplicazioneApplicazione MIDletMIDlet

Identificare i dispositivi targetIdentificare i profili supportati da quei dispositiviSviluppare applicazione

Ad esempio, se in forma di MIDlet perché supportatoCLDC/MIDP, applicazione adatta per cellulari e piccoli pager

Richiede che l’ambiente di sviluppo sia integrato con ambiente CLDC/MIDP: MIDP reference implementation http://www.oracle.com/technetwork/java/index-jsp-138820.html

Possibilità di esecuzione per validazione e testing suemulatori MIDP

Ad esempio si può utilizzare J2ME Wireless Toolkit e ktoolbarper creare un progetto, progettare, implementare, configurare e validare la MIDletProbabilmente sarete più comodi a utilizzare Eclipse ME http://eclipseme.org/

Page 21: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 41

Ad Ad eses. Nokia J2ME SDK. Nokia J2ME SDK

Piattaforme di Sviluppo - Sistemi Mobili M 42

RicordateviRicordatevi: : ProcessoProcesso CaricamentoCaricamento MIDletMIDlet

Web Page

JAM

Downloads

App

User

Selects

App

Advertise

App on

Web Page

Network Transfer Java Application

Manager

(Name,

Version,

Size,

…)

Jar File

Descriptor

File

Page 22: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 43

EsercitazioneEsercitazione susu J2ME:J2ME:Come Come sisi ProgettaProgetta ApplicazioneApplicazione MIDletMIDlet

Realizzare una piccola MIDlet context-dependent (ad esempio, capace di fare playing di suoni o video differenti a secondadella locazione corrente dell’utente), sfruttando funzionalitàdefinite in JSR 135 (nota anche come Mobile Media API,

http://java.sun.com/products/mmapi/) e JSR 179 (nota anchecome Location API, diverse implementazioni più o meno“facilmente” disponibili, ad es. http://code.google.com/p/openlapi/)

Utilizzare, a propria scelta, strumenti di sviluppo come J2ME Wireless Toolkit oppure Eclipse ME

Può essere anche il seme iniziale per una possibile attivitàprogettuale…

Piattaforme di Sviluppo - Sistemi Mobili M 44

CenniCenni sulsul ModelloModello didi SicurezzaSicurezza

J2ME non può supportare l’usuale modello disicurezza completo di J2SE

Implementazione dei soli domini di protezione J2SE è piùgrande dell’intera implementazione CLDC

Quindi, come implementare una qualche soluzione disicurezza per J2ME?

Linea guida - dividere il problema in due parti:

Sicurezza a livello VM (low-level) Garantita dal verificatore a due fasi per class file inseritoin CLDC

Sicurezza a livello applicativoModello sandbox

Page 23: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 45

SicurezzaSicurezza::

VerificatoreVerificatore didi Class File a 2 Class File a 2 FasiFasi

Verifica off-deviceStrumento per pre-verifica aggiunge un attributo “stack map” a ogni metodo nel file class Java per facilitare verifica in-deviceProcesso di pre-verifica (oneroso computazionalmente) è eseguito suun sistema server o desktop prima che class file sia scaricato suldispositivo mobile“stack map” aiuta poi a rendere più efficiente verifica in-device

più veloceminore codice in VM e minore consumo memoria

Verifica in-deviceVerifica ambiente (ad es. requisiti memoria per esecuzione)Bytecode check Type checkTerminazione “propria”, ovvero opportuna (ad es. no istruzioni disalto incondizionato)

Piattaforme di Sviluppo - Sistemi Mobili M 46

Stack map attribute accrescedimensionedi classfile dicirca 5%

SicurezzaSicurezza::

VerificatoreVerificatore didi Class File a 2 Class File a 2 FasiFasi

Page 24: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 47

SicurezzaSicurezza a a LivelloLivello ApplicativoApplicativo: : ModelloModello SandboxSandbox

Applicazioni (MIDlet ma non solo) devono eseguire in un ambiente chiuso da cui possono avere accesso solo alleAPI definite da configurazione, profilo e da classi licenziatesupportate dal dispositivo

Vi ricordate, vero, il modello di esecuzione in sandbox delle applet?

Più specificamente modello sandbox per MIDlet prevede:Class file devono essere stati adeguatamente verificati (garanziadi essere validi)Garanzia che sono disponibili all’applicazione solo le API definite daCLDC, profilo e classi di estensione licenziateDownload applicazione avviene a livello cosiddetto nativo(native code level) tramite Java Application Manager (JAM)Vietato fare overriding del meccanismo di class loading standardVietato l’accesso a insieme di funzioni native che VM può utilizzare

Piattaforme di Sviluppo - Sistemi Mobili M 48

Android: Architettura

Classica architettura di tipo gerarchico, strutturata a layer (a complessità crescente dal basso verso l’alto)

Livelli:

Linux kernel

Librerie (native Linux)

+ Android runtime

(Dalvik VM + librerie

core)

Application

Framework

Applicazioni

Page 25: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 49

Android: Architettura

Kernel Layerbasato su classico kernelLinuxv2.6introduce Hardware AbstractionLayer (HAL)

Librariesin linguaggio nativo (C/C++)

Android Runtimeambiente di esecuzione delle applicazioni, scritte in Javabasato su Dalvik VM

Application Frameworkfornisce servizi evoluti, sempre incapsulati in oggetti Java, alle applicazioni

ApplicationCore App: fornite dal sistema App scritte dagli sviluppatori…

Piattaforme di Sviluppo - Sistemi Mobili M

Android: curiosità su evoluzione versioni

Honeycomb (3.x)Introduzione supporto tablet, etc. etc.

Honeycomb (3.x)Introduzione supporto WiFiDirect, etc. etc.

possibile base tecnologica per attività progettuale

Page 26: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 51

Kernel Linux 2.6Hardware Abstraction

Layer (HAL)Gestione memoriaGestione processiNetwork stackPower management standard Linux…

51

Estensioni kernelAshmem: gestore della memoria condivisa; reference counting e deallocazione automatica da parte del kernelBinder IPC: minimo overhead grazie all’uso di Ashmem (maggiore disciplina di accesso tramite descrittore di blocco di memoria)Power Management avanzato: uso di varie politiche di gestione energia attraverso i WakeLock

Android:SO Kernel Layer

Non è un vero e proprio SO kernel Linux. Mancano:Sistema gestione finestre nativoCompleto supporto GNU C libraryCompleto supporto utility standard Linux

Piattaforme di Sviluppo - Sistemi Mobili M 52

Power Management e WakeLock

Esempio evidente di cross-layeringApplicazione Android (con permessi di accesso a Power

Manager) può ottenere controllo consumi energetici imponendo politica desiderata:CPU sempre attiva, anche con display spentoCPU prioritaria con display almeno retroilluminato…

Tramite WakeLock: lock di accesso alle funzionalità di PowerManager (diverse tipologie di WakeLock). Ad es:

… @Overrideprotected void onCreate(Bundle savedInstanceState) {

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen"); }

@Overrideprotected void onPause() { super.onPause(); wl.release(); }

Page 27: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 53

Librerie native per grafica e multimedia

Dalvik VMprogettata per dispositivi mobili: registry-based (sfrutta l’architettura

ARM). Perché, invece, com’è organizzata JVM tradizionale?interpreta ed esegue i file dex, ottenuti dalla trasformazione dei file class

(riduzione 30% istruzioni necessarie e incremento prestazioni runtime)supporto a garbage collector

Android:Librerie Native e Dalvik VM

Surface Manager + Media Framework

3D Surface3D Surface3D Surface3D Surface

2D Surface2D Surface2D Surface2D Surface

SurfaceSurfaceFlingerFlingerSurfaceSurfaceFlingerFlinger

FrameFrameBufferBufferFrameFrameBufferBuffer

Audio FlingerAudio Audio FlingerFlinger

App App App App

CameraCamera

Camera

Service

Camera

Service

OpenCOREOpenCOREVorbisVorbis MIDIMIDI

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

Media Server

CameraCamera

Camera

Service

Camera

Service

OpenCOREOpenCOREVorbisVorbis MIDIMIDI

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

CameraCamera

Camera

Service

Camera

Service

OpenCOREOpenCOREVorbisVorbis MIDIMIDI

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

Media Server

Piattaforme di Sviluppo - Sistemi Mobili M 54

ActivityUna singola azione che l’utente può

compiere attraverso una finestra (corrisponde di solito ad una schermata)È componente fondamentale in

AndroidAd es. home activity

IntentMassima riusabilità delle activityRichiesta di compiere un’operazione

(ad es. selezione numero telefonico)Raccolta da un componente che ha

un Intent Filter compatibile

ServiceIn esecuzione in background (no

interazione con utente come activity)Utilizzabile da 1+ componentiNo processo/thread dedicato in

background

Broadcast ReceiverRisponde agli Intent compatibili

eseguendo le operazioni previsteIn genere, azioni di notifica

(chiamata, sms)Ciclo di vita limitato alla risposta

Android: Application Framework

Page 28: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 55

Package e Activity ManagerGestiscono cicli di vita delle Activity e delle app, contenute in Android Package(APK). Ogni APK contiene un descrittore (manifest), l’eseguibile dex e le risorse (xml, png, …), secondo una struttura di file system fissa e predefinita

Window Manager e View SystemOffrono servizi grafici evoluti impiegati direttamente dalle app. View System si basa su classe View, ovvero componenti grafici che interagiscono con l’utente e responsabili della gestione degli eventi (no Java Swing e AWT)

Applications

Resource Manager e Content ProviderGestione risorse (tutti file eccetto codice) e accesso condiviso a dati locali (RDBMS SQLite e persistenza tramite file)

Telephony, Notification, Location ManagerConsentono di accedere alle funzionalità telefoniche, di notifica e di localizzazione

Android: Application Framework

Piattaforme di Sviluppo - Sistemi Mobili M 56

Core ApplicationApplicazioni vere e proprie (stesso modello di esecuzione che per applicazioni sviluppate da terze parti e scaricate in secondo momento), pre-installate a default su macchine Android

Home application (e activity correlata): applicazione manager da cui èpossibile lanciare esecuzione di altre applicazioni. Quale modello di threading?Gestione messaggisticaApplicativo cliente per emailRubrica contattiGestione mappeBrowser Web: browser engine WebKit(open-source); utilizzato anche in Safari e Google ChromeSolo browser engine (parser HTML + renderer + motore JavaScript)

Applications

Android: Core Application

Page 29: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 57

Ciclo di Vita di una Activity

È il componente attraverso cui avviene l’interazione con l’utenteEstende classe Java Activity

In genere sono in esecuzione tante activity in contemporanea: quella attiva (in RUNNING) è però unica. Se èvisibile ma non attiva, è PAUSED, altrimenti STOPPEDPer gestire il ciclo di vita è possibile ridefinire i metodi di callbackOnCreate, OnStart, OnResume,…Le activity impegnano risorse: una activity può essere deallocata per mancanza di risorse→ stato KILLEDAndroid dispone di un contenitore di informazioni Bundle, con cui èpossibile salvare lo stato da ripristinare alla riallocazione

STOPPEDSTOPPED

OnCreate()OnCreate()

OnStart()OnStart()

OnResume()OnResume()

RUNNINGRUNNING

a) Nuova activityb) Tasto back

OnPause()OnPause()

PAUSEDPAUSED

Activity non piùvisibile

OnStop()OnStop()

OnDestroy()OnDestroy()

INACTIVEINACTIVE

L’activity torna in primo piano

L’activity torna in primo piano

OnRestart()OnRestart()

Risorse di memoria scarse

INACTIVE(KILLED)

INACTIVE(KILLED)

L’activity torna in primo piano

OnRestoreInstanceState(Bundle)OnRestoreInstanceState(Bundle)

OnSaveInstanceState(Bundle)OnSaveInstanceState(Bundle)

Bun

dle

Piattaforme di Sviluppo - Sistemi Mobili M 58

Concetto di Conversazione:Android Task

Una App può contenere più activity:indipendenti e disgiuntefra loro correlate

Activity sono diverse dalle formdevono essere semplicidevono essere usabili e riusabili

→ è necessario strutturare activity a formare una conversazione complessa con utente (come per pagine Web)

Un task modella una conversazionecontiene stack di activity, anche di app diverse: in cima c’è activity del task attivaApertura di una activity la pone in cima allo stack; sua chiusura la rimuove dallo stackpuò essere in foreground o in background

MyFirstProject

processo it.mypackage

MyActivityMyActivity

App Dialer

processo Dialer

ContattiContatti

DialerDialer

……

MyActivity

Contatti

TASK

root activityroot activity

top dello stack

top dello stack

Page 30: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 59

Intent e Intent Filter

Attivazione di un componente avviene tramite un Intent(di solito per passare da una activity alla successiva)

esplicito: componente da attivare è noto a compile time; necessita del descrittore Class del componenteimplicito: componente da attivare non è noto a compile time; necessita che vengano specificate le seguenti informazioni

action e category: descrivono il tipo e l’azione che l’applicazione vorrebbe essere eseguitaurl: specifica i dati che il componente attivato deve elaboraremime type: specifica il tipo di dati

Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse(“http://www.unibo.it”));

Componente viene scelto in base a Intent Filter (descrizione di quali intent una activity pouò gestire) dichiarati nel manifest, secondo un algoritmo di Intent Resolution

Intent repository su www.openintents.org

Piattaforme di Sviluppo - Sistemi Mobili M 60

Intent e Intent Filter

protected void onCreate(Bundle savedInstanceState) {...Intent intent = new Intent(); intent.setAction(MY_ACTION);intent.addCategory(Intent.CATEGORY_ALTERNATIVE);intent.addCategory(Intent.CATEGORY_BROWSABLE);Uri uri = Uri.parse("content://it.mypackage/items/");intent.setData(uri); intent.setType("vnd.android.cursor.item/vnd.mytype");startActivity(intent); ... }

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

LAUNCHER" /><category android:name="it.mypackage.intent.

category.CAT_NAME" /><data android:mimeType="vnd.android.cursor.item/ vnd.mytype" /></intent-filter>

</activity>

Esempio di file

manifest

Page 31: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 61

Modello di Threading in Android

Ogni processo ha un thread singolo (a default) => semplice modello single-threaded (1 processo: 1 thread)

1 applicazione: 1 processo: 1 thread: più activity

Possibilità di salvare stato in info bundle (non troppo dissimile da modello di esecuzione stateful session bean in J2EE)

Ogni thread ha un Looper per la gestione di coda di messaggi

Piattaforme di Sviluppo - Sistemi Mobili M 62

Modello di Threading in Android

Possibile sia 1) lanciare applicazioni diverse in unica Dalvik VM (unico processo), sia 2) avere una Dalvik VM (processo) dedicata per ogni singola applicazione

Default è la seconda opzione: ogni applicazione viene messa in VM separata (processo separato), anche quando si effettua startActivity(intent) o startService(intent)

Come è possibile? Quali potenziali problemi?

Ad es. come realizzare restituzione di risposta da activity all’invocante?startActivityForResult(Intent, int)

secondo parametro identifica chiamata

funzione di callback onActivityResult(int, int, Intent)

Se si desidera risparmiare in utilizzo risorse di sistema, occorre forzare che differenti applicazioni condividano stesso userID

Android.sharedUserId=“PaoloBellavista” in file manifest

Quali potenziali problemi di sicurezza?

Page 32: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 63

Esempio: Sviluppo di un LauncherSostitutivo di Home

Una home custom si crea nel modo seguente:1. Definizione di una nuova Activity2. Dichiarazione nell’Intent Filter

dell’action MAIN di launcher3. Ricerca app installate attraverso Package

Manager4. Scelta delle sole app che presentano un

Intent Filter relativo a launch5. Creazione di una View di selezione

(Button) per ogni app adatta6. Definizione dell’evento di click: lancio di un

Intent7. Associazione dell’evento alla View

Come già detto, home consente avvio di tutte le app, fungendo da launcherAndroid piattaforma aperta – “All Apps are created equal” → possibile personalizzare il sistema con la propria home

Piattaforme di Sviluppo - Sistemi Mobili M 64

// Passo 1: definizione di nuova activitypublic class CategoryTestActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);LinearLayout activitiesList;activitiesList = (LinearLayout) findViewById(R.id.activitiesList);

// Passi 3 e 4: ricerca app e selezione su IntentFilterIntent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);PackageManager pkgManager = getPackageManager();List<ResolveInfo> activities =

pkgManager.queryIntentActivities(intent, 0);…

Esempio: Sviluppo di un LauncherSostitutivo di Home

Page 33: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 65

…for (ResolveInfo resolveInfo : activities) {

final ResolveInfo ri = resolveInfo;Button button = new Button(this); //Passo5: un bottone per appbutton.setText(resolveInfo.loadLabel(pkgManager));// Passo 7: associazione evento-viewbutton.setOnClickListener(new OnClickListener() {

public void onClick(View v) {Intent intent = new Intent(); //Passo6: lancio intentComponentName cn = new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name);intent.setComponent(cn);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);startActivity(intent);}});

activitiesList.addView(button);}}}

Esempio: Sviluppo di un LauncherSostitutivo di Home

Piattaforme di Sviluppo - Sistemi Mobili M 66

<manifest xmlns:android=“...” package="it.mypackage"><application android:label="@string/app_name"><activity android:name=".HomeActivity"

android:label="@string/app_name">

<intent-filter> <!-- Passo 2 --><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /><category android:name="android.intent.category.

HOME"> </category><category android:name="android.intent.category.

DEFAULT"></category></intent-filter></activity></application></manifest>

Esempio: Sviluppo di un LauncherSostitutivo di Home

Page 34: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 67

Sicurezza in Android(in una slide)

<manifest xmlns:android="http://schemas.android.com/apk/res/android“ package="com.google.android.app.myapp" >

<uses-permission id="android.permission.RECEIVE_SMS" /></manifest>

<manifest xmlns:android="http://schemas.android.com/apk/res/android“ package="com.google.android.app.myapp" >

<uses-permission id="android.permission.RECEIVE_SMS" /></manifest>

Classiche linee guida per sicurezza in Linux

A default ogni applicazione esegue in Dalvik VM dedicata e con suo proprio processo separato. Quale PID/GID?

Identificatori di processo e gruppo assegnati da intervallo definito a livello di sistema - FIRST_APPLICATION_UID, LAST_APPLICATION_UID

Permessi a livello di processo sono assegnati e controllatiin dipendenza da user ID & group ID assegnati aiprocessi. Usualmente che cosa vi aspettate?

Permessi a grana più fine sono assegnabili (revocabili) anche per singola operazione tramite file manifest

Piattaforme di Sviluppo - Sistemi Mobili M 68

EsercitazioneEsercitazione susu AndroidAndroid

Realizzare una piccola Android App context-dependent (ad esempio, capace di fare playing di brani audio/video differenti a seconda della locazione corrente dell’utente), sfruttando le API della libreria Media Framework (libreria nativa) e le API del Location Manager (Java-based, a livello di application framework)

Utilizzare, a propria scelta, strumenti di sviluppo come:il semplice Android SDK - http://developer.android.com/sdk/index.htmloppure Android Development Tools (ADT) per Eclipse http://developer.android.com/sdk/eclipse-adt.html

Può essere anche il seme iniziale per una possibile attività progettuale…

Come ulteriore esempio di utilizzo di Android e di attività progettuale, vedere “Applicazione per la Catalogazione Geolocalizzata di Potenza Segnale Ricevuto per Piattaforma Android” -http://lia.deis.unibo.it/Courses/sm1112-info/esercizi.html

Page 35: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 69

Numerose Sorgenti Disponibiliper Info Addizionali

Numerosi libri su Android:

R. Meier, “Professional Android 2 Application Development”, Wrox, Marzo 2010

M. Gargenta, “Learning Android”, O’Reilly, Marzo 2011

F. Ableson, R. Sen, “Android in Action”, Manning, Feb. 2011

Android SDK ha una buona documentazione, ad es. di descrizionedelle API disponibili, di applicazioni di esempio, …

http://developer.android.com/sdk/index.html

Altra documentazione è disponibile alla descrizione degli strumenti disviluppo

http://developer.android.com/guide/developing/projects/projects-cmdline.html

http://developer.android.com/sdk/eclipse-adt.html

Piattaforme di Sviluppo - Sistemi Mobili M 70

iOSiOS (o (o iPhoneOSiPhoneOS):):unauna VelocissimaVelocissima PanoramicaPanoramica

Approccio per molti versi simile ad Android in termini direalizzazione di ampio ecosistema con modello disviluppo + API di supporto:iOS utilizza una variante del kernel XNU alla base di MacOSX

Catena di strumenti per lo sviluppo è similmente basata su Xcode

SDK contiene API a vari livelli per supporto a:

SDK contiene anche iPhone Simulator, uno strumento per emulare look&feeldi iPhone su desktop sviluppatore. Non è un emulatore vero e proprio: esegue codice generato per altro target (x86)

SDK richiede macchina con Mac OS X Leopard (o più recenti)

Eventi e controlli multi-touch

Accelerometro

Localization (i18n)

Fotocamera e media in generale (audio mixing&recording, video playback, vari formati difile immagine, OpenGL ES …)

Networking

Embedded SQLite database

Core Location (GPS, Skyhook WiFi, …)

Thread

Power management

File system

Security

Page 36: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 71

iOSiOS (o (o iPhoneOSiPhoneOS):):RegoleRegole RegoleRegole RegoleRegole……

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iOS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs

3.3.2 — An Application may not itself install or launch other executablecode by any means, including without limitation through the use of a plug-in architecture, calling other frameworks, other APIs or otherwise. No interpreted code may be downloaded or used in an Application except for code that is interpreted and run by Apple’s Documented APIs and built-in interpreter(s)

Lo stesso SDK può essere scaricato gratuitamente ma richiedeiscrizione a iPhone Developer Program se si vuole rilasciaresoftware (pagamento + approvazione Apple)

Apple non ha annunciato nessun piano per piattaforma Java su iPhone; parziale supporto invece per J2ME su iOS

Piattaforme di Sviluppo - Sistemi Mobili M 72

iOSiOS MultitaskingMultitasking

MultitaskingPrima di iOSv4, multitasking limitato a un sottoinsieme di applicazioni fornite dal produttore. Apple temeva eccessivo consumo di batteria dovuto a esecuzione simultanea di applicazioni third-partyA partire da iOSv4, multitasking supportato tramite 7 API per esecuzione background :

– Audio in background - Voice over IP – Servizio di locazione in background - Notifiche push– Notifiche locali - Terminazione task– Switching veloce fra applicazioni

iOS come sistema aperto?

Open Source NO YES

Write anything you want NO YES

Device Homogeneity YES NO

iOS Android

Page 37: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 73

Sviluppare per iOS:Primi Passi

Per cominciare:

http://developer.apple.com/iphone/

Effettuare download di iOS SDK, che include :Xcode

Strumento di emulazione iPhone

Strumenti di monitoraggio

Interface builder

Nota: applicazioni sono soggette all’approvazione di Apple (parte integrante dell’accordo per SDK download) al fine di fare test diaffidabilità e altre analisi…

Applicazioni possono essere rifiutate se giudicate di "limited utility"

Piattaforme di Sviluppo - Sistemi Mobili M 74

Alternative per Sviluppo su iOS

Strada primaria: utilizzo di Xcode e Objective C, come supiattaforma MacOSX più tradizionale

Alternative:

Web application che utilizzano tecnologieAJAX/Javascript; possibilità di accesso tramite Safari

Utilizzo di JavaJ2ME e AlcheMo per iPhone

Xmlvm

Installazione di Java su iPhone “unlocked” e “jailbroken”

By the way, sapete che cosa si intende in gergo per “unlocking” e “jailbreaking”?

Page 38: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 75

Unlocking & Jailbreaking

Strettamente parlando, unlocking e jailbreaking sono processidiversi e distintiUnlocking è il processo tramite cui dispositivo è reso compatibile con reti telefoniche per cui non era stato specificatamente licenziato(superamento locking con operatore dedicato)

Jailbreaking è il processo tramite cui si esce dalla propria “cella” in SO UNIX-like e/o si infrange il sistema di Digital Right Management (DRM). Forma specifica di crescita di privilegi di esecuzione

Per iOS, permette all’utente di eseguire codice e applicazioni arbitrarie, passando sopra al meccanismo usuale di distribuzione di codice di Apple (basato su iTunes App Store e iTunes Application)

Per chi si voglia divertire con proprio iPhone, strumenti:PwnageTool, QuickPwn, Yellowsn0w http://blog.iphone-dev.org/

Pusher - http://ripdev.com/pusher/

Linux on iPhone - http://www.iphonelinux.org/index.php/Main_Page

ZIPhone - http://www.ziphone.org/

Piattaforme di Sviluppo - Sistemi Mobili M 76

iOS:AJAX & JavaScript

AJAX (“forse” Asynchronous JavaScript and XML): insieme ditecniche interrelate per sviluppo di applicazioni Web altamenteinterattive (rich Internet application)

Possibilità di data retrieval asincrono in background, senzainterferire con comportamento e visualizzazione pagina corrente

Applet come precursori di AJAX

Con browser Safari, possibilità di applicazioni Web fortementeinterattive e “native looking”

Domanda: quali vantaggi nell’utilizzare applicazioni Web invecedi applicazioni native?

AJAX plugin per Eclipse (anche in versione standalone): http://www.aptana.com/

Page 39: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 77

Anche proposte che hanno avuto successo in termini distandardizzazione. Ad esempio:

Elemento canvas come estensione JavaScript third-party che permetterendering dinamico di immagini bitmap

Introdotto da Apple per utilizzo nel componente Webkit di MacOSX (allabase di browser Safari), poi adottato da Mozilla e Firefox

Standardizzato da WHATWG (vedi ultimo lucido) per le nuove proposte dispecifica verso HTML5

Canvas è una regione “disegnabile” definita in codice HTML con attributi dialtezza e larghezza. Codice JavaScript può usare un set ampio di funzioni didisegno, permettendo così grafica generata dinamicamente (grafici, animazione, composizione di immagini, …)

In competizione e concorrenza con Macromedia Flash/FlashLite. Vedi due esempi demo:

http://www.damonkohler.com/2008/12/javascript-painting-with-canvas.html

http://www.benjoffe.com/code/demos/canvascape/

iOS:AJAX & JavaScript

Piattaforme di Sviluppo - Sistemi Mobili M 78

HTML5 in HTML5 in unauna SlideSlide

Ancora, la questione fondamentale è vantaggi&svantaggi di

Applicazioni Web vs. applicazioni native

HTML5Nulla di sconvolgente, riprende classico modello di applicazioni Web a ricca interattivitàHTML5 = HTML + CSS + JavaScript

W3C, tramite il suo Web Hypertext Application Technology Working Group (WHATWG) ha annunciato che standard sarà definitivo per 2014!

Più in dettaglio:

Nuovi tag per AJAX e DHTMLNuovi tag per gestione embedded audio e video (ad es. <video> tag)

Quanto supportati al momento attuale?

Migliore gestione struttura documentiProvate a guardare:

http://dev.w3.org/html5/spec/ (draft 29 Marzo 2012)http://slides.html5rocks.com/

Page 40: Sistemi Mobili M - unibo.itlia.deis.unibo.it/Courses/sm1112-info/lucidi/04-Platforms(2x).pdf · e applicazioni per sistemi mobili. Perché? ... container, macchine virtuali, …)

Piattaforme di Sviluppo - Sistemi Mobili M 79

J2ME su iPhone:alcheMo

Abbiamo già detto NO supporto ufficiale a Java

Comunque possibile eseguire applicazioni Java su iPhone, dopojailbreaking, installazioni varie, ...

Ad esempio, alcheMo è in grado di convertire automaticamenteapplicazioni J2ME per iPhone, utilizzando un ampio sottoinsieme difunzionalità J2ME CLDC1.1 e MIDP2.0 (incluso supporto per touch screen)

Supporta diverse JSR aggiuntive, inclusa la recente JSR-256 (Mobile Sensor API), ma anche JSR-135 MMAPI, JSR-179 LBS, JSR-75 File Connection & Personal Info Management, JSR-120 Wireless Messaging

Supporta API addizionali per multi-touch e look&feel nativo iPhoneProcesso di traduzione automatica rapido, senza requisiti di skill specifici edesperienza di sviluppo su iPhone

http://www.innaworks.com/alcheMo-for-iPhone.html