Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
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?
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
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)?
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
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)
Piattaforme di Sviluppo - Sistemi Mobili M 11
Un Primo ConfrontoUn Primo Confronto
Piattaforme di Sviluppo - Sistemi Mobili M 12
Un Primo ConfrontoUn Primo Confronto
Piattaforme di Sviluppo - Sistemi Mobili M 13
Un Primo ConfrontoUn Primo Confronto
Piattaforme di Sviluppo - Sistemi Mobili M 14
Un Primo ConfrontoUn Primo Confronto
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
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.”
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
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
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
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
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) {}}
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
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
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?
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?
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
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/
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
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
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
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
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
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(); }
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
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
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
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
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?
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
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
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
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
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
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”?
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/
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/
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