42
Sistemi Mobili M Sistemi Mobili M Università di Bologna CdS Laurea Magistrale in Ingegneria Informatica CdS Laurea Magistrale in Ingegneria Informatica II Ciclo - A.A. 2013/2014 Corso di Sistemi Mobili M (8 cfu) 04 – Piattaforme di Sviluppo (e non solo): Panoramica J2ME e Android Panoramica, J2ME e Android Docente: Paolo Bellavista [email protected] http://lia deis unibo it/Courses/sm1314-info/ Piattaforme di Sviluppo - Sistemi Mobili M 1 http://lia.deis.unibo.it/Courses/sm1314 info/ http://lia.deis.unibo.it/Staff/PaoloBellavista/ Panoramica su Panoramica su Piattaforme di Sviluppo Piattaforme di Sviluppo Piattaforme di Sviluppo Piattaforme di Sviluppo Molte soluzioni possibili oggi per fare sviluppo di middleware e applicazioni per sistemi mobili Perché? Quale è il trend e applicazioni per sistemi mobili. Perché? Quale è il trend futuro? Eterogeneità e frammentazione Eterogeneità e frammentazione Scelta market-driven Caratteristiche molto differenziate dispositivi disponibili 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- Python, Lazarus, Brew, Flash Lite, Web runtime environment (micro browser, HTML5, XHTML/CSS, JavaScript, Mobile Ajax, …), … Proviamo a mettere un podordine Piattaforme di Sviluppo - Sistemi Mobili M 2 Proviamo a mettere un po d ordineQuali livelli coinvolti?

Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Sistemi Mobili MSistemi Mobili M

Università di BolognaCdS Laurea Magistrale in Ingegneria InformaticaCdS Laurea Magistrale in Ingegneria Informatica

II Ciclo - A.A. 2013/2014Corso di Sistemi Mobili M (8 cfu)

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

Docente: Paolo [email protected]

http://lia deis unibo it/Courses/sm1314-info/

Piattaforme di Sviluppo - Sistemi Mobili M 11

http://lia.deis.unibo.it/Courses/sm1314 info/

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

Panoramica su Panoramica su Piattaforme di SviluppoPiattaforme di SviluppoPiattaforme di SviluppoPiattaforme di Sviluppo

Molte soluzioni possibili oggi per fare sviluppo di middlewaree applicazioni per sistemi mobili Perché? Quale è il trende applicazioni per sistemi mobili. Perché? Quale è il trend futuro?

Eterogeneità e frammentazioneEterogeneità e frammentazione

Scelta market-driven

Caratteristiche molto differenziate dispositivi disponibiliCaratteristiche 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-Python, Lazarus, Brew, Flash Lite, Web runtime environment (microbrowser, HTML5, XHTML/CSS, JavaScript, Mobile Ajax, …), …

Proviamo a mettere un po’ d’ordine

Piattaforme di Sviluppo - Sistemi Mobili M 2

Proviamo a mettere un po d ordine…

Quali livelli coinvolti?

Page 2: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Panoramica su Panoramica su Piattaforme di SviluppoPiattaforme di SviluppoPiattaforme di SviluppoPiattaforme di Sviluppo

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

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

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

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

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

Prevalentemente a livello di supporto runtime all’esecuzione: Kernel-based Virtual Machine (KVM) o Dalvik Virtual

Piattaforme di Sviluppo - Sistemi Mobili M 3

( )Machine per Java, Common Language Runtime (CLR) per .NET, Flash Lite, Web runtime environment

Panoramica su Panoramica su Piattaforme di SviluppoPiattaforme di SviluppoPiattaforme di SviluppoPiattaforme di Sviluppo

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

Due principali categorie di approccio:

Basato su applicazioni nativepp

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

Partiamo dal primo approccio, scegliendo di dare un’occhiata f 2 Ca 4 famiglie di soluzioni principali: J2ME, .NET CF, Flash

Lite, Android

Piattaforme di Sviluppo - Sistemi Mobili M 4

Page 3: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Panoramica su Panoramica su J2ME NET CF Flash LiteJ2ME NET CF Flash Lite AndroidAndroidJ2ME, .NET CF, Flash Lite, J2ME, .NET CF, Flash Lite, AndroidAndroid

Piattaforme di Sviluppo - Sistemi Mobili M 5

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/(smart phone, set-top box) – http://java.sun.com/j2me/

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

Concetto di configurazione: minime caratteristiche VM e insieme librerie supporto per una famiglia orizzontale di dispositivipp p g p

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 chiamateApplicazioni Java su CLDC/MIDP vengono chiamate MIDlet

A t ià i t h i i t d J C it P (JCP)

Piattaforme di Sviluppo - Sistemi Mobili M 6

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

Page 4: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

..NET CF in NET CF in una Slideuna Slide

Sottoinsieme di piattaforma .NET (circa 30% classi e

f i lità) di iti i MS Wi d M bilfunzionalità) per dispositivi con MS Windows Mobile

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

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

Idea di transizione morbida da sviluppo applicazioniIdea 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 footprintCosto relativamente alto in termini di memory footprint

Non ha problemi di “frammentazione” come nel caso J2ME

Piattaforme di Sviluppo - Sistemi Mobili M 7

J2ME

Adobe Flash Lite in una SlideAdobe Flash Lite in una Slide

Tecnologia proprietaria popolare per sviluppo di t t lti di l i hicontenuto multimediale e giochi

Di base, supporto a grafica vettoriale e animazioni; aggiunta di logica applicativa e di presentazione tramiteaggiunta 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 di iti idispositivi, con conseguente buona efficienza

Performance limitate per costo gestione grafica vettoriale

Vedi tentativo analogo del mondo Java con JavaFX Mobile

Piattaforme di Sviluppo - Sistemi Mobili M 8

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

Page 5: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Android in una SlideAndroid in una Slide

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

Sottoinsieme abbastanza ampio di J2SE + ricca libreria di funzionalità di supporto (Android SDK) a disposizionefunzionalità 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 pp ( psoluzione)

Piattaforme di Sviluppo - Sistemi Mobili M 9

Un Confronto su un’Applicazione GiocattoloUn Confronto su un’Applicazione Giocattolo(Gavalas et al, IEEE Software, 2011)(Gavalas et al, IEEE Software, 2011)( , , )( , , )

Piattaforme di Sviluppo - Sistemi Mobili M 10

Page 6: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Un Primo ConfrontoUn Primo Confronto

Piattaforme di Sviluppo - Sistemi Mobili M 11

Un Primo ConfrontoUn Primo Confronto

Piattaforme di Sviluppo - Sistemi Mobili M 12

Page 7: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Un Primo ConfrontoUn Primo Confronto

Piattaforme di Sviluppo - Sistemi Mobili M 13

Un Primo ConfrontoUn Primo Confronto

Piattaforme di Sviluppo - Sistemi Mobili M 14

Page 8: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Un Primo ConfrontoUn Primo Confronto

Piattaforme di Sviluppo - Sistemi Mobili M 15

Scendiamo maggiormente nel dettaglio:Scendiamo maggiormente nel dettaglio:

Java 2 Micro EditionJava 2 Micro EditionJava 2 Micro EditionJava 2 Micro Edition

In termini generali, diverse edizioni di “distribuzioni” Java

Ruolo centrale dello stack KVM +KVM + CLDC + MIDP

Piattaforme di Sviluppo - Sistemi Mobili M 16

Page 9: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

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

In realtà, situazione più complicata ecomplicata e articolata

Importanti problemi diImportanti problemi di

frammentazione

MSA, in due i iversioni:

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

Piattaforme di Sviluppo - Sistemi Mobili M 1717

J2ME: Configurazioni e ProfiliJ2ME: Configurazioni e Profili

Una configurazione definisce una piattaforma minimat i t l di di iti iper un raggruppamento orizzontale di dispositivi

Requisiti analoghi su memoria e capacità computazionali

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

“A Configuration is a specification that defines a minimum Java Platform g pfunctionality 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 una configurazione con capacità utili per un gruppo specificoconfigurazione con capacità utili per un gruppo specifico di dispositivi

“A Profile is a collection of Java APIs that supplement a Configuration to

Piattaforme di Sviluppo - Sistemi Mobili M 18

pp gprovide capabilities for a specific device group or market type.”

Page 10: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

J2ME: Configurazioni DisponibiliJ2ME: Configurazioni Disponibili

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

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

Macchina virtuale per CLDC: Sun’s Kilo Virtual Machine (KVM)Macchina virtuale per CLDC: Sun s Kilo Virtual Machine (KVM)Piccolo footprint di memoria (60K)Memoria minima totale = 160KProcessori 16/32-bitProcessori 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 19

Almeno 32K volatile per KVM runtime

Profili J2MEProfili J2ME

Ogni profilo definisce requisiti per una famiglia di dispositivi associati a uno specifico mercato verticaledispositivi associati a uno specifico mercato verticale

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

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

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

Profili disponibili:

Mobile Information Device Profile (MIDP)on top of CLDC. Include funzionalità GUI aggiuntive, supporto multimedia e gaming sicurezza end to end supporto esteso a

Piattaforme di Sviluppo - Sistemi Mobili M 20

multimedia e gaming, sicurezza end-to-end, supporto esteso a connettività di rete per telefoni mobili e PDA entry-level

Page 11: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Profili J2ME DisponibiliProfili J2ME Disponibili(continua )(continua )(continua…)(continua…)

…F d ti P filFoundation Profile

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

Personal Profileon top of CDC Assieme a Foundation Profile 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 XletAWT, supporto per applet e Xlet

Personal Basis Profileon top of CDC Fornisce un ambiente di sviluppo per applicazionion top of CDC. Fornisce un ambiente di sviluppo per applicazioni con connettività di rete e un livello elementare di supporto grafico alla presentazione contenuti

Piattaforme di Sviluppo - Sistemi Mobili M 21

MIDP: Requisiti HardwareMIDP: Requisiti Hardware

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

DisplayDisplaySchermo almeno 96x54 pixelDisplay depth (o color depth o bit per pixel) almeno pari a 1-bitF tt f i l ( t ti ) 1 1Fattore forma pixel (aspect ratio) = 1:1

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

NetworkinggTwo-wayWirelessGestione intermittenza

Piattaforme di Sviluppo - Sistemi Mobili M 22

Gestione intermittenzaBanda limitata

Page 12: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Architettura MIDPArchitettura MIDP

Original Equipment Manufacturer (OEM)

Applicazioni

MIDP

Applicazioni

OEM-Specific

Applicazioni Native

MIDP OEM Specific

Classi

OEM SpecificMIDP OEM-Specific

CLDC

SO Nativo + Software di Sistema

Piattaforme di Sviluppo - Sistemi Mobili M 23

Mobile Information Device (MID)

Libreria di ClassiLibreria di Classi

CLDCjava.lang

java.io

java utiljava.util

javax.microedition.io

MIDPMIDPjavax.microedition.lcdui

javax microedition midletjavax.microedition.midlet

javax.microedition.rms

Piattaforme di Sviluppo - Sistemi Mobili M 24

Page 13: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Modello Applicazioni MIDPModello Applicazioni MIDP

Applicazioni MIDP vengono indicate con il termine “MIDlet”termine MIDletModello MIDlet è per molti versi simile al modello applet in J2SE: modello

t t i ti i l di Pcomponente-container e gestione ciclo di vitaAnche supporto a sicurezza per applicazioni che

Pause

Ap

p

eAp

p

condividono risorse/dati (tramite MIDlet Suite)Ciclo di vita MIDlet descritto da transizioni di stato in stato, come indicato a fianco: Active

star

tA

pau

s

oyA

pp

stato in stato, come indicato a fianco:Start – acquisizione risorse e inizio esecuzionePause – rilascio risorse e ingresso stato di “quiescenza” (wait)

Active

tro

yAp

p des

tro

q ( )Destroy – rilascio risorse, distruzione thread e fine di tutte le attività

Java Application Manager (JAM) per Destroyed

des

t

Piattaforme di Sviluppo - Sistemi Mobili M 25

pp g ( ) pgestione ciclo di vita MIDlet

Tipico Stack Supporto J2METipico Stack Supporto J2ME

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

Your Pagine gialle orario

stack standardizzato, indipendenti da SO e dettagli hw

Mobile

YourMIDlet

Pagine gialle, orario treni e biglietteria, giochi, …

Mobile Information

Device Profile

UI, HTTP networking, ...

KVMCLDC = KVM + J2ME Core

J2ME core APIsSupporto thread, no floating pointKVM+ J2ME Core

API in questo esempio DSP chip

no floating point…

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

Piattaforme di Sviluppo - Sistemi Mobili M 26

esempio DSP chip(e.g., ARM)

Page 14: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

CLDC/MIDP: CLDC/MIDP: qualche Dettaglio su Package Principaliqualche Dettaglio su Package Principaliqualche Dettaglio su Package Principaliqualche Dettaglio su Package Principali

Packagejavax.microedition.ioj

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

javax microedition rms (persistent storage)javax.microedition.rms (persistent storage)

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

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

Cl i ti tiClassi per gestione eventi – Command e CommandListenerPiù importante: è per tutti ovvio, vero ☺, qual è il modello di threading sottostante?

Piattaforme di Sviluppo - Sistemi Mobili M 27

di threading sottostante?

Solito “Hello World” Solito “Hello World” in forma di MIDletin forma di MIDletin forma di MIDletin forma di MIDlet

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

public class HiMIDlet extends MIDlet {

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

}}

public void startApp() {i l i l ( hi ) ( b )Display.getDisplay(this).setCurrent(textbox);

}

bli id A () {}public void pauseApp() {}

public void destroyApp(boolean unconditional) {}}

Piattaforme di Sviluppo - Sistemi Mobili M 28

}

Page 15: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

MIDlet: MIDlet: Gestione Semplice GUIGestione Semplice GUIGestione Semplice GUIGestione Semplice GUI

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

public class HelloWorld extends MIDlet implements CommandListener {

i t F iprivate Form mainscreen;private Form detailsscreen;private Display myDisplay;private Command exitCommand;i d dprivate 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 29

MIDlet: MIDlet: Gestione Semplice GUIGestione Semplice GUI

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

Gestione Semplice GUIGestione Semplice GUI

g g ( , );

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

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

protected void pauseApp() { }

protected void destroyApp(boolean unconditional) { }

Piattaforme di Sviluppo - Sistemi Mobili M 30

Page 16: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

MIDlet: MIDlet: Gestione Semplice GUIGestione Semplice GUI

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

Gestione Semplice GUIGestione Semplice GUI

if (c == exitCommand) {destroyApp(false);notifyDestroyed(); }

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

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

}}

Piattaforme di Sviluppo - Sistemi Mobili M 31

MIDlet: MIDlet: un Esempio più Realisticoun Esempio più Realistico

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

un Esempio più Realisticoun Esempio più Realistico

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

i i i ipublic class PrimitiveMIDlet extends MIDletimplements CommandListener {

private Display mDisplay;i t F M i Fprivate Form mMainForm;

private Command mExitCommand, mConnectCommand;

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

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

Piattaforme di Sviluppo - Sistemi Mobili M 32

mExitCommand new Command( Exit , Command.EXIT, 0);mConnectCommand = new Command("Connect",

Command.SCREEN, 0);

Page 17: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

MIDlet: MIDlet: un Esempio più Realisticoun Esempio più Realistico

mMainForm.addCommand(mExitCommand);mMainForm.addCommand(mConnectCommand);

}

un Esempio più Realisticoun Esempio più Realistico

mMainForm.setCommandListener(this); }

mDisplay.setCurrent(mMainForm); }

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

}

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

Piattaforme di Sviluppo - Sistemi Mobili M 33

( g ) g ;byte[] raw = new byte[contentLength];int length = in.read(raw);

MIDlet: MIDlet: un Esempio più Realisticoun Esempio più Realistico

in.close();hc.close();

un Esempio più Realisticoun Esempio più Realistico

// Show the response to the user.String s = new String(raw, 0, length);Alert a = new Alert("Response", s, null, null);

i ( )a.setTimeout(Alert.FOREVER);mDisplay.setCurrent(a, mMainForm); }catch (IOException ioe) { Alert a = new Alert(

"E ti " i t St i () ll ll)"Exception", ioe.toString(), null, null);a.setTimeout(Alert.FOREVER);mDisplay.setCurrent(a, mMainForm); }

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

}}

Quali potenziali problemi in uno scenario reale di utilizzo?

Piattaforme di Sviluppo - Sistemi Mobili M 34

Page 18: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

MIDlet: MIDlet: un Esempio più Realisticoun Esempio più Realisticoun Esempio più Realisticoun Esempio più Realistico

Quali potenziali problemi in uno scenario reale di utilizzo?

N f db k GUI d t i t ll di t i hi tNessun feedback GUI durante intervallo di tempo richiesto per connessione => utente “spazientito” che genera altri comandi…

Più importante modello di threadingPiù 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 diCome 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

Piattaforme di Sviluppo - Sistemi Mobili M 35

La soluzione più sensata sarebbe quindi…

MIDlet: MIDlet: un Esempio più Realisticoun Esempio più Realistico

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

un Esempio più Realisticoun Esempio più Realistico

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

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

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

}

Quali potenziali problemi in questo caso?Quali potenziali problemi in questo caso?

Piattaforme di Sviluppo - Sistemi Mobili M 36

Page 19: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

MIDlet: MIDlet: un Esempio più Realisticoun Esempio più Realistico

Classe SingleWorker…

un Esempio più Realisticoun Esempio più Realistico

public synchronized void run() {while (mTrucking) {

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

}public synchronized void go() {

}notify(); }

Classe SingleMIDleti t j i *import java.io.*;…public class SingleMIDlet extends MIDlet implements CommandListener {private Display mDisplay;p p y p y;private Form mMainForm, mWaitForm;private SingleWorker mWorker;private Command mExitCommand, mConnectCommand, mCancelCommand;

Piattaforme di Sviluppo - Sistemi Mobili M 37

MIDlet: MIDlet: un Esempio più Realisticoun Esempio più Realistico

public void startApp() {mDisplay = Display.getDisplay(this);if ( M i F ll) {

un Esempio più Realisticoun Esempio più Realistico

if (mMainForm == null) {//preparazione form…mWorker = new SingleWorker(this, url);gmWorker.start(); }

mDisplay.setCurrent(mMainForm); }

public void commandAction(Command c Displayable s) {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) {

Piattaforme di Sviluppo - Sistemi Mobili M 38

{mWorker.stop();

} …

Page 20: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

J2ME: Tipologie di J2ME: Tipologie di Connessione Web SupportateConnessione Web SupportateConnessione Web SupportateConnessione Web Supportate

HTTP/HTTPSSemplice da utilizzareSemplice 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 eventi i li t i t ti d SAXai listener registrati, ad es. SAX

Pull: fa parsing di una porzione di documento alla volta, restituendo singolo elemento o tag

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

Piattaforme di Sviluppo - Sistemi Mobili M 39

( )

Esercitazione su J2ME:Esercitazione su J2ME:Come si Progetta Applicazione MIDletCome si Progetta Applicazione MIDletCome si Progetta Applicazione MIDletCome si Progetta Applicazione MIDlet

Identificare i dispositivi targetId tifi i fili t ti d i di iti iIdentificare i profili supportati da quei dispositiviSviluppare applicazione

Ad esempio se in forma di MIDlet perché supportatoAd esempio, se in forma di MIDlet perché supportato CLDC/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 suPossibilità di esecuzione per validazione e testing su emulatori MIDP

Ad esempio si può utilizzare J2ME Wireless Toolkit e ktoolbarper creare un progetto progettare implementare configurare eper creare un progetto, progettare, implementare, configurare e validare la MIDletProbabilmente sarete più comodi a utilizzare Eclipse ME htt // li /

Piattaforme di Sviluppo - Sistemi Mobili M 40

http://eclipseme.org/

Page 21: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Ad es. Nokia J2ME SDKAd es. Nokia J2ME SDK

Piattaforme di Sviluppo - Sistemi Mobili M 41

Ricordatevi: Ricordatevi: Processo Caricamento MIDletProcesso Caricamento MIDletProcesso Caricamento MIDletProcesso Caricamento MIDlet

JAM

Downloads

User

Selects

Advertise

App on Downloads

App

Selects

App

App on

Web Page

Web Page

Network Transfer Java Application

Manager

(Name,

Version,

Size,

Descriptor

FileS e,

…)

Jar File

Piattaforme di Sviluppo - Sistemi Mobili M 42

Jar File

Page 22: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Esercitazione su J2ME:Esercitazione su J2ME:Come si Progetta Applicazione MIDletCome si Progetta Applicazione MIDletCome si Progetta Applicazione MIDletCome si Progetta Applicazione MIDlet

Realizzare una piccola MIDlet context-dependent (ad i di f l i di i id diff ti desempio, capace di fare playing di suoni o video differenti a seconda

della locazione corrente dell’utente), sfruttando funzionalità definite in JSR 135 (nota anche come Mobile Media APIdefinite in JSR 135 (nota anche come Mobile Media API,

http://java.sun.com/products/mmapi/) e JSR 179 (nota anche come Location API, diverse implementazioni più o meno “f il t ” di ibili d htt // d l / / l i/)“facilmente” disponibili, ad es. http://code.google.com/p/openlapi/)

Utilizzare a propria scelta strumenti di sviluppo come J2MEUtilizzare, 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 43

p ogettua e

Cenni sul Modello di SicurezzaCenni sul Modello di Sicurezza

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

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

Quindi, come implementare una qualche soluzione di sicurezza per J2ME?

Linea guida - dividere il problema in due parti:

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

Sicurezza a livello applicativoModello sandbox

Piattaforme di Sviluppo - Sistemi Mobili M 44

Page 23: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Sicurezza:Sicurezza:Verificatore di Class File a 2 FasiVerificatore di Class File a 2 FasiVerificatore di Class File a 2 FasiVerificatore di Class File a 2 Fasi

Verifica off-deviceSt t ifi i tt ib t “ t k ”Strumento 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 su un sistema server o desktop prima che class file sia scaricato sul dispositivo mobile“stack map” aiuta poi a rendere più efficiente verifica in-devicep p p

più veloceminore codice in VM e minore consumo memoria

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

Piattaforme di Sviluppo - Sistemi Mobili M 45

salto incondizionato)

Sicurezza:Sicurezza:Verificatore di Class File a 2 FasiVerificatore di Class File a 2 FasiVerificatore di Class File a 2 FasiVerificatore di Class File a 2 Fasi

Stack map attribute accresceaccresce dimensione di classfile di circa 5%circa 5%

Piattaforme di Sviluppo - Sistemi Mobili M 46

Page 24: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Sicurezza a Livello Applicativo: Sicurezza a Livello Applicativo: Modello SandboxModello SandboxModello SandboxModello Sandbox

Applicazioni (MIDlet ma non solo) devono eseguire in un ambiente chiuso da cui possono avere accesso solo alleambiente chiuso da cui possono avere accesso solo alle API definite da configurazione, profilo e da classi licenziate supportate dal dispositivosupportate dal dispositivo

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

Più ifi t d ll db MIDl t dPiù specificamente modello sandbox per MIDlet prevede:Class file devono essere stati adeguatamente verificati (garanzia di essere validi))Garanzia che sono disponibili all’applicazione solo le API definite da CLDC, profilo e classi di estensione licenziateDownload applicazione avviene a livello cosiddetto nativoDownload applicazione avviene a livello cosiddetto nativo(native code level) tramite Java Application Manager (JAM)Vietato fare overriding del meccanismo di class loading standardVi t t l’ i i di f i i ti h VM ò tili

Piattaforme di Sviluppo - Sistemi Mobili M 47

Vietato l’accesso a insieme di funzioni native che VM può utilizzare

Android: Architettura

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

Livelli:Livelli:

Linux kernel

Librerie (native Linux)Librerie (native Linux)

+ Android runtime

(Dalvik VM + librerie

core)

Application

FrameworkFramework

Applicazioni

Piattaforme di Sviluppo - Sistemi Mobili M 48

Page 25: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Android: Architettura

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

LibrariesLibrariesin linguaggio nativo (C/C++)

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

Application FrameworkApplication 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 49

Android: curiosità su evoluzione versionicuriosità su evoluzione versioni

Piattaforme di Sviluppo - Sistemi Mobili M

Page 26: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Android: curiosità su evoluzione versionicuriosità su evoluzione versioni

Ice Cream Sandwich 4.0.1 (Ottobre 2011)Linux kernel 3 0 1; launcher personalizzabile; App "Contatti" conLinux kernel 3.0.1; launcher personalizzabile; App Contatti con

integrazione social network; Android Beam (scambio di dati tramite NFC); Wi-Fi Direct, etc. etc.

Jelly Bean 4.1.1 (Giugno 2012)Linux kernel 3.1.10; nuove funzionalità per condivisione foto/video tramite

NFC; riconoscimento vocale avanzato; abbandono ufficiale al supportoNFC; riconoscimento vocale avanzato; abbandono ufficiale al supporto Adobe Flash, etc. etc.

Kitkat 4 4 (Novembre 2013)Kitkat 4.4 (Novembre 2013)NFC host card emulation; funzionalità estese per listener service; sensor

batching & step detector/counter API; nuova runtime VM (ART, ancorasperimentale); Bluetooth Message Access Profile (MAP); accessosperimentale); Bluetooth Message Access Profile (MAP); accessodisabilitato a statistiche batterie per applicazioni third-party

K Li Pi 5 0 ( iù 2013 )

Piattaforme di Sviluppo - Sistemi Mobili M

Key Lime Pie 5.0 (non più 2013…)Nuova versione Linux kernel; interfaccia grafica aggiornata, ???

Android:SO Kernel Layer

Kernel Linux 2.6Hardware Abstraction

Estensioni kernelAshmem: gestore della memoria

SO Kernel Layer

Hardware Abstraction Layer (HAL)Gestione memoriaG i i

Ashmem: gestore della memoria condivisa; reference counting e deallocazione automatica da parte del kernel

Gestione processiNetwork stackPower management t d d Li

Binder IPC: minimo overhead grazie all’uso di Ashmem (maggiore disciplina di accesso tramite descrittore di blocco di memoria)

standard Linux…

memoria)Power Management avanzato: uso di varie politiche di gestione energia attraverso i WakeLock

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

Piattaforme di Sviluppo - Sistemi Mobili M 52

52Completo supporto utility standard Linux

Page 27: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Power Management e WakeLocke WakeLock

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

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

Tramite WakeLock: lock di accesso alle funzionalità di Power Manager (diverse tipologie di WakeLock). Ad es:O id… @Override

protected void onCreate(Bundle savedInstanceState) {PowerManager pm = (PowerManager)

getSystemService(Context POWER SERVICE);getSystemService(Context.POWER_SERVICE);wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,

"DoNotDimScreen"); }

@Override

Piattaforme di Sviluppo - Sistemi Mobili M 53

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

Android:Librerie Native e Dalvik VM

Librerie native per grafica e multimedia

Librerie Native e Dalvik VM

3D Surface3D Surface3D Surface3D Surface SurfaceSurfaceSurfaceSurface FrameFrameFrameFramegrafica e multimedia2D Surface2D Surface2D Surface2D Surface

FlingerFlingerFlingerFlinger BufferBufferBufferBuffer

App App App App

CCamerM di M di

Media Server

CCamerM di M di CCamerM di M di

Media Server

Audio FlingerAudio Audio FlingerFlinger

Camera

Service

Camera

Service

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

Camera

Service

Camera

Service

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

Camera

Service

Camera

Service

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

Surface Manager + Media Framework

CameraCameraOpenCOREOpenCOREVorbisVorbis MIDIMIDI CameraCameraOpenCOREOpenCOREVorbisVorbis MIDIMIDI CameraCameraOpenCOREOpenCOREVorbisVorbis MIDIMIDI

Dalvik VMprogettata per dispositivi mobili: registry-based (sfrutta l’architetturaprogettata 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)

Piattaforme di Sviluppo - Sistemi Mobili M 54

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

Page 28: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Android: Application FrameworkApplication Framework

Activity ServiceActivityUna singola azione che l’utente può

compiere attraverso una finestra (corrisponde di solito ad una schermata)

ServiceIn esecuzione in background (no

interazione con utente come activity)Utilizzabile da 1+ componentischermata)

È componente fondamentale in Android

Ad es. home activity

pNo processo/thread dedicato in

background

IntentMassima riusabilità delle activity

Broadcast ReceiverRisponde agli Intent compatibiliMassima riusabilità delle activity

Richiesta di compiere un’operazione (ad es. selezione numero telefonico)Raccolta da un componente che ha

Risponde agli Intent compatibili eseguendo le operazioni previsteIn genere, azioni di notifica

(chiamata, sms)

Piattaforme di Sviluppo - Sistemi Mobili M 55

pun Intent Filter compatibile

( , )Ciclo di vita limitato alla risposta

Android: Application Framework

Package e Activity ManagerGestiscono cicli di vita delle Activity e delle app contenute in Android Package

pp

Gestiscono 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 esu classe View, ovvero componenti grafici che interagiscono con l utente e responsabili della gestione degli eventi (no Java Swing e AWT)

Resource Manager e Content Provider

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

Piattaforme di Sviluppo - Sistemi Mobili M 56

Consentono di accedere alle funzionalità telefoniche, di notifica e di localizzazione

Page 29: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Android: Core Application

Core ApplicationA li i i i ( t d ll di i h

pp

Applicazioni 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?threading?Gestione messaggisticaApplicativo cliente per emailR b i t ttiRubrica contattiGestione mappeBrowser Web: browser engine WebKit

Applications

(open-source); utilizzato anche in Safari e Google Chrome Solo browser engine (parser HTML +

Piattaforme di Sviluppo - Sistemi Mobili M 57

g (prenderer + motore JavaScript)

Ciclo di Vita di una Activity

È il componente attraverso cui avviene l’interazione con l’utente

OnCreate()L’activity torna in

primo piano

e

Estende classe Java Activity

In genere sono in esecuzione tante activity in contemporanea: quella attiva

OnStart()

OnResume()OnRestart()

OnRestoreInstanceState(Bundle)

Bun

dle

activity in contemporanea: quella attiva (in RUNNING) è però unica. Se è visibile ma non attiva, è PAUSED, altrimenti STOPPED

RUNNING

a) Nuova activity b) Tasto back

L’activity torna in primo piano

L’activity torna in primo piano

INACTIVE(KILLED)

altrimenti STOPPEDPer gestire il ciclo di vita è possibile ridefinire i metodi di callback O C t O St t O R

OnPause()

OnSaveInstanceState(Bundle)

OnCreate, OnStart, OnResume,…Le activity impegnano risorse: una activity può essere deallocata per

PAUSED

Activity non più visibile

Risorse di memoria scarse

mancanza di risorse→ stato KILLEDAndroid dispone di un contenitore di informazioni Bundle, con cui è

STOPPED

OnStop()

O D ()

Piattaforme di Sviluppo - Sistemi Mobili M 58

possibile salvare lo stato da ripristinare alla riallocazione

OnDestroy()

INACTIVE

Page 30: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Concetto di Conversazione:Android TaskAndroid Task

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

Activity sono diverse dalle formdevono essere semplici

Contatti

Dialer

devono essere semplicidevono essere usabili e riusabili

→ è necessario strutturare activity a formare una conversazione complessa con utente

App Dialer

processo Dialer

una conversazione complessa con utente (come per pagine Web)

Un task modella una conversazionecontiene stack di activity anche di

MyActivityTASK

top dello contiene stack di activity, anche di app diverse: in cima c’è activity del task attivaA t di ti it l i i

processo it.mypackage

MyActivity

Contatti

root activity

top dello stack

Apertura di una activity la pone in cima allo stack; sua chiusura la rimuove dallo stack

MyFirstProject

Piattaforme di Sviluppo - Sistemi Mobili M 59

può essere in foreground o in background

Intent e Intent Filter

Attivazione di un componente avviene tramite un Intent(di solito per passare da una activity alla successiva)(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;implicito: 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 eseguital 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 intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse(“http://www.unibo.it”));

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

Piattaforme di Sviluppo - Sistemi Mobili M 60

Intent repository su www.openintents.org

Page 31: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Intent e Intent Filter

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

LAUNCHER" />t d id "it k i t t

Esempio di file<category android:name="it.mypackage.intent.

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

di file manifest

{

y yp</intent-filter>

</activity>

protected void onCreate(Bundle savedInstanceState) {...Intent intent = new Intent(); intent.setAction(MY_ACTION);intent.addCategory(Intent.CATEGORY ALTERNATIVE);intent.addCategory(Intent.CATEGORY_ALTERNATIVE);intent.addCategory(Intent.CATEGORY_BROWSABLE);Uri uri = Uri.parse("content://it.mypackage/items/");intent.setData(uri);

/ l t

Piattaforme di Sviluppo - Sistemi Mobili M 61

intent.setType("vnd.android.cursor.item/vnd.mytype");startActivity(intent); ... }

analogamente startService(intent);

Modello di Threading in Android

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

1 applicazione: 1 thread di sistema “prestato” ad app: più activity

Possibilità di salvare stato in info bundle (non troppo dissimile da ( ppmodello 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

Page 32: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

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 ( p ) ) (p )per ogni singola applicazione

Default è la seconda opzione: ogni applicazione viene messa in VM separata (processo separato) anche quando si effettuaseparata (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 forzareSe si desidera risparmiare in utilizzo risorse di sistema, occorre forzare che differenti applicazioni condividano stesso userID

Android.sharedUserId=“PaoloBellavista” in file manifest

Piattaforme di Sviluppo - Sistemi Mobili M 63

Quali potenziali problemi di sicurezza?

Esempio: Sviluppo di un Launcher Sostitutivo di HomeSostitutivo di Home

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

Una home custom si crea nel modo seguente:

p p pp q ppersonalizzare il sistema con la propria home

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

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

Manager4 Scelta delle sole app che presentano un4. Scelta delle sole app che presentano un

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

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

Intent

Piattaforme di Sviluppo - Sistemi Mobili M 64

7. Associazione dell’evento alla View

Page 33: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Esempio: Sviluppo di un Launcher Sostitutivo di Home

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

bli id C (B dl dI S ) {

Sostitutivo di Home

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

findViewById(R.id.activitiesList);

// P i 3 4 i l i I t tFilt// Passi 3 e 4: ricerca app e selezione su IntentFilterIntent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY LAUNCHER);g y _ ;PackageManager pkgManager = getPackageManager();List<ResolveInfo> activities =

pkgManager.queryIntentActivities(intent, 0);…

Piattaforme di Sviluppo - Sistemi Mobili M 65

Esempio: Sviluppo di un Launcher Sostitutivo di Home

…for (ResolveInfo resolveInfo activities) {

Sostitutivo di Home

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) {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);}});startActivity(intent);}});

activitiesList.addView(button);}}}

Piattaforme di Sviluppo - Sistemi Mobili M 66

Page 34: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Esempio: Sviluppo di un LauncherSostitutivo di Home

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

Sostitutivo di Home

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

<intent-filter> <!-- Passo 2 --><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></intent filter></activity></application></manifest>

Piattaforme di Sviluppo - Sistemi Mobili M 67

Esempio di BroadcastReceiver (1)

……import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; i d id ibimport android.os.Vibrator; import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver { pub c c ass y oadcast ece e e te ds oadcast ece e {@Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, “Your time is up!!!!.", Toast.LENGTH_LONG).show(); // Vib h bil h// Vibrate the mobile phoneVibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(2000); ( );} }

Piattaforme di Sviluppo - Sistemi Mobili M 68

Page 35: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Esempio di BroadcastReceiver (2)

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

... ><uses-sdk android:minSdkVersion="15" /><uses-permission android:name="android.permission.VIBRATE" ></uses-permission>/ p

<applicationandroid:icon="@drawable/icon“

d id l b l "@ t i / "android:label="@string/app_name" ><activity

android:name=".AlarmActivity“android:label="@string/app name" >g/ pp_<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />/i t t filt</intent-filter>

</activity>

<receiver android:name="MyBroadcastReceiver" >

Piattaforme di Sviluppo - Sistemi Mobili M 69

y</receiver>

</application> …

Esempio di BroadcastReceiver (3)

public class AlarmActivity extends Activity {

@O id@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main); }( y ); }

public void startAlert(View view) {EditText text = (EditText) findViewById(R.id.time);i t i I t I t(t t tT t() t St i ())int i = Integer.parseInt(text.getText().toString());Intent intent = new Intent(this, MyBroadcastReceiver.class);PendingIntent pendingIntent = PendingIntent.getBroadcast

(this.getApplicationContext(), 234324243, intent, 0);g ppAlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_

SERVICE);alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()

(i * 1000) di I t t)+ (i * 1000), pendingIntent);Toast.makeText(this, "Alarm set in " + i + " seconds",

Toast.LENGTH_LONG).show();}

Piattaforme di Sviluppo - Sistemi Mobili M 70

}

}

Page 36: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Sicurezza in Android(in una slide)(in una slide)

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?

Id tifi t i di ti d i t ll d fi itIdentificatori 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 controllatiPermessi a livello di processo sono assegnati e controllati in dipendenza da user ID & group ID assegnati ai processi. Usualmente che cosa vi aspettate?

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

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

<uses permission id "android permission RECEIVE SMS" />

Piattaforme di Sviluppo - Sistemi Mobili M 71

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

Esercitazione su AndroidEsercitazione su Android

Realizzare una piccola Android App context-dependent (ad esempio capace di fare playing di brani audio/video differenti aesempio, 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 L i MLocation 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”

Piattaforme di Sviluppo - Sistemi Mobili M 72

Potenza Segnale Ricevuto per Piattaforma Android -http://lia.deis.unibo.it/Courses/sm1112-info/esercizi.html

Page 37: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Numerose Sorgenti Disponibiliper Info Addizionaliper Info Addizionali

Numerosi libri su Android:

R Meier “Professional Android 2 Application Development”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 descrizione delle API disponibili, di applicazioni di esempio, …

htt //d l d id / dk/i d ht lhttp://developer.android.com/sdk/index.html

Altra documentazione è disponibile alla descrizione degli strumenti di ilsviluppo

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

Piattaforme di Sviluppo - Sistemi Mobili M 73

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

iOS (o iPhoneOS):iOS (o iPhoneOS):una Velocissima Panoramicauna Velocissima Panoramicauna Velocissima Panoramicauna Velocissima Panoramica

Approccio per molti versi simile ad Android in termini di realizzazione di ampio ecosistema con modello direalizzazione di ampio ecosistema con modello di sviluppo + 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:

Eventi e controlli multi-touch

Accelerometro

Localization (i18n)

Embedded SQLite database

Core Location (GPS, Skyhook WiFi, …)

ThreadLocalization (i18n)

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

Thread

Power management

File system

Security

SDK contiene anche iPhone Simulator, uno strumento per emulare look&feel di iPhone su desktop sviluppatore. Non è un emulatore vero e proprio:

Networking Security

Piattaforme di Sviluppo - Sistemi Mobili M 74

esegue codice generato per altro target (x86)

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

Page 38: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

iOS (o iPhoneOS):iOS (o iPhoneOS):Regole Regole RegoleRegole Regole RegoleRegole Regole Regole…Regole Regole Regole…

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.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 , , j y p y gDocumented APIs

3.3.2 — An Application may not itself install or launch other executable code by any means, including without limitation through the use of a plug-incode 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 p y ppinterpreter(s)

Lo stesso SDK può essere scaricato gratuitamente ma richiede iscrizione a iPhone Developer Program se si vuole rilasciare software (pagamento + approvazione Apple)

Apple non ha annunciato nessun piano per piattaforma Java su iPhone;

Piattaforme di Sviluppo - Sistemi Mobili M 75

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

iOS MultitaskingiOS Multitasking

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

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

iOS come sistema aperto?

O S

iOS Android

Open Source NO YES

Write anything you want NO YES

Piattaforme di Sviluppo - Sistemi Mobili M 76

Device Homogeneity YES NO

Page 39: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Sviluppare per iOS:Primi PassiPrimi Passi

Per cominciare:

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

Effettuare download di iOS SDK, che include :X dXcode

Strumento di emulazione iPhone

Strumenti di monitoraggioStrumenti di monitoraggio

Interface builder

Nota: applicazioni sono soggette all’approvazione di Apple (parte i d ll’ d SDK d l d) l fi di f diintegrante dell’accordo per SDK download) al fine di fare test di affidabilità e altre analisi…

Applicazioni possono essere rifiutate se giudicate di "limited utility"

Piattaforme di Sviluppo - Sistemi Mobili M 77

pp p g y

Alternative per Sviluppo su iOS

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

Alternative:Alternative:

Web application che utilizzano tecnologie AJAX/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

Piattaforme di Sviluppo - Sistemi Mobili M 78

“jailbreaking”?

Page 40: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

Unlocking & Jailbreaking

Strettamente parlando, unlocking e jailbreaking sono processidiversi e distintidiversi e distintiUnlocking è il processo tramite cui dispositivo è reso compatibile con reti telefoniche per cui non era stato specificatamente licenziato(superamento locking con operatore dedicato)(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). F ifi di it di i il i di iForma 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:Per chi si voglia divertire con proprio iPhone, strumenti:PwnageTool, QuickPwn, Yellowsn0w http://blog.iphone-dev.org/

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

Li iPh htt // i h li /i d h /M i P

Piattaforme di Sviluppo - Sistemi Mobili M 79

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

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

iOS:AJAX & JavaScriptAJAX & JavaScript

AJAX (“forse” Asynchronous JavaScript and XML): insieme di tecniche interrelate per sviluppo di applicazioni Web altamentetecniche interrelate per sviluppo di applicazioni Web altamente interattive (rich Internet application)

Possibilità di data retrieval asincrono in background, senza i t f i t t i li i i tinterferire con comportamento e visualizzazione pagina corrente

Per certi versi, applet come precursori di AJAX

Con browser Safari, possibilità di applicazioni Web fortemente , p ppinterattive e “native looking”

D d li t i ll’ tili li i i W b iDomanda: quali vantaggi nell’utilizzare applicazioni Web invece di applicazioni native?

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

Piattaforme di Sviluppo - Sistemi Mobili M 80

Page 41: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

iOS:AJAX & JavaScript

Anche proposte che hanno avuto successo in termini di standardi a ione Ad i

AJAX & JavaScript

standardizzazione. Ad esempio:

Elemento canvas come estensione JavaScript third-party che permette rendering dinamico di immagini bitmapg g p

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

Standardizzato da WHATWG (vedi ultimo lucido) per le nuove proposte diStandardizzato da WHATWG (vedi ultimo lucido) per le nuove proposte di specifica verso HTML5

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

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

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

Piattaforme di Sviluppo - Sistemi Mobili M 81

canvas.html

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

HTML5 in HTML5 in unauna SlideSlide

Ancora, la questione fondamentale è vantaggi&svantaggi di

Applicazioni Web vs. applicazioni nativeApplicazioni Web vs. applicazioni native

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

W3C tramite il suo Web Hypertext Application Technology Working GroupW3C, 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?Quanto supportati al momento attuale?

Migliore gestione struttura documentiProvate a guardare:

// / / / ( f )

Piattaforme di Sviluppo - Sistemi Mobili M 82

http://dev.w3.org/html5/spec/ (draft 8 Aprile 2013)http://slides.html5rocks.com/

Page 42: Sistemi Mobili Mlia.deis.unibo.it/Courses/sm1314-info/lucidi/04-platform(2x).pdf · Piattaforme di Sviluppo - Sistemi Mobili M 20 multimedia e gaming, sicurezza end- -end, supporto

J2ME su iPhone:alcheMoalcheMo

Abbiamo già detto NO supporto ufficiale a Java

C ibil i li i i J iPh dComunque possibile eseguire applicazioni Java su iPhone, dopo jailbreaking, installazioni varie, ...

Strumenti di conversione sorgente:

ad esempio, alcheMo è in grado di convertire automaticamente applicazioni J2ME per iPhone utilizzando un ampio sottoinsieme diapplicazioni J2ME per iPhone, utilizzando un ampio sottoinsieme di funzionalità 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 iPhone Processo di traduzione automatica rapido, senza requisiti di skill specifici ed esperienza di sviluppo su iPhone

Piattaforme di Sviluppo - Sistemi Mobili M 83

p pp

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