android_ saturday, jan. 25th - instapaper

38
Archive All • Download Newest android Java it.wikipedia.org app it.wikipedia.org android it.wikipedia.org

Upload: rosarita-saudelli

Post on 22-Oct-2015

36 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Android_ Saturday, Jan. 25th - Instapaper

Archive All • Download Newest

android

Javait.wikipedia.org appit.wikipedia.org androidit.wikipedia.org

Page 2: Android_ Saturday, Jan. 25th - Instapaper

Archive All • Download Newest

Java

it.wikipedia.org SPECIAL_IMAGE-http://upload.wikimedia.org/wikipedia/it/thumb/2/2e/Java_Logo.svg/96px-Java_Logo.svg.png-REPLACE_ME Java Logo.svg Java Autore James Gosling, Sun Microsystems Data di origine 1995 Utilizzo General purpose Paradigmi Orientato agli oggetti Tipizzazione Forte Specifiche di linguaggio The Java Language Specification, Java SE 7 Edition Estensioni comuni jav, java Influenzato da Ada 83, C++, Eiffel, Generic Java, Mesa, Modula-3, Oberon, Objective-C, UCSD Pascal, Smalltalk Ha influenzato Ada 2005, BeanShell, C#, Clojure, D, ECMAScript, Groovy, J#, JavaScript, PHP, Python, Scala, Seed7, Vala Implementazione di riferimento Implementazione interprete con JITter Sistema operativo Windows, Linux, Mac OS X Licenza GNU General Public License, Java Community Process Sito web Per sviluppatori Java Java è un linguaggio di programmazione orientato agli oggetti, creato da James Gosling e altri ingegneri di Sun Microsystems. Java è un marchio registrato di Oracle.[1] Un buon punto di partenza per imparare Java è il tutorial ufficiale[2]. SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/1/14/James_Gosling_2008.jpg/220px-James_Gosling_2008.jpg-REPLACE_ME Java è stato creato a partire da ricerche effettuate alla Stanford University agli inizi degli anni Novanta. Nel 1992 nasce il linguaggio Oak (in italiano "quercia"), prodotto da Sun Microsystems e realizzato da un gruppo di esperti sviluppatori capitanati da James Gosling.[3] Tale nome fu successivamente cambiato in Java a causa di un problema di copyright (il linguaggio di programmazione Oak esisteva già).[4] Per facilitare il passaggio a Java ai programmatori old-fashioned, legati in particolare a linguaggi come il C++, la sintassi di base (strutture di controllo, operatori e così via) è stata mantenuta pressoché identica a quella del C++[5][6]; tuttavia, non sono state introdotte caratteristiche ritenute fonti di una complessità non necessaria a livello di linguaggio e che favoriscono l'introduzione di determinati bug durante la programmazione, come l'aritmetica dei puntatori, l'ereditarietà multipla delle classi, e l'istruzione goto.[7] Per le caratteristiche orientate agli oggetti del linguaggio ci si è ispirati al C++ e soprattutto all'Objective C.[8] In un primo momento Sun decise di destinare questo nuovo prodotto alla creazione di applicazioni complesse per piccoli dispositivi elettronici; fu solo nel 1993 con l'esplosione di internet che Java iniziò a farsi notare come strumento per iniziare a programmare per internet. Contemporaneamente Netscape Corporation annunciò la scelta di dotare il suo allora omonimo e celeberrimo browser della Java Virtual Machine (JVM). Questo segna una rivoluzione nel mondo di Internet: grazie alle applet, le pagine web diventarono interattive a livello client (ovvero le applicazioni vengono eseguite direttamente sulla macchina dell'utente di internet, e non su un server remoto). Gli utenti poterono per esempio utilizzare giochi direttamente sulle pagine web ed usufruire di chat dinamiche e interattive. Java fu annunciato ufficialmente il 23 maggio 1995 a SunWorld. Il 13 novembre 2006 la Sun Microsystems ha distribuito la sua implementazione del compilatore Java e della macchina virtuale (virtual machine) sotto licenza GPL. Non tutte le piattaforme java sono libere. L'ambiente Java libero si chiama IcedTea.[9] L'8 maggio 2007 Sun ha pubblicato anche le librerie (tranne alcune componenti non di sua proprietà) sotto licenza GPL, rendendo Java un linguaggio di programmazione la cui implementazione di riferimento è libera.[10] Il linguaggio è definito da un documento chiamato The Java Language Specification (spesso abbreviato JLS). La prima edizione del documento è stata pubblicata nel 1996.[11] Da allora il

Page 3: Android_ Saturday, Jan. 25th - Instapaper

linguaggio ha subito numerose modifiche e integrazioni, aggiunte di volta in volta nelle edizioni successive. Ad oggi, la versione più recente delle specifiche è la Java SE 7 Edition (quarta).[11] Java venne creato per soddisfare quattro scopi:[12] essere orientato agli oggetti; essere indipendente dalla piattaforma; contenere strumenti e librerie per il networking; essere progettato per eseguire codice da sorgenti remote in modo sicuro. I programmi scritti in linguaggio Java, dopo una fase iniziale di compilazione con ottenimento del cosiddetto bytecode, sono destinati all'esecuzione sulla piattaforma Java attraverso una fase di interpretazione (per questo motivo il linguaggio Java è detto anche semi-interpretato) ad opera di una Java Virtual Machine e, a tempo di esecuzione, avranno accesso alle API della libreria standard. Questi due step forniscono un livello di astrazione che permette alle applicazioni di essere interamente indipendenti dal sistema hardware su cui esse saranno eseguite. Un'implementazione della piattaforma java è il Java Runtime Environment (JRE), necessario per l'esecuzione del programma compilato, mentre per lo sviluppo dei programmi in Java a partire dal codice sorgente è necessario il Java Development Kit (JDK) che include anche il JRE. SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Java-jvm.png/220px-Java-jvm.png-REPLACE_ME L'esecuzione di programmi scritti in Java deve avere un comportamento simile in contesti di esecuzione diversi. Per raggiungere questo obiettivo, si lavora su livelli diversi, e il primo di essi è naturalmente il linguaggio, il quale è stato progettato appositamente proprio per questo scopo. Ad esempio, esso fornisce una sintassi unificata per definire le sezioni critiche, compito che in altri linguaggi si svolge tipicamente ricorrendo a librerie di terze parti o primitive di sistema.[13] Inoltre, praticamente non lascia spazio ai comportamenti non definiti (undefined behavior) o dipendenti dall'implementazione dell'ambiente di esecuzione. Le specifiche di linguaggio richiedono un ambiente di esecuzione che vigila sull'esecuzione del programma e che proibisce determinate operazioni che altrimenti risulterebbero insicure. Esse fanno riferimento esplicito alla Java Virtual Machine, indicandola come il destinatario tipico del bytecode prodotto dalla compilazione iniziale di un programma Java, e infatti il compilatore javac incluso nel JDK compila proprio in bytecode. Tuttavia, è possibile la compilazione verso architetture diverse, e infatti è possibile produrre codice oggetto specifico di un certo sistema operativo, servendosi di un compilatore apposito, ad esempio il GNU Compiler Collection. In linea di principio, si dovrebbe essere in grado di scrivere il programma una sola volta e di farlo eseguire dovunque (di qui il famoso slogan di Sun: "write once, run everywhere"). La portabilità è un obiettivo tecnicamente difficile da raggiungere, e il successo di Java in questo ambito è materia di alcune controversie. Sebbene sia in effetti possibile scrivere in Java programmi che si comportano in modo consistente attraverso molte piattaforme hardware diverse, bisogna tenere presente che questi poi dipendono dalle macchine virtuali che sono, a loro volta, programmi a sé e che hanno inevitabilmente i loro bug, diversi l'una all'altra: per questo è nata una parodia dello slogan di Sun "Write once, run everywhere" ("Scrivi una volta, esegui ovunque"), che è diventato "Write once, debug anywhere" ("Scrivi una volta, correggi ovunque").[14] Il linguaggio in sé definisce solo una minima parte delle librerie utilizzabili in combinazione con il linguaggio stesso. La parte restante è definita dalla piattaforma sulla quale il programma sarà eseguito. La Oracle mette a disposizione tre piattaforme ufficiali: In aggiunta, il programmatore può utilizzare un numero arbitrario di librerie di terze parti. Per approfondire, vedi Applet Java. La piattaforma Java fu uno dei primi sistemi a fornire un largo supporto per l'esecuzione del codice da sorgenti remote. Un Java applet è un particolare tipo di applicazione che può essere avviata all'interno del browser dell'utente, eseguendo codice scaricato da

Page 4: Android_ Saturday, Jan. 25th - Instapaper

un server web remoto. Questo codice viene eseguito in un'area (sandbox) altamente ristretta, che protegge l'utente dalla possibilità che il codice sia malevolo o abbia un comportamento non desiderato; chi pubblica il codice può applicare un certificato che usa per firmare digitalmente le applet dichiarandole "sicure", dando loro il permesso di uscire dall'area ristretta e accedere al filesystem e al network, presumibilmente con l'approvazione e sotto il controllo dell'utente. In realtà gli applet non hanno avuto molta fortuna. Infatti presuppone che il client in cui essi vengono eseguiti abbia installata la JRE (deve eseguire il codice dell'applet). Hanno avuto fortuna le applicazioni che prevedono il cosiddetto thin-client, cioè un client 'leggero' che non ha bisogno di particolari strumenti per eseguire il codice remoto (a volte è necessario solo il browser). Segue il codice sorgente di un semplice programma che stampa il testo "Hello world" sulla console. Come si evince un programma minimale in Java deve obbligatoriamente contenere la definizione di classe tramite la parola chiave class seguita dal nome_classe e il metodo main o metodo principale nonché entry point del programma in cui vengono definite variabili globali, oggetti e richiamati metodi statici su variabili e/o dinamici sugli oggetti. Nell'esempio soprastante il main contiene l'istruzione per la stampa a video della stringa Hello Word ma, pur essendo perfettamente funzionante e semplice da comprendere, non viene sfruttata la filosofia ad oggetti che viene normalmente applicata ad ogni programma scritto in Java. Segue quindi il codice sorgente di un programma che svolge lo stesso compito del precedente, ma usando la programmazione orientata agli oggetti. Il metodo main affida la stampa del messaggio a un oggetto creato apposta per questo compito, su cui è invocato il metodo dinamico print definito prima del main assieme al costruttore della classe ovvero quel particolare metodo (con ugual nome della classe) che serve per inizializzare l'attributo della classe toPrint dell'oggetto creato/istanziato nel main. I metodi definibili possono essere dichiarati privati (contrassegnati dalla parola chiave private) se richiamabili solo all'interno della stessa classe oppure pubblici (contrassegnati dalla parola chiave public) se richiamabili anche da altre classi, di tipo statico (contrassegnati dalla parola chiave static) se invocabili liberamente all'interno della classe (ad es. su variabili globali), dinamici se invocabili su oggetti. Scrivendo nuove classi che supportano l'operazione print, si può adattare il programma per mostrare messaggi di tipi radicalmente diversi, lasciando il main pressoché immutato (basta cambiare la metà riga che segue il new). Per esempio, si può considerare un messaggio la scritta in una finestra che appare sullo schermo del computer in uso, oppure una stringa inviata su connessione di rete per apparire sulla finestra di un computer client. Oppure il programma può dialogare con l'utente sulla riga di comando o in una finestra (considerando il dialogo come un "messaggio interattivo"). Si può modificare radicalmente il comportamento del programma con modifiche circoscritte e in punti predisposti a priori (polimorfismo): il programma può resistere ad aggiornamenti ed esigenze non previste. Segue il codice sorgente di un programma che mostra lo stesso testo all'interno di una finestra. Il codice proposto crea degli oggetti utilizzati per gestire l'interfaccia grafica. Viene inizialmente creata una finestra il cui titolo sarà Hello World!; all'interno di questa finestra viene inserita un'etichetta che contiene al centro la scritta Hello World!. Infine viene stabilita la dimensione della finestra e, finalmente, viene resa visibile (assieme all'etichetta che porta la scritta da visualizzare). Anche in questo codice si fa uso della programmazione a oggetti, ma in un modo diverso: il main non conosce i meccanismi necessari per creare una interfaccia grafica sullo schermo, e questi sono decisi dalle classi JFrame e JLabel che sono state predisposte a priori (incapsulamento). SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/4/40/Wave.svg/150px-Wave.svg.png-REPLACE_ME Java è un linguaggio type safe, a tipizzazione statica, con un nominative type system, e dotato di manifest typing. In virtù di queste caratteristiche, viene

Page 5: Android_ Saturday, Jan. 25th - Instapaper

generalmente considerato un linguaggio a tipizzazione forte. Il linguaggio distingue chiaramente i tipi primitivi (che definiscono valori atomici) dai tipi strutturati (che definiscono strutture dati composte). I tipi primitivi sono detti anche tipi atomici e tipi base e sono definiti nelle specifiche di linguaggio: di ognuno sono noti l'insieme esatto dei valori ammessi e gli operatori supportati. I tipi strutturati sono anche tipi riferimento, cioè definiscono oggetti, e sono classi o interfacce. Tra queste, le classi degli array sono definite nelle specifiche di linguaggio; tutti gli altri tipi strutturati sono "definiti dall'utente" (user-defined), cioè dal programmatore. I tipi definiti dall'utente che sono legati al linguaggio per qualche motivo sono riuniti nel package java.lang e nei suoi sottopackage; il linguaggio stabilisce per alcuni di essi (Object, String, Iterable, e altri) delle regole sintattiche o semantiche aggiuntive. I tipi riferimento includono le classi per la gestione delle stringhe, gli array e le collezioni (liste, mappe, ecc.). Tipi base Da tutto ciò consegue che i valori dei tipi base non sono oggetti. Tuttavia, per ogni tipo base è definita una corrispondente classe (definita in gergo tipo wrapper o tipo contenitore) nel package java.lang, la quale permette di incapsulare dentro un oggetto un valore di tipo primitivo. Opportuni metodi della classe wrapper permettono di ottenere l'oggetto che incapsula un certo valore, e il valore incapsulato da un certo oggetto. Dalla versione 5.0 in poi, sono supportati l'autoboxing e l'unboxing, che permettono di convertire da tipo primitivo a corrispondente classe wrapper e viceversa. Il compilatore, "dietro le quinte", traduce la conversione in una opportuna invocazione a metodo sulla classe contenitore; quindi non si tratta di una vera conversione, ma di una sintassi comoda che "nasconde" la creazione di un oggetto della classe wrapper. Come molti altri linguaggi di programmazione anche Java possiede tra le strutture dati gli array (vedi array in Java). Valori costanti in Java si identificano con la parola chiave prefissa: final seguita dal nome della costante e dal valore assegnato: final tipo_costante <nome_costante>=valore; es: final String pippo="Ciao"; Sono supportate le seguenti strutture di controllo: Strutture selettive: if ... else e switch, come in C Strutture iterative: while e do ... while come in C for mutuato dal C for each che agisce su un array o collezione[15] La gestione delle eccezioni in Java viene gestita dalla sintassi try ... catch ... finally simile a quella del C++. Al di là dei costrutti per la programmazione ad oggetti il resto della sintassi di Java è detta like C, cioè derivata o simile a quella del linguaggio C. Java è un linguaggio object-oriented. L'idea che sta alla base della OOP è di rappresentare le entità reali o astratte, che determinano le dinamiche del problema risolto dal software, sotto forma di entità unitarie, dotate di specifiche d'uso e di funzionamento definite a priori, e chiamate oggetti. Le specifiche che definiscono le caratteristiche di queste unità (e in base alla quale le stesse vengono create o, in gergo, istanziate) sono chiamate classi. Java tuttavia non è un linguaggio ad oggetti puro, ma solamente object oriented (orientato agli oggetti) (ad esempio, i valori dei tipi primitivi non sono oggetti). Nel linguaggio Java, gli oggetti sono dotati di campi (definiti anche attributi o variabili di istanza o di esemplare) e di metodi. I metodi sono abitualmente usati per implementare agevolmente molti altri costrutti che alcuni altri linguaggi forniscono nativamente, come la gestione degli eventi (implementata attraverso i listeners) o delle proprietà (implementata tramite gli accessor methods e, più in generale, con oggetti JavaBeans).

Page 6: Android_ Saturday, Jan. 25th - Instapaper

In Java non esistono le funzioni: i blocchi di codice che "non appartengono a nessun oggetto" sono implementati come metodi statici di una certa classe (quindi sempre metodi). In Java si pone un forte accento sulla distinzione tra interfaccia e implementazione di una classe o oggetto: la prima è l'insieme delle specifiche pubbliche di cui gli utilizzatori di un certo oggetto possono servirsi, mentre la seconda è l'insieme delle strutture interne e delle istruzioni eseguibili che, nel complesso, adempiono a tali specifiche. Il termine interfaccia è usato anche in un'altra accezione, spiegata nel seguito. SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/7/77/Java-graphics2d-shape-hierarchy.png/220px-Java-graphics2d-shape-hierarchy.png-REPLACE_ME È supportata l'ereditarietà tra tipi. Questo permette di stabilire la gerarchia delle classi che compongono un programma. Il linguaggio impone che a capo della gerarchia ci sia la nota classe java.lang.Object.[16] In Java non esiste ereditarietà multipla tra classi.[17] Da un lato, questo vincolo permette di avere una gerarchia di classi lineare e previene gli svantaggi introdotti dall'ereditarietà multipla. Dall'altro, esso viene agevolmente superato facendo ricorso alle interfacce, ovvero a tipi analoghi alle classi, ma progettati apposta per essere estesi e soggetti a determinate restrizioni imposte dal linguaggio.[18][19] Di conseguenza esse forniscono alcuni vantaggi dell'ereditarietà multipla (come la possibilità che uno stesso oggetto appartenga a tipi diversi tra loro) senza gli svantaggi (come l'ambiguità introdotta dal fatto che una classe possa ereditare implementazioni diverse di uno stesso metodo). Dopo l'avvento di Java, l'ereditarietà singola si è gradualmente affermata come modello standard di ereditarietà nelle tecnologie object-oriented, ed è stata abbracciata, per esempio, anche dai linguaggi del framework .NET Microsoft. Le specifiche di linguaggio non impongono una determinata sintassi per la documentazione dei sorgenti, tuttavia nel tempo si è imposto come formato standard quello riconosciuto dal tool Javadoc e regolato da specifiche ufficiali ben definite (seppure esterne al linguaggio)[20]. Questo standard prevede che la documentazione sia fornita all'interno di commenti inseriti direttamente nei sorgenti e dotati di una speciale formattazione, che viene ignorata dal compilatore, ma riconosciuta da tool specializzati. Ciò rende facile aggiornare la documentazione, in quanto essa accompagna direttamente l'elemento sintattico da essa marcato; inoltre, durante la lettura dei sorgenti di un programma, ciò permette di avere sott'occhio insieme le specifiche e l'implementazione dell'elemento di programma preso in considerazione. Un altro strumento utilizzabile per la documentazione sono le annotazioni, introdotte nella terza versione delle specifiche di linguaggio[21]. Pur avendo una sintassi formalmente differente dai commenti Javadoc, esse sono usate per lo stesso scopo, cioè fornire metadati che descrivono le entità di programma marcate. Tuttavia, mentre i commenti riportano le specifiche in maniera discorsiva (seppure strutturata), le annotazioni per loro stessa natura sono ideali per l'elaborazione tramite i tool, più che per la lettura da parte di esseri umani. Inoltre, sotto opportune condizioni[22], le informazioni che forniscono sono compilate insieme al codice e possono essere lette perfino a tempo di esecuzione, cosa che i commenti non possono fare. JDK 1.0 (none) 23 gennaio 1996 JDK 1.1 (none) 19 febbraio 1997 JDK 1.1.4 (Sparkler) 12 settembre 1997 JDK 1.1.5 (Pumpkin) 3 dicembre 1997 JDK 1.1.6 (Abigail) 24 aprile 1998 JDK 1.1.7 (Brutus) 28 settembre 1998 JDK 1.1.8 (Chelsea) 8 aprile 1999 J2SE 1.2 (Playground) 4 dicembre 1999 J2SE 1.2.1 (none) 30 marzo 1999 J2SE 1.2.2 (Cricket) 8 luglio 1999 J2SE 1.3 (Kestrel) 8 maggio 2000 J2SE 1.3.1 (Ladybird) 17 maggio 2001 J2SE 1.4.0 (Merlin) 13 febbraio 2002 J2SE 1.4.1 (Hopper) 16 settembre 2002 J2SE 1.4.2 (Mantis) 26 giugno 2003

Page 7: Android_ Saturday, Jan. 25th - Instapaper

J2SE 5.0 (1.5.0) (Tiger) 29 settembre 2004 Java SE 6 (1.6.0) (Mustang) 11 dicembre 2006 Java SE 7 (1.7.0) (Dolphin) 28 luglio 2011 Java SE 8 (1.8.0) prossima major release Java fu inizialmente distribuito come Java Development Kit 1.0 (JDK 1.0). Questo comprende il runtime Java (la virtual machine e le librerie di classi), e gli strumenti di sviluppo (il compilatore Java e altri strumenti). Successivamente, Sun fornì un pacchetto che comprendeva solo il runtime, chiamato Java Runtime Environment (JRE). Normalmente le persone si riferiscono ad una particolare versione di Java attraverso la versione del JDK (es. JDK 1.4) Le versioni JDK 1.2 e successive sono spesso chiamate Java 2. Per esempio, il nome ufficiale del JDK 1.4 è Java (TM) 2 Platform, Standard Edition 1.4. Il linguaggio è rimasto stabile dal JDK 1.0 al JDK 1.4.x, con la J2SE 5.0 sono state introdotte nuove funzionalità nel linguaggio. La libreria di classi che viene fornita con JDK è stata progressivamente ampliata e modificata in alcune parti. Versioni delle specifiche di linguaggio I cambiamenti nel linguaggio sono formalizzati nelle specifiche di linguaggio. Ogni nuova edizione delle specifiche integra i cambiamenti richiesti fino a quel momento tramite le Java Specification Request e conseguentemente implementati nel compilatore javac. The Java Programming Language, First Edition The Java Programming Language, Second Edition The Java Programming Language, Third Edition The Java Programming Language, Java SE 7 Edition Per sviluppare programmi in Java è teoricamente sufficiente un qualsiasi editor di testo; in pratica, se si vuole scrivere qualcosa di più del classico hello world, occorre un ambiente di sviluppo integrato (IDE). Esistono diversi IDE (Integrated Development Environment, ambiente di sviluppo integrato), alcuni gratuiti ed altri a pagamento. La Sun (ora Oracle) mette a disposizione un software development kit specifico, chiamato Java Development Kit (o JDK). Esso include un certo numero di tool di uso comune, fra cui javac, javadoc, jar, e altri, atti ad elaborare (compilare) i file sorgenti e/o già compilati, includendo dunque il Java Runtime Environment (JRE). Essi lavorano sul codice già scritto e salvato sul sistema: nessuno di essi fornisce un ambiente visivo di scrittura con quelle caratteristiche che tornano utili nella realizzazione di programmi complessi come l'evidenziazione della sintassi tramite colori diversi, l'autocompletamento, o la possibilità di navigare tra i sorgenti tramite il click del mouse. La Sun stessa ha promosso lo sviluppo di un ambiente di sviluppo gratuito e open source chiamato NetBeans. Può essere scaricato da solo[23], oppure (facoltativamente) insieme con Sun Java Studio o con il JDK[24]. Un IDE open-source largamente utilizzato è Eclipse, donato alla comunità di sviluppatori da IBM e il cui sviluppo è seguito da una enorme comunità di utenti. Uno degli IDE commerciali più diffusi è JBuilder prodotto dalla Borland. Fra gli IDE quello più premiato[senza fonte] è IntelliJ IDEA, vincitore, fra l'altro, del premio Best Java IDE 2005 conferito da JDJ Readers Choice Award. Un ambiente di sviluppo per Java gratuito, e soprattutto leggero, è BlueJ, di chiara impostazione didattica. Un altro IDE per Java è JCreator, i cui pregi sono soprattutto la semplicità dell'interfaccia e la leggerezza. Sembra che il nome Oak derivi dal fatto che Gosling e i suoi colleghi, nel periodo in cui svilupparono il linguaggio, avessero avuto come unica compagnia quella di una quercia che si trovava

Page 8: Android_ Saturday, Jan. 25th - Instapaper

proprio fuori la finestra dell'ufficio in cui lavoravano. Una leggenda metropolitana -mai confermata- vuole che il nome del linguaggio sia stato inteso, in un secondo momento e dagli stessi creatori, come acronimo per "Just Another Vacuum Acronym" ("Soltanto un altro vuoto Acronimo"), con riferimento ironico all'altissimo numero di abbreviazioni utilizzate in ambiente informatico. Dato che gli ideatori del linguaggio si trovavano spesso ad un caffè presso il quale discutevano del progetto, sembrerebbe che il linguaggio prese il nome e il simbolo da tale abitudine (Java è una qualità di caffè dell'omonima isola dell'Indonesia), tanto che il magic number che identifica un file di bytecode ottenuto dalla compilazione di un file Java è 0xCAFEBABE, che in inglese significa ragazza (babe) del caffè (cafe)[25]. Il progetto Robocode ha come scopo l'insegnamento del linguaggio Java facendo divertire, attraverso la scrittura del codice di robot, identici tra loro ma programmati diversamente, da far scontrare in un'arena virtuale. Fonti usate per la stesura della voce Sezione "Storia": Java 2 Micro Edition basics (PDF). URL consultato il 5 maggio 2011. The Java Language Specification, Java SE 7 Edition (vedi sotto) Specifiche di linguaggio Le diverse edizioni delle specifiche sono accessibili sul sito della Oracle. L'ultima edizione è la seguente:

Testi di approfondimento (EN) Ken Arnold, James Gosling, David Holmes, The Java Programming Language, Fourth Edition, Addison-Wesley Professional, 2005. ISBN 0-321-34980-6. Wikibooks contiene testi o manuali su Java Commons contiene immagini o altri file su Java Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica it.wikipedia.org

Page 9: Android_ Saturday, Jan. 25th - Instapaper

app

it.wikipedia.org Con il neologismo app s'intende una variante delle applicazioni informatiche dedicate ai dispositivi di tipo mobile, quali smartphone e tablet. Il termine deriva proprio dall'abbreviazione di "applicazione". Una app per dispositivi mobili si differenzia dalle tradizionali applicazioni sia per il supporto con cui viene usata sia per la concezione che racchiude in sé. Si tratta a tutti gli effetti di un software che per struttura informatica è molto simile a una generica applicazione ma è caratterizzata da una semplificazione ed eliminazione del superfluo, al fine di ottenere leggerezza, essenzialità e velocità. Il nome stesso, di per sé un'abbreviazione, può essere percepito come una semplificazione del nome completo "applicazione" per dare l'idea di un qualcosa di semplice e piccolo, tali app si suddividono in mobile app, web app e app native. Consiste in uno strumento informatico che si installa e si utilizza sul proprio dispositivo mobile, vale a dire un insieme di istruzioni informatiche progettate con lo scopo di rendere possibile un servizio o una serie di servizi o strumenti ritenuti utili o desiderabili dall’utente. Le app, infatti, vanno ad ampliare le capacità native del dispositivo incluse all'interno del sistema operativo (configurazione di base). Una volta acquistato il dispositivo, sia esso smartphone o tablet, si ha la possibilità di personalizzarlo aggiungendo nuove applicazioni a seconda dei propri gusti ed esigenze.[1][2][3] Mentre una mobile app è installata fisicamente sul dispositivo dell’utente, una web app è sostanzialmente un collegamento verso un applicativo remoto. Questa soluzione comporta delle importanti conseguenze in termini di funzionamento: il vantaggio principale di una web app consiste nel fatto di non incidere in alcun modo sulle capacità di memoria del dispositivo e sulle sue capacità di calcolo dei dati. Tuttavia, per funzionare, una web app richiede il costante accesso a internet e le sue prestazioni dipenderanno in modo sensibile dalla velocità della connessione. Una app native è un software per dispositivi mobili creata appositamente per uno specifico sistema operativo. L'interazione diretta con le API messe a disposizione dal costruttore del sistema operativo garantirà accesso immediato a tutte le funzionalità del dispositivo oltre a permettere prestazioni ottimali e migliorare sensibilmente l'usabilità. Una app può essere sviluppata per diversi tipi di sistemi operativi mobili e non tutte sono compatibili con ogni tipo di sistema operativo, per evitare problemi di incompatibilità un'applicazione, disponibile per diversi tipi di sistemi, differisce nella propria estensione, come ogni altro programma o file. Al fine di semplificare la ricerca e l'utilizzo delle applicazioni da parte di utenti anche inesperti, la loro distribuzione è gestita da appositi distributori digitali (conosciuti perlopiù con i termini anglosassoni store o market), traducibili in italiano con il termine "negozio". Ogni tipo di distributore è vincolato a un sistema operativo, affinché contenga al proprio interno solo applicazioni compatibili con il sistema operativo del dispositivo mobile che si sta utilizzando. Tuttavia, col diffondersi delle applicazioni, esse sono reperibili ovunque, anche direttamente dai siti di coloro che le sviluppano, o dalle aziende o qualsiasi privato che voglia mettere a disposizione una propria applicazione.[2] Sistemi operativi supportati e relativi distributori digitali[modifica | modifica sorgente]

I principali sistemi operativi per dispositivi mobili che offrono un completo supporto per le app di nuova generazione sono 6: Android è il sistema operativo mobile più diffuso ed essendo libero (è basato sul kernel Linux) lo sviluppo nel proprio ambiente è aperto a chiunque; per tal motivo dispone anche di diversi

Page 10: Android_ Saturday, Jan. 25th - Instapaper

distributori digitali. Il distributore ufficiale è Google Play che nel 2012 ha festeggiato 25 miliardi di applicazioni scaricate in meno di 4 anni (è stato lanciato ufficialmente nel 2008)[4][5]. Altri distributori sono App-Shop di Amazon e AppBrain. Il distributore di riferimento per i dispositivi BlackBerry è BlackBerry App World. Il distributore digitale per l'ambiente iOS è l'App Store. Il sistema operativo Windows Phone è supportato dal distributore ufficiale Windows Phone Store. Lo sviluppo di mobile app era inizialmente destinato esclusivamente alla produttività individuale e aziendale: CRM, ERP, OLAP, project management, e-commerce, posta elettronica, calendario e contatti banche dati. Successivamente, complice la crescente domanda pubblica dovuta alla rapida diffusione dei moderni dispositivi mobili, è stata registrata la rapida espansione in altre aree, come ad esempio giochi per cellulari, scienza applicata, automazione industriale, GPS e acquisti di biglietti. Oggi esistono centinaia di migliaia di app: giochi e widget di varia natura, consultare riviste e quotidiani online, ascoltare la radio, fotografare e modificare le foto con particolari effetti grafici, trovare indirizzi e ottenere indicazioni stradali, ricevere informazioni turistiche, prenotare e acquistare biglietti del treno e dell’aereo o direttamente alberghi, seguire ricette e corsi di varia natura, condividere e scambiare informazioni, foto con i propri amici con le app dei principali social network. La popolarità delle app ha continuato a crescere, così come il loro utilizzo fino a diventare strumenti indispensabili e irrinunciabili da avere al pari di uno smartphone. Uno studio comScore di maggio del 2012 ha, infatti, riportato un dato rilevante: l'utilizzo di app mobile ha superato quello della navigazione web, rispettivamente 51,1% vs 49,8%.[1] it.wikipedia.org

Page 11: Android_ Saturday, Jan. 25th - Instapaper

android

it.wikipedia.org Android SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/1/18/Android_4.4_with_stock_launcher.png/250px-Android_4.4_with_stock_launcher.png-REPLACE_ME Schermata principale di Android 4.4 KitKat Sviluppatore Google Inc. Open Handset Alliance Famiglia SO mobile operating systems Modello del sorgente Open source[1][2][3] Release iniziale 1.0 (23 settembre 2008[4]) Release corrente 4.4.2 Kit Kat (9 dicembre 2013) Tipo di kernel Linux kernel (monolitico) Metodo di aggiornamento OTA (disponibile dalla OS 1)[5] e PC Licenza Apache 2.0 Stadio di sviluppo in produzione, corrente Sito web www.android.com SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Galaxy_Nexus_smartphone.jpg/220px-Galaxy_Nexus_smartphone.jpg-REPLACE_ME Android è un sistema operativo per dispositivi mobili organizzato in un'architettura software che include un sistema operativo di base, i middleware per le comunicazioni e le applicazioni di base.[6] Android Inc. è stata fondata nell'ottobre 2003 da Andy Rubin (co-fondatore di Danger),[7] Rich Miner (co-fondatore di Danger e di Wildfire Communications),[8] Nick Sears (vicepresidente di T-Mobile)[9] e Chris White (principale autore dell'interfaccia grafica di Web TV),[10] per lo sviluppo di quello che Rubin definí, « [...] dispositivi cellulari più consapevoli della posizione e delle preferenze del loro proprietario» (da ciò probabilmente scaturì la scelta del nome Android). Inizialmente la società operò in segreto, rivelando solo di progettare software per dispositivi mobili. Durante lo stesso anno il budget iniziale si esaurì, motivo per cui fu fondamentale un finanziamento di 10 000 dollari da parte di Steve Perlman (amico intimo di Rubin) per poter continuare lo sviluppo. Steve Perlman consegnò a Rubin il denaro in una busta e rifiutò la partecipazione nella società. Il 17 agosto 2005 Google ha acquisito l'azienda,[11] in vista del fatto che la società di Mountain View desiderava entrare nel mercato della telefonia mobile. È in questi anni che il team di Rubin comincia a sviluppare un sistema operativo per dispositivi mobili basato sul kernel Linux. La presentazione ufficiale del "robottino verde" avvenne il 5 novembre 2007 dalla neonata OHA (Open Handset Alliance), un consorzio di aziende del settore Hi Tech che include Google, produttori di smartphone come HTC e Samsung, operatori di telefonia mobile come Sprint Nextel e T-Mobile, e produttori di microprocessori come Qualcomm e Texas Instruments Incorporated. Il primo dispositivo equipaggiato con Android che venne lanciato sul mercato fu l'HTC Dream, il 22 ottobre del 2008.[12] Dal 2008 gli aggiornamenti di Android per migliorarne le prestazioni e per eliminare i bug delle precedenti versioni sono stati molti. Ogni aggiornamento o release, similmente a quanto accade per molte versioni di Linux, segue un ordine alfabetico e una precisa convenzione per i nomi, che in questo caso sono quelli di dolciumi: la versione 1.5 prese il nome Cupcake che venne seguita dalla versione 1.6 Donut, la 2.1 venne chiamata Eclair, la 2.2 Froyo, la 2.3 Gingerbread, la 3.0 Honeycomb, la 4.0 Ice Cream Sandwich, la 4.1 Jelly Bean e infine la versione più recente è la 4.4 che prende la denominazione Kit Kat in seguito ad un accordo con la Nestlé. Nel marzo 2013 Larry Page annuncia che Andy Rubin ha lasciato la presidenza di Android per dedicarsi ad altri progetti di Google. Viene rimpiazzato da Sundar Pichai. Android si caratterizza per la struttura open source (escluse alcune versioni intermedie),[13][14][15] e il suo basarsi su kernel Linux. La caratteristica open source ed il tipo di licenza (Licenza Apache) permette di modificare e distribuire liberamente il codice sorgente. Inoltre, Android dispone di una vasta comunità di sviluppatori che realizzano applicazioni con l'obiettivo di aumentare le funzionalità dei dispositivi. Queste applicazioni sono scritte soprattutto con una versione modificata del linguaggio di programmazione Java.

Page 12: Android_ Saturday, Jan. 25th - Instapaper

Nell'ottobre 2012 le applicazioni disponibili presenti sul market ufficiale Android (Google Play) hanno raggiunto le 700.000 unità.[16] Questi fattori hanno permesso ad Android di diventare il sistema operativo più utilizzato in ambito mobile, oltre a rappresentare, per le aziende produttrici, la migliore scelta in termini di bassi costi, personalizzazione e leggerezza del sistema operativo stesso, senza dover scrivere un proprio sistema operativo da zero.[17] Il progetto Open Source Android è guidato da Google, e con il compito di mantenimento e allo sviluppo di Android[18] Secondo il progetto "l'obiettivo è quello di creare un vero e proprio successo, in modo da migliorare l'esperienza mobile per gli utenti"[19] AOSP mantiene anche la compatibilità Android programmi, la definizione di un dispositivo "Android compatibile", come quella che possibile eseguire qualsiasi applicazione scritta da sviluppatori di terze parti che utilizzano il Android SDK e NDK. ", per prevenire incompatibili implementazioni Android[19] Il programma di compatibilità è facoltativo e gratuitamente, con la suite di test di compatibilità anche gratuito e open-source[20] SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/a/af/Android-System-Architecture.svg/220px-Android-System-Architecture.svg.png-REPLACE_ME Android è costituito da un Kernel basato sul kernel Linux 2.6 e 3.x (da Android 4.0 in poi), con middleware, Librerie e API scritte in C (o C++) e software in esecuzione su un framework di applicazioni che include librerie Java compatibili con librerie basate su Apache Harmony. Android utilizza la Dalvik virtual machine con un compilatore just-in-time per l'esecuzione di Dalvik dex-code (Dalvik Executable), che di solito viene tradotto da codice bytecode Java[21] La piattaforma hardware principale di Android è l'architettura ARM. L'architettura x86 è supportata grazie al progetto Android x86[22] e Google TV utilizza una speciale versione x86 di Android. Il kernel Linux di Android mette a disposizione modifiche all'architettura create da Google al di fuori del ciclo di sviluppo del kernel. Un tipico sistema Android non possiede un X Window System nativo, né supporta il set completo standard di librerie GNU, e nel caso del C++ vi è solo una implementazione parziale delle STL. Tutto ciò rende difficile il porting di applicazioni Linux o librerie per Android.[23] Per semplificare lo sviluppo di applicazioni C/C++ sotto Android si usa SDL che tramite un piccolo Wrapper java permette l'utilizzo della JNI dando un'idea di utilizzo simile a un'applicazione nativa in C/C++. Le applicazioni Android sono Java-based; in effetti le applicazioni scritte in codice nativo in C/C++ devono essere richiamate dal codice java, tutte le chiamate a sistema fatte in C (o C++) devono chiamare codice virtual machine Java di Android: infatti l'API multimediale SDL sotto Android richiama metodi di Java, questo significa che il codice dell'applicazione C/C++ deve essere inserito all'interno di un progetto Java, il quale produce alla fine un pacchetto Android (APK). Alcune funzionalità implementate da Google hanno contribuito al kernel Linux, in particolare una funzione di gestione dell'energia denominata wakelocks, che però è stata respinta dagli sviluppatori del kernel mainline, in parte perché gli sviluppatori del kernel hanno ritenuto che Google non manifestasse alcuna intenzione di mantenere il proprio codice.[24][25][26] Anche se Google ha annunciato nel mese di aprile 2010 che avrebbero assunto due dipendenti per lavorare con la comunità del kernel Linux,[27] Greg Kroah-Hartman, l'attuale responsabile del kernel di Linux per il ramo stabile, ha dichiarato nel dicembre 2010 che era preoccupato del fatto che Google non sembrava più intenzionata a far includere le modifiche al codice nel ramo principale di Linux. Alcuni sviluppatori di Google Android hanno fatto capire che "il team di Android si è stancato del processo", perché erano una piccola squadra e avevano molto lavoro urgente da fare su Android[28] In Linux è stato incluso l'autosleep e le capacità wakelocks nel kernel 3.5, dopo molti precedenti tentativi di fusione. Le interfacce sono le stesse ma la realizzazione di Linux ha due diverse modalità di sospensione: a memoria (le sospensione tradizionale che utilizza Android), e su disco (ibernazione, come è noto sul desktop).[29] Nel mese di agosto 2011, Linus Torvalds ha detto che "alla fine Android e Linux sarebbero venuti di nuovo ad un nucleo comune, ma probabilmente non sarà per

Page 13: Android_ Saturday, Jan. 25th - Instapaper

quattro o cinque anni"[30] Nel mese di dicembre 2011, Kroah-Hartman ha annunciato l'inizio del progetto mainlining Android, che mira a mettere un po' di Android driver, le patch e le caratteristiche, nel kernel di Linux a partire da Linux 3.3.[31] La memoria flash sui dispositivi Android è divisa in diverse partizioni, ad esempio "/system" per il sistema operativo stesso e "/data" per i dati utente e le installazioni delle app. Diversamente rispetto alle tradizionali distribuzioni GNU/Linux, agli utenti di dispositivi Android non sono disponibili i privilegi di superutente, o root, per l'accesso al sistema operativo e alle sue partizioni, quali "/system", per le quali l'utente dispone dei permessi di sola lettura. Tuttavia, l'accesso come root sul dispositivo è quasi sempre possibile: in certi casi tramite richiesta al produttore, in altri sfruttando certe falle di sicurezza di Android. L'accesso root viene utilizzato frequentemente dalla comunità open source, per migliorare le capacità dei loro dispositivi, ma anche da soggetti malintenzionati per installare virus e malware. L'interfaccia utente di Android è basata sul concetto di direct manipulation[32] per cui si utilizzano gli ingressi mono e multi-touch come strisciate, tocchi e pizzichi sullo schermo per manipolare gli oggetti visibili sullo stesso.[32] La risposta all'input dell'utente è stata progettata per essere immediata e tentare di fornire un'interfaccia fluida. Sensori hardware interno come accelerometri, giroscopi e sensori di prossimità sono utilizzati da alcune applicazioni per rispondere alle azioni da parte dell'utente, ad esempio la regolazione dello schermo da verticale a orizzontale a seconda di come il dispositivo è orientato o che consentono all'utente di guidare un veicolo in una corsa virtuale ruotando il dispositivo, simulando il controllo di un volante.[33] La cosiddetta Homescreen è simile al desktop trovato su Windows ed è la schermata principale che ci si trova appena il device è stato avviato, oppure premendo il tasto Home. L’homescreen di Android è in genere occupata sia dalle icone delle applicazioni che dai widget cioè delle sorti di gadgets con varie funzioni; ci sono widget che mostrano vari stili di orologi, quelli che mostrano gli ultimi video di YouTube, altri che visualizzano informazioni meteo, quelli relativi alle email.[34] La homescreen può essere costituita da più pagine tra cui l'utente può scorrere avanti e indietro. Sempre presente nella parte superiore dello schermo si trova una barra di stato, che mostra le informazioni sul dispositivo e la sua connettività. Trascinando la barra di stato verso il basso compare una schermata di notifica in cui le applicazioni possono visualizzare notifiche relative ad informazioni importanti o aggiornamenti come ad esempio una e-mail appena ricevuta o un SMS, in modo da non interrompere immediatamente l'utente.[35]Nelle prime versioni di Android tali notifiche potevano essere sfruttate esclusivamente per aprire l'applicazione in questione, ma gli aggiornamenti più recenti hanno fornito maggiori funzionalità, come ad esempio la possibilità di chiamare un numero direttamente dalla notifica della chiamata persa, senza dover aprire l'applicazione telefono[36] Le notifiche sono persistenti fino alla loro lettura o cancellazione da parte dell'utente. La piattaforma usa il database SQLite, la libreria dedicata SGL per la grafica bidimensionale (invece del classico server X delle altre distribuzioni linux) e supporta lo standard OpenGL ES 2.0 per la grafica tridimensionale.[6] Le applicazioni vengono eseguite tramite la Dalvik virtual machine, una macchina virtuale adattata per l'uso su dispositivi mobili. Android è stato progettato principalmente per smartphone e tablet, ma il carattere aperto e personalizzabile del sistema operativo permette che sia utilizzato anche su altri dispositivi elettronici tra cui portatili e netbook, smartbook,[37] eBook reader, fotocamere e smart TV (Google TV). Il mercato delle "smart things" è cresciuto in maniera notevole in questi ultimi periodi a tal punto da stimolare la creativitá delle persone. Un esempio è lo Smartwatch dotato di sistema operativo Android in versione "light"[38] cuffie,[39] lettori auto CD e DVD,[40] occhiali intelligenti (Project Glass o google glass), frigoriferi, sistemi di navigazione satellitare per veicoli, sistemi di automazione per la casa, console di gioco, specchi,[41] telecamere, lettori MP3/MP4 e tapis roulant. Il logo di Android è stato progettato insieme con la famiglia di caratteri (font) Droid di

Page 14: Android_ Saturday, Jan. 25th - Instapaper

Ascender Corporation, il verde è il colore del robot che rappresenta il sistema operativo Android. Il colore di stampa è PMS 376C e il colore RGB in valore esadecimale è # A4C639, come specificato dalle linee guida del Marchio di Android Il carattere personalizzato di Android si chiama Norad. Viene utilizzato solo nel logo di testo. Android ha un rapido ciclo di rilascio, con il rilascio di nuove versioni ogni sei-nove mesi. Gli aggiornamenti sono in genere di natura incrementale, apportando miglioramenti del software a intervalli regolari, piuttosto che revisioni complete del sistema ogni due o tre anni (pratica comune per i sistemi operativi desktop come Windows). Tra una major release e l'altra vengono messi a disposizione rilasci intermedi per risolvere problemi di sicurezza e altri bug del software. La maggior parte dei dispositivi Android sono in grado di ricevere gli aggiornamenti in modalità "OTA" (over the air), ovvero senza necessità di un collegamento ad un PC. Rispetto ad altri sistemi operativi mobili, come iOS, in genere trascorre parecchio tempo, a volte diversi mesi, fra il rilascio ufficiale di un aggiornamento Android e l'effettiva distribuzione, da parte dei vari produttori, ai dispositivi in grado di supportarlo. Questo non avviene però con dispositivi quali Nexus 7, Nexus 4, Nexus 5, Galaxy Nexus o Nexus 10.[42] Nel 2011, Google ha siglato un accordo con un certo numero di produttori annunciando l'"Android Update Alliance" e impegnandosi a fornire aggiornamenti tempestivi ad ogni dispositivo per 18 mesi dalla sua immissione in commercio. Il motivo per cui si verificano questi ritardi è dovuto a vari fattori. In primis vi è la necessità di personalizzare il sistema sullo specifico hardware di ogni dispositivo. Gli aggiornamenti ufficiali vengono infatti rilasciati da Google per i device di riferimento (attualmente Google Nexus 5 Google Nexus 7 e Google Nexus 10). Ogni produttore dovrà poi adattare il sistema ai propri dispositivi, operazione che richiede tempo e investimenti non indifferenti. Per questo motivo molti produttori si concentrano prima di tutto ad aggiornare i loro dispositivi più recenti, allungando ancor di più i tempi per i vecchi dispositivi. In alcuni casi i produttori hanno rinunciato addirittura ad aggiornare dei vecchi dispositivi pur in grado di supportare le nuove versioni del sistema operativo. Ad aggravare ulteriormente il problema, si aggiunge il fatto che la stragrande maggioranza dei produttori personalizzano l'interfaccia di Android per differenziarsi sul mercato e, ad ogni aggiornamento, devono riportare le proprie personalizzazioni sulla nuova versione. Alcuni commentatori hanno notato che, allo stato attuale, i produttori sono incentivati a "non" aggiornare i propri dispositivi, incentivando gli utenti a passare ad un modello più recente (e aggiornato).[43] Alcuni marchi commerciali hanno rilasciato del software antivirus per dispositivi Android, in particolare, AVG Technologies,[44] Avast!,[45] F-Secure,[46] Kaspersky,[47] McAfee[48] e Symantec.[49] Un articolo del 2011 apparso su ExtremeTech ha sollevato il problema che gli antivirus disponibili all'epoca, su Android, non riuscivano a rilevare tutte le minacce,[50] perché per il principio di minimo privilegio le app non possono agire a livello di kernel ma soltanto applicativo.[50] Al fine di migliorare la sicurezza del sistema, Google ha introdotto dei meccanismi automatici di analisi del software per bloccare eventuali applicazioni malevoli presenti nel market Google Play.[51] Queste soluzioni hanno ridotto il problema ma delle analisi tecniche hanno evidenziato che le analisi automatiche possono essere aggirate[senza fonte]. Un'analisi McAfee stima che nel 2012 l'85% dei virus per dispositivi mobili sia stato sviluppato per dispositivi Android.[52] I telefoni che utilizzano Android come OS possono ottenere (grazie al lavoro di alcune comunità, come quella di XDA) i permessi di root, essendo Android basato su kernel linux. Questo "sblocco" permette, ai dispositivi di accedere a funzioni avanzate, come gestire direttamente CPU e app di sistema, altrimenti inaccessibili, ma permettono anche all'utente di cambiare il firmware del telefono (senza avere i permessi aggiuntivi è comunque possibile installare eventuali aggiornamenti firmware ufficiali del produttore del telefono, senza perdere la garanzia). Inizialmente tutto il lavoro si era concentrato sull'HTC Dream con firmware come Mikhael,

Page 15: Android_ Saturday, Jan. 25th - Instapaper

JacHero, TheDudes e altri. Ad oggi la completezza dei firmware preinstallati dai produttori non spinge gli utenti a sostituire il firmware con altri creati dalle comunità online, ma rimane comunque molto popolare la ROM CyanogenMod[53] compatibile con molti terminali fra cui il Nexus One, l'HTC Magic e l'HTC Desire e successivamente con Galaxy S e Galaxy S II, One X, One S, LG Optimus L9, LG Optimus G, Galaxy Nexus, Galaxy SIII e Galaxy S4. È pur vero che le ROM "cucinate" spesso permettono una maggiore libertà di gestione da parte dell'utente, includendo funzionalità particolari e ampia possibilità di personalizzazione. Esistono raccolte di firmware come quella di AndroidPedia.[54] Il 12 novembre 2007 l'OHA ha rilasciato il software development kit (SDK) che include: gli strumenti di sviluppo, le librerie, un emulatore del dispositivo, la documentazione (in inglese), alcuni progetti di esempio, tutorial e altro. È installabile su qualsiasi computer x86 compatibile che usi come sistema operativo Windows XP, Vista, Mac OS X, dalla versione 10.4.8, o Linux. L'IDE ufficialmente supportato per lo sviluppo di applicazioni per Android è Eclipse,[55] per cui è fornito un plug-in. Il 23 settembre del 2008 viene rilasciata la versione 1.0 di Android che comprendeva il market, il browser, la gestione delle cartelle (creazione, cancellazione e ridenominazione),[56] accesso ai servizi di posta elettronica e il supporto di reti wi-fi, fotocamere e le prime Google Apps per smartphone Android. Le prime release non avevano nomi specifici, ma venivano indicati in maniera più generale come Astro Boy e Bender (infatti si pensava di nominare ogni release con il nome di un robot della televisione o del cinema). Dalla versione 1.5 si stabilì di utilizzare invece nomi di dolci. L'SDK fu aggiornato alla versione 1.1 il 9 febbraio 2009; questa nuova versione sostituiva la versione 1.0_r2 e manteneva la retro compatibilità con i sorgenti creati tramite le vecchie release dell'SDK (1.0_r1 e 1.0_r2) ed aggiunge nuove caratteristiche alle API, oltre ad una maggiore fluidità e sicurezza.[57] La versione dell'SDK uscita il 13 aprile 2009 è la 1.5, divenuta famosa soprattutto con il suo secondo nome Cupcake. C'è retrocompatibilità con le vecchie versioni e implementa le nuove API 3, rendendo l'SO ancora più veloce e stabile.[58] Fu poi aggiornato e il 16 settembre 2009 venne rilasciata la 1.6 chiamata anche Donut. C'è retrocompatibilità con le vecchie versioni e implementa nuove funzioni e tecnologie come il supporto alle reti CDMA, diverse risoluzioni di schermo e una ricerca globale interna nel telefono e su internet contemporaneamente, oltre ai vari fix bug. I primi cellulari con Android 1.6 nativo sono sul mercato da ottobre 2009.[59] Il 27 ottobre 2009 Google pubblica la versione 2.0 del suo sistema operativo Open Source,[60] nome in codice Eclair, che introduce la possibilità d'inviare dati tramite Bluetooth, mentre in precedenza era possibile utilizzarla solo per la comunicazione vocale[61] seguita da una minor release dell'SDK, la versione 2.0.1, il 4 dicembre 2009.[62] Il 12 gennaio 2010 è stato rilasciato l'Android SDK 2.1, chiamato sempre Eclair per le sue poche novità introdotte. Infatti furono solamente risolti dei critical bug riscontrati in vari dispositivi associati alla sicurezza dei dati. Il 20 maggio 2010 al Google I/O conference è stato rilasciato l'Android SDK 2.2, nome in codice Froyo. Sono stati rilasciati importanti aggiornamenti: nuovo kernel linux 2.6.32, nuovo compilatore JIT, V8 Engine per il javascript, Tethering Wi-fi Nativo per utilizzare il terminale come Hotspot Wireless, nuove Icone per la Home, Telefono (Sinistra) e Browser (Destra). Adobe Flash Player 10.1 e Adobe AIR Integrato. Possibilità di installare le apps sulla memoria SD, feature molto attesa dalla community mondiale. Aggiornamento automatico Over-the-Air delle Applicazioni. Nuove Api per gli sviluppatori, tra cui le OpenGL ES 2.0. Il tutto si è tradotto in 2-3X di velocità maggiore, performance e fluidità rispetto alla precedente versione 2.1 Eclair. Il 9 luglio 2010 l'Android SDK 2.2[63] è stato revisionato e aggiornato con gli ultimi file.img del sistema Android 2.2.

Page 16: Android_ Saturday, Jan. 25th - Instapaper

Il 7 dicembre 2010 l'Android SDK 2.3[64] è stato rilasciato, col nome in codice Gingerbread. Nel gennaio del 2011 viene rilasciato il sistema 3.0 (Honeycomb) dedicato ai soli tablet,[65] mentre il 27 gennaio 2011 viene rilasciata la preview dell'Android SDK 3.0[66] la versione di Android per i dispositivi Tablet. La versione definitiva dell'SDK 3.0 è stata invece ufficializzata solo il 23 febbraio 2011.[67][68] L'11 maggio 2011 è stata rilasciata la versione SDK 3.1.[69] Il 19 ottobre 2011 è stata presentata la versione 4.0 (Ice Cream Sandwich) contemporaneamente alla presentazione del nuovo Samsung Galaxy Nexus,[70] questa versione è destinata a diversi dispositivi, quali smartphone e tablet, abbandonando la precedente situazione, dove smartphone e tablet utilizzavano sistemi operativi differenti. Il 19 Ottobre è stato rilasciato l'SDK 4.0.[71] Il 22 marzo 2012 è stato rilasciato l'Android SDK versione 17 che introduce il supporto nativo per i chip x86 e la possibilità di utilizzare un device Android in collegamento con il PC come dispositivo di input multitouch.[72] Il 29 ottobre 2012 doveva essere presentata la versione di Android Jelly Bean 4.2, ma, a causa dell'Uragano Sandy, la presentazione è stata annullata. I primi dispositivi basati su Android 4.2 sono stati rilasciati il 13 novembre 2012. La versione si presentava piena di miglioramenti e novità, come il Circle Photosphere di Google, tuttavia includeva numerosi bug. Il 6 novembre 2012 Google rilasciò per i suoi dispositivi Nexus una patch che portò Android alla versione Jelly Bean 4.2.1. Il 24 luglio 2013 Google rilascia, per i dispositivi Nexus, la versione Android 4.3 Jelly Bean che porta diverse migliorie, tra cui il supporto all'OpenGL ES 3.0. Il 3 settembre 2013 Google annuncia la versione Android 4.4 KitKat, rilasciata il 31 ottobre 2013 per i dispositivi Nexus ad esclusione del Galaxy Nexus[73]. Per un maggior grado di approfondimento sulle caratteristiche principali di tutti gli aggiornamenti del sistema operativo Android, consultate la pagina (in inglese) sulla Storia delle versioni di Android. SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/1/18/T-Mobile_G1_launch_event_2.jpg/220px-T-Mobile_G1_launch_event_2.jpg-REPLACE_ME Il primo dispositivo mobile dotato della piattaforma Android è stato il T-Mobile G1, prodotto dalla società taiwanese HTC e commercializzato dal carrier telefonico T-Mobile. Il prodotto è stato presentato il 23 settembre 2008 a New York, mentre la data di uscita nel mercato è stata il 22 ottobre 2008. Le caratteristiche principali del dispositivo sono: tastiera QWERTY, schermo touchscreen da 3.2 pollici con risoluzione di 320x480 pixel, supporto per la connettività 3G UMTS/HSDPA a 7,2 Mbit/s, 192 MB di RAM e 256 MB di memoria flash. Il prezzo di lancio era di 179 $ negli Stati Uniti, con obbligo di sottoscrizione ad un contratto biennale con il carrier T-Mobile, mentre in Italia il dispositivo è noto con il nome di HTC Dream ed il prezzo iniziale fu di 450 € senza contratto. Il dispositivo è stato inizialmente distribuito negli Stati Uniti d'America il 22 ottobre 2008 e nel Regno Unito il 30 dello stesso mese. In seguito è stato commercializzato in Italia HTC Magic, un dispositivo con caratteristiche simili a quelle del T-Mobile G1, seppur non dotato di una tastiera a livello hardware; in seguito è stato introdotto da parte di Samsung il dispositivo Galaxy dotato di schermo AMOLED in seguito il Galaxy S dotato di una fotocamera senza flash, presente però nel suo successore Galaxy S II. Il primo dispositivo dotato di Android 2.0 è il Motorola Milestone, presentato nell'ultima parte del 2009 e commercializzato in Italia intorno ai 499 euro. Il 4 gennaio 2010 è stato rilasciato il nuovo Nexus One, dotato di Android 2.1, prodotto da HTC e Google. A stretto giro di posta, la versione 2.1 diventa disponibile anche per gli altri dispositivi Android quali HTC, Motorola e altri. Nel 2010 sono stati poi presentati e messi in commercio una nuova generazione di smartphone con sistema operativo Android che spinti dal Nexus One hanno caratteristiche tecniche di livello superiore (processore da 1 GHz e RAM fino a 512MB). Tra questi troviamo l'HTC Desire, Samsung

Page 17: Android_ Saturday, Jan. 25th - Instapaper

Galaxy S e l'LG Optimus Black. SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/4/45/HTC_Evo_4G.jpg/220px-HTC_Evo_4G.jpg-REPLACE_ME Il 16 dicembre 2010 è stato rilasciato il successore di Nexus One: il Nexus S, prodotto da Samsung, è il primo terminale Android a montare in partenza la release 2.3 dell'OS, denominata Gingerbread. Secondo Wikimedia Foundation, il sistema operativo Android ha una diffusione tra tutti i dispositivi mobili pari al 22,94%[88] (aggiornamento agosto 2011); nell'ultimo trimestre del 2010 Android è riuscito a superare Symbian[senza fonte], l'incontrastato sistema operativo di Nokia per oltre 10 anni, vendendo nel mondo ben 32,9 milioni di smartphone contro i 30,6 milioni di Symbian[senza fonte]. Dal 2008 Android è cresciuto, anno su anno, del 615.1%[senza fonte]. Nel 2009 la Toshiba ha presentato il tablet journ.e Touch, con schermo da 7 pollici e sistema Android 2.0. Durante il 2010 sono stati presentati molti tablet che utilizzano Android come sistema operativo. Quello che ha ricevuto più interesse dei media è stato sicuramente il Samsung Galaxy Tab con la versione 2.2 Froyo, che si è posto in diretta concorrenza con l'iPad di Apple. Il prodotto è stato presentato durante l'IFA di Berlino 2010 ed è stato messo in commercio a partire dalla fine di settembre 2010.[89] La nuova versione di Android dedicata ai tablet è la versione 3.0 Honeycomb e il primo tablet annunciato ufficialmente con questa versione dell'OS è stato il Motorola Xoom.[65] Il primo tablet ad entrare in commercio con HoneyComb 3.1 preinstallato è stato il Samsung Galaxy Tab 10.1 nel giugno 2011. Sempre in questo periodo c'è da segnalare anche la linea di Acer, Iconia Tab. In generale, a tutto marzo 2012 si è cominciato ad avere una disponibilità sul mercato di dispositivi con versione di sistema 4.0, come l'Asus Transformer Prime anche se inizialmente alcuni venivano proposti con la versione inferiore (aggiornabile) perché ancora non era stato reso disponibile il plugin Flash per questa versione di sistema. Il 28 Giugno 2012 è stato presentato il primo tablet di Google prodotto in collaborazione con ASUS, chiamato Nexus 7 ed inizialmente dotato di Android 4.1 Jelly Bean. La seconda generazione del dispositivo, con versione 4.3 di Android è stata presentata il 24 Luglio 2013. I dispositivi targati "Google Nexus", che vengono prodotti su licenza Google da diversi produttori di dispositivi mobile, hanno la caratteristica di avere una versione di Android che viene aggiornata e supportata dalla stessa Google Inc. (la fondatrice del team di Android).[90] Sui dispositivi Nexus è presente la versione vanilla di Android OS. Le applicazioni Google sono installate di stock. Android ha la caratteristica di accettare i dispositivi di memorizzazione esterni (SD card, pennine USB, ecc...), al pari di molti sistemi operativi per PC. Mentre non c'è bisogno di alcuna precauzione per il collegamento di questa memoria esterna al dispositivo Android, bisogna effettuare una certa procedura prima di scollegarla. Su Android 2.2, bisogna cliccare sulla voce di menu "Impostazioni → Scheda SD e memoria" e da qui scegliere la voce "Smonta scheda SD" oppure "Unmount U-disk" (Smonta disco USB). A questo punto può essere scollegata dal dispositivo. Il motivo della necessità di effettuare la procedura di smontaggio è che all'interno di tali memorie potrebbero esserci ad esempio documenti o software che l'utente sta utilizzando; appena una app richiede di accedere ai dati di tali file e questi non sono più disponibili, Android la chiude forzatamente. Un altro problema della rimozione "a caldo" di una memoria esterna è che il salvataggio dei dati di una applicazione non avviene immediatamente ma dopo un certo tempo. Il rischio è quindi che quel salvataggio (ad esempio un documento scritto dall'utente) venga memorizzato in maniera parziale (divenendo spesso inutilizzabile), o che il file vada perso. Le applicazioni sono la forma più generica per indicare software installabili su Android. Chiamate, in gergo ormai diffuso, "apps", questo termine è ampiamente usato nella comunità di

Page 18: Android_ Saturday, Jan. 25th - Instapaper

utilizzatori. Tali "apps" possono essere scaricate sia dal market ufficiale (Google Play) e sia dal market di Amazon.com (Amazon Appstore).[91] Le applicazioni Android possono anche essere installate come file APK da market di terze parti. Per motivi di sicurezza informatica, le apps dovrebbero essere scaricate e utilizzate mediante un servizio di distribuzione fidato, che utilizzi un sistema di certificati di sicurezza (software). Per venire incontro alle necessità degli sviluppatori, è stata però prevista la possibilità di disattivare il controllo di tali certificati, attraverso una voce presente nel menu "Impostazioni" (Android versione 2.2). Android è fornito di una serie di applicazioni preinstallate che vanno dal browser alla radio analogica FM, dal calendario all'applicazione Gmail, dalla calcolatrice al navigatore satellitare Turn-by-Turn e comprende anche la ricerca vocale Google Voice Search con la possibilità di scegliere la lingua in italiano. Quando si vuole aggiungere all'ambiente Android una funzionalità non presente, come ad esempio un software per l'ufficio, un videogioco o un'immagine di sfondo (wallpaper), si usa ricercarla in un "Market" (come Google Play) e "installarla", ossia copiarla all'interno del dispositivo affinché sia sempre presente e utilizzabile. Dalla versione 2.2 di Android è possibile installare una app, oltre che nella memoria interna del dispositivo, su una card esterna. Questa nuova feature viene spesso chiamata dalla community "app2sd" (o "apps2sd"), derivata dai nomi dei primi esperimenti effettuati da programmatori indipendenti: attraverso del software nativo (scripts in linguaggio shell), spostavano su card esterna sia i software installati che alcune cartelle di sistema, utilizzando poi dei link simbolici per i collegamenti e facendo anche delle copie di riserva per poter ripristinare la situazione precedente in sicurezza. Ufficialmente però, in fase di installazione, la scelta del supporto di destinazione (memoria interna o card) è lasciata allo sviluppatore del software e non all'utente finale. Al riguardo, alcuni produttori di dispositivi hanno messo a disposizione degli utenti, nel menu "Impostazioni → Applicazioni", una "casella di spunta" chiamata "App2sd". Questa permette di scegliere se direzionare tutte le nuove installazioni sulla card oppure sulla memoria interna del dispositivo. In assenza di tale opzione, si può installare l'"app" prima sulla memoria interna (se sufficiente) e poi trasferirla sulla card, aprendo la voce di menu "Impostazioni → Applicazioni → Gestisci applicazioni", selezionando l'"app" appena installata e premendo il bottone "Sposta su scheda SD". Su Google Play sono presenti varie "apps", talune omonime di "app2sd", che permettono di semplificare ulteriormente la gestione delle applicazioni installate, aggiungendo varie funzionalità come ad esempio la possibilità di scegliere, in fase di installazione, quale sia il supporto di destinazione (memoria interna oppure card). La necessità di spostare le applicazioni sulla memoria esterna è data dal fatto che, al momento del lancio di Android 2.2, la memoria interna (e non di massa) dei dispositivi era abbastanza ristretta. Nei prodotti di fascia alta questa esigenza è scomparsa. Già dal 2010, il Galaxy S mette a disposizione 2 GB per l'installazione di applicazioni. Nei dispositivi di fascia bassa, invece, il problema sussiste ancora. La situazione è ulteriormente evoluta con il lancio di Ice Cream Sandwich e del terzo smartphone Google, Galaxy Nexus: la memoria interna diventa dinamica. Un esempio è proprio questo terminale: la sua memoria interna viene dinamicamente allocata tra applicazioni installate e memoria di massa. È quindi possibile installare 16 GB di applicazioni o usare la memoria interamente per i file multimediali. Questa soluzione comporta però lo svantaggio di perdere il riconoscimento come archivio di massa da parte di un Personal computer, comportando una compatibilità con sistemi operativi più ristretta. Per approfondire, vedi Google Play. Il market ufficiale di Android è Google Play. Il nome attuale è stato adottato a partire dal 6 marzo 2012 mentre la denominazione precedente era "Android

Page 19: Android_ Saturday, Jan. 25th - Instapaper

Market" . Il market offre la possibilità di acquistare non solo applicazioni, ma, dal 2012, anche libri e musica, rispettivamente Play Books e Play Music. Tutti o quasi i dispositivi Android hanno preinstallata una icona denominata Market oppure Google Play. Per accedere al Market è necessario possedere un account Google. Oltre a poter acquistare sul market utilizzando il servizio Google checkout, è prevista la possibilità di addebitare l'acquisto sul credito prepagato o sull'abbonamento usato per il servizio telefonico; in Italia questa modalità di pagamento è garantita solo dagli operatori Vodafone[92] e Wind.[93] In Ottobre 2012 le applicazioni presenti sul market ufficiale Android (Google Play) hanno raggiunto le 700.000 unità.[16] È un semplice ambiente di sviluppo basato su piattaforma Java per coloro i quali non hanno basi di programmazione; con questo strumento si possono scrivere semplici applicazioni, per uso esclusivamente personale, tramite una interfaccia grafica.[94] App Inventor faceva parte di Google Labs, luogo virtuale ove gli ingegneri di Google sviluppano le nuove applicazioni sperimentali, ma il 10 agosto 2011 Google ha comunicato che App Inventor sarebbe stato chiuso, cosa che è avvenuta il 31 dicembre 2011. La scelta è probabilmente dovuta o al mancato successo dello stesso oppure a causa di una denuncia da parte di Oracle per violazione dei diritti della piattaforma Java, che Oracle detiene, su cui è sviluppato App Inventor. Il sistema è stato però preso in carico dal MIT Center for Mobile Learning che ora lo supporta con il nome "App Inventor Edu".[95] Le Apps sviluppate con App Inventor non possono essere pubblicate su Google Play. Ai fini della programmazione, il team di Android ha specificato nella documentazione ufficiale[96] vari termini per definire i vari tipi di applicazioni. Le attività sono quelle applicazioni destinate a una interazione diretta con l'utente. Un esempio sono i videogiochi, le applicazioni per l'ufficio e i visualizzatori (reader) di E-book. Le attività vengono generalmente distribuite sotto forma di file .APK , vengono poi installate in diverse cartelle nella memoria del dispositivo (o in una card estraibile), infine viene creata una icona per l'utente, che gli permetterà di eseguirla in qualsiasi momento.[97] È anche possibile disinstallare le attività mediante una utility integrata con Android. Le attività vengono create come oggetti di classe Activity da cui ereditano proprietà e metodi.[97] I servizi sono, al contrario, quelle applicazioni che per loro natura svolgono delle operazioni autonome e che vengono richiamati dalle attività al bisogno. Il sistema operativo fornisce alle applicazioni vari servizi già pronti all'uso, per ottenere l'accesso all'hardware o a risorse esterne (ad esempio dei web services di messaggistica). I servizi sono oggetti di classe Services.[97] Un esempio di servizio è com.android.inputmethod.latin, ossia il componente che fa comparire la tastiera quando si seleziona (con i tasti o con un "tocco" sul touch-screen) un campo di input testuale. I servizi possono essere eseguiti o interrotti direttamente dall'utente, sebbene siano eventualità alquanto rare. I content provider sono dei contenitori di dati generati dalle applicazioni che ne forniscono una condivisione; i dati possono essere contenuti nel file system, in un database SQLite, sul web o in una qualunque locazione di dati.[97] La classe alla quale appartengono questi oggetti è ContentProvider.[97] Ricevitori di trasmissioni diffuse (Broadcast receivers)[modifica | modifica sorgente]

I Broadcast receivers permettono alle apps di ricevere segnali rivolti a tutte le apps in esecuzione, per la condivisione di dati o di segnali di servizio (come ad esempio quello di batteria scarica). I broadcast receivers, sebbene non usino l'interfaccia del sistema, possono far apparire messaggi informativi che si sovrappongono all'output dell'activity corrente.[97] Il frammento è quella porzione di codice (quindi di applicazione) che gestisce la parte grafica,

Page 20: Android_ Saturday, Jan. 25th - Instapaper

in base alle possibilità del dispositivo su cui è stato installato. Il problema dello sviluppatore è evidente quando si trova a dover sviluppare una applicazione che funzioni, ad esempio, sia su un tablet (generalmente questi hanno uno schermo touch-screen di grandi dimensioni) che su alcuni tipi di smartphone (che possono avere 2 schermi e non è detto che entrambi siano touch-screen). È stato allora deciso, dal team di Android, di creare il concetto di "fragments", ossia una classe tanto generica da permettere lo sviluppo di una applicazione con la parte grafica slegata a quella "decisionale", in modo da rendere agevole l'adattamento dell'applicazione alle varie situazioni. Il programmatore creerà vari frammenti della parte grafica e poi Android la ridisegnerà correttamente per il dispositivo in uso. L'alternativa per il programmatore sarebbe stato di scriversi da solo un framework che facesse lo stesso lavoro (e l'avrebbe dovuto fare per tutti i suoi progetti) oppure avrebbe dovuto creare più versioni, ognuna destinata a una tipologia di dispositivo, quindi costringendolo a riscrivere diverse parti del proprio software. Questi componenti non sono sostituibili; al massimo sono aggiornabili alcune parti per correggere eventuali problemi di sicurezza. Quando viene rilasciata una nuova versione di Android, significa che alcune di queste parti sono state aggiornate o sostituite. Il software viene solitamente distribuito sotto forma di pacchetto autoinstallante, quindi un file con estensione .APK . Questo non è altro che un file compresso, contenente il software (file con estensione .dex) le sue risorse (immagini, suoni ecc...) e alcuni file XML. L'utente medio non ha necessariamente bisogno di conoscere tale tipologia di file, dato che il dispositivo gestisce tutta la parte di installazione mediante web services come Google Play. All'interno di questo file c'è anche un certificato digitale che permette l'installazione di un pacchetto .APK su un dispositivo Android se questo non è stato compromesso o revocato. Il certificato deve essere presente in qualsiasi pacchetto, altrimenti Android non installerà l'applicazione al suo interno. Il certificato viene creato dallo sviluppatore dell'applicazione, che può scegliere di crearne uno di "debugging" (quindi a uso interno) o di "mercato" (per la distribuzione) e può deciderne la sua diffusione delle copie (libera o limitata). Il distributore (per esempio Google Play) ci aggiungerà poi una sua chiave, che potrà successivamente revocare, se necessario. In caso di revoca, l'applicazione non è più installabile né eseguibile in nessun dispositivo Android. Se uno sviluppatore indipendente vuole poter distribuire un suo software con pacchetto .APK , senza passare per un web service certificato, può autocertificarsi il certificato. In tal caso, l'utente riceverà un avviso che sta installando un software di questo tipo ("self-signed"); a questo punto potrà annullare l'installazione o farla proseguire a suo rischio. La classe è un concetto della programmazione orientata agli oggetti. Per semplificare, consiste nella suddivisione di un software in "componenti", questo per evitare di usare il vecchio paradigma della programmazione procedurale, che consiste nello stilare una lista di istruzioni sequenziali che possono essere poco adattabili per l'aggiunta di ulteriori funzionalità in futuro. Su Android tutti i componenti sono catalogati come classi e richiamabili da altri componenti se il programmatore ne permette questa possibilità. Per fare qualche esempio, nella versione 3.0 livello 11 delle API di Android, le classi del package android.bluetooth permettono a uno sviluppatore indipendente di includere nella sua applicazione la possibilità di comunicare con la sua stessa applicazione (oppure un'altra) installata su un altro dispositivo mobile, senza i cavi, ma solo via radio. Esiste anche il package android.gesture, con al suo interno le classi che permettono a una applicazione di ricevere le "gestures", ossia i tracciamenti di un dito che sfiora il touch-screen. Internamente, tutti i processi dei servizi in esecuzione vengono eseguiti con tali nomi e sono visibili, su Android 2.2, nel menu Impostazioni.

Page 21: Android_ Saturday, Jan. 25th - Instapaper

SPECIAL_IMAGE-//upload.wikimedia.org/wikipedia/commons/thumb/9/9f/PackageExplorer.png/220px-PackageExplorer.png-REPLACE_ME Le applicazioni di Android sono sviluppate all'interno di un framework, ossia di una struttura dati specifica. La struttura del framework è molto chiara se si utilizza l'ambiente di sviluppo (Android SDK) con Eclipse; il mancato utilizzo di Eclipse, tuttavia, non impedisce di scrivere applicazioni Android funzionanti. Le applicazioni Android sono caratterizzate da una certa dualità: parti dinamiche scritte in Java e parti statiche scritte in XML. Tipico delle parti statiche possono essere quelle caratteristiche che non cambiano durante l'esecuzione dell'applicazione, come per esempio il colore dello sfondo. Tipico delle parti dinamiche sono invece gli aspetti programmatici come per esempio la gestione degli eventi. Questa dualità è però solo apparente. Durante l'esecuzione, infatti, l'ambiente di esecuzione o run-time noto come Dalvik virtual machine (DVM), che in tale ambito sostituisce la consueta Macchina virtuale Java (JVM), esegue sempre un programma. Per lo sviluppo delle applicazioni è disponibile una completa documentazione[98] la quale, anche graficamente, riprende la struttura tipica della documentazione Java[99] del sito Oracle. Tramite l'SDK possiamo passare dalla descrizione della nostra applicazione alla sua effettiva esecuzione sia in emulazione, sia su un dispositivo concreto. Per descrivere l'applicazione al dispositivo prescelto si utilizza il file Manifest.xml. Possiamo quindi affermare che un'applicazione è descritta completamente da una tripletta: Codice Java; Risorse statiche xml; Manifest.xml. Il codice Java viene poi compilato insieme all'XML per generare un file con estensione .apk: esso contiene il bytecode per la cosiddetta Dalvik Virtual Machine (DVM). I passi successivi servono per installare il bytecode nel dispositivo (ed eseguirlo in emulazione). Il linguaggio per applicazioni Android è in realtà un "dialetto" del linguaggio Java così come è diversa anche la virtual machine di runtime (Dalvik virtual machine anziché JVM). Nella tipica applicazione Android non c'è un entry point (il classico metodo "main") da dove normalmente un programma comincia a caricare le sue parti software e avviarsi: tutto è pensato per essere un "componente" pilotato dagli eventi ("Event Driven") dell'hardware o di altri componenti. Questo paradigma fa sì che il programmatore sviluppi per ogni hardware delle routine il più possibile indipendenti. Un vantaggio è che il sistema operativo potrà ottimizzare le risorse, ad esempio rinunciando a caricare componenti (e hardware) non supportati o non prioritari perché inutilizzati. Inoltre, i componenti possono condividere le loro funzionalità: se ad esempio un videogioco trova installato nel dispositivo un programma che ritocca le fotografie appena scattate con la webcam, può avviarlo (se l'utente concede il permesso) per permettere all'utente di ritoccare tali foto, sceglierne una e "farsela passare" per scopi ludici. Il tutto con una interfaccia grafica perfettamente integrata e quindi senza tante aperture e chiusure di programmi. Ma soprattutto, il programmatore di videogiochi è così sollevato dall'onere di dover creare un sottoprogetto per implementare una funzionalità già esistente sotto altra forma.[100] È la parte dichiarativa contenente varie informazioni: informazioni di layout supporto multilingue Tale file descrive l'applicazione al dispositivo. Il Manifest elenca la lista delle necessità del programma per poter operare nel sistema; per esempio, se una apk richiede la connessione alla Rete, lo notifica nel Manifest e, qualora la connessione non sia disponibile, l'applicazione verrà bloccata a run-time. In generale è opportuno ai fini della sicurezza vagliare attentamente il contenuto del Manifest, soprattutto se proviene da fonte non verificabile, e non installare il programma qualora le richieste del Manifest non siano congrue con gli obbiettivi dichiarati del programma stesso, soprattutto nel caso di

Page 22: Android_ Saturday, Jan. 25th - Instapaper

richieste di connessione a linee di telefonia. Tramite l'SDK (o meglio: tramite gli strumenti utilizzati mediante l'SDK) trasformiamo la nostra applicazione Android in un codice intermedio chiamato bytecode; questo è esattamente quello che accade abitualmente in Java, ossia: Codice Java: compilazione: bytecode: VM → esecuzione reale del programma Questo bytecode viene eseguito da un programma chiamato macchina virtuale (Virtual Machine, VM). Negli ambienti Android non viene utilizzata la Macchina virtuale Java: è stata infatti scritta una nuova VM chiamata Dalvik Virtual Machine (DVM). Ogni terminale Android ha la sua DVM installata, come descritto nell'architettura del sistema, ed il suo compito è solo eseguire il bytecode. Avremo quindi la seguente catena di esecuzione: Applicazione Android: compilazione: bytecode: DVM → esecuzione reale dell'applicazione Android

L'idea è questa: essendo la DVM uguale per tutti i dispositivi Android, ogni applicazione può essere eseguita su ogni terminale, indipendentemente dal costruttore e dall'implementazione. La conseguenza di questa idea, che è anche una visione, è stata questa: molti costruttori di dispositivi mobili scelgono Android; in questo modo possono fornire ai propri utenti un ambiente condiviso da moltissimi altri utenti. Un supporto che permette agli sviluppatori di ricevere le nuove release Android in anticipo rispetto alla data di commercializzazione, per poter aggiornare le applicazioni più rapidamente. Al fine di favorire lo sviluppo di applicazioni per la piattaforma l'azienda Google ha indetto nel 2008 un concorso a premi legato allo sviluppo di applicazioni per Android. Il concorso a premi assegnerà una serie di premi e incentivi alle applicazioni, la scelta delle applicazioni vincenti verrà effettuata internamente da Google e la somma dei premi è di 10 milioni di dollari. Dal concorso risultano esclusi i programmatori residenti a Cuba, Iran, Siria, Nord Corea, Sudan, Burma (Myanmar), Quebec e Italia.[101] Le nazioni sono state escluse per adempiere alla legislazione statunitense contro il terrorismo o per impedimenti burocratici locali. L'Italia risulta esclusa per via della legislazione locale sulle vincite a premi sebbene la sua esclusione sia ancora in discussione.[102] Il primo telefonino con Android venduto in Italia fu HTC Dream, con l'operatore mobile TIM, al prezzo di 429 € senza contratto oppure a un prezzo minore con un contratto. Il dispositivo fu privato di alcune funzionalità da parte della TIM stessa. A seguire, anche Vodafone vendette il telefonino. Il secondo "Googlephone", nato dalla collaborazione tra Google, HTC e Vodafone, si chiamò HTC Magic e fu commercializzato il 5 maggio da Vodafone e il 1º maggio in colorazione nera, poi anche bianca. Entrambi gli operatori lo vendettero a 450 €, ma quello di Vodafone includeva una micro SD da 8 GB, mentre quello di TIM ne includeva una da 1 GB. La TIM, inoltre, installò nel dispositivo la versione di Android 1.5 di HTC, non di Google. A luglio del 2009 arrivò, tramite l'operatore Wind, il Samsung Galaxy, il primo smartphone dotato di sistema operativo Android puro della casa coreana, al costo di 399 €. Il 4 settembre 2009, Google, dopo aver annunciato lo sviluppo di un nuovo applicativo dell'Android Market, confermò che sarebbe stato possibile inserire le applicazioni a pagamento anche per sviluppatori Italiani. ComputerWorld ha riportato in un articolo che le condizioni d'uso di Android e dello store delle applicazioni prevedono che "nel caso in cui un qualsiasi prodotto violi l'accordo di distribuzione con gli sviluppatori, Google si riserva il diritto di rimuoverle da remoto su ogni dispositivo a propria discrezione".[103] Il 23 giugno 2010, Google è ricorsa a questa modalità per motivi di sicurezza e pulizia, dato che le applicazioni erano state create solo a scopo di ricerca.[104] Un team di sviluppatori si è visto rigettare un'applicazione regolarmente inserita nell'Android Market. L'applicazione in questione, "WiFi Tether for Root Users", è dedicata al tethering (permette ai dispositivi di funzionare come veri e propri router wi-fi per fornire a loro volta connettività wi-fi ad

Page 23: Android_ Saturday, Jan. 25th - Instapaper

altri apparecchi). La motivazione era che T-Mobile (primo carrier ufficiale di Android) vieta il tethering, quindi le applicazioni a esso dedicate creano un conflitto di interessi. Le notizie scatenarono pesanti polemiche tra gli utenti, indignati dalla poca flessibilità dimostrata da Google, la quale fecero pensare che il sistema non fosse in realtà tanto "open" come fu presentato.[105] Il tethering wi-fi fu comunque introdotto ufficialmente con la versione di Andoird 2.2 "Froyo", integrata nel sistema.[106] Nel 2012 è emerso come le applicazioni potrebbero estrapolare le foto personali dell'utente dal proprio dispositivo.[107] Talvolta Android OS, per via delle scarse ottimizzazioni di alcuni produttori di devices Android, è stato criticato per la poca fluidità del sistema durante l'utilizzo.[senza fonte] Un'altra critica è volta alla funzione sveglia, la quale non si attiva con il terminale spento[108]; quest'ultima mancanza è aggirabile tramite alcune applicazioni[109] A seguito ad una ricerca, un utente Android è venuto a conoscenza che alcuni dispositivi mobili in commercio, montano in realtà una versione modificata del sistema operativo, programmata appositamente per inviare dati personali ai server dei produttori del telefonino. L'articolo rivolgeva principalmente le critiche verso la Motorola, colpevole di inviare ai suoi server, password di email, social network e dati di utilizzo degli utenti. [110] Nel corso del 2011, Android è risultato essere uno tra i sistemi operativi per sistemi mobili meno sicuri, alzando diverse critiche sulle sue difese e sui sistemi di prevenzione attuati,[111][112] con un aumento di malware stimato a oltre il 3000%.[113] Per arginare il fenomeno, Google ha annunciato, nel febbraio 2012, l'introduzione di Bouncer, che effettua una scansione dettagliata delle applicazioni per rilevarne malware di ogni tipo nascosti. Inoltre si esegue una simulazione sul funzionamento delle applicazioni.[114] Andreucci Giacomo, Applicazioni iOS e Android con Google Maps, Edizioni FAG, Milano, 2011, pp. 348. Carli Massimo, Sviluppare applicazioni per Android, Edizioni Apogeo, 2011, pp. 416. Stark Jonathan, Sviluppare applicazioni per Android con HTML, CSS e JavaScript, Ed. Tecniche Nuove, 2011, pp. 159. it.wikipedia.org

Archive All • Download Newest

Page 24: Android_ Saturday, Jan. 25th - Instapaper