Understanding Android: Introduzione e architettura

Android è questo, Android è quello, viva Android, abbasso Android, abbasso Java; queste sono le frasi che più si sentono dire con persone che parlano del sistema operativo di casa Google, ed è per questo che in un paio di articoli, voglio raccontarvi cosa realmente è Android e chiarire alcuni punti.

Logo Android

Sistema operativo Mobile, veloce, potente, di alta personalizzazione, completo e soprattutto Open; di cosa stiamo parlando ? Ma di Android™, chiaro.

L'Android che conosciamo oggi nasce nel 2005, quando Google acquista la Android Inc. e quando nel 2007, alcune delle più grandi aziende produttrici di telefonia mobile decidono di appoggiare il progetto, dando poi vita all'OHA (Open Handset Alliance); non potevano immaginare in cosa si stavano imbattendo.

Quest'anno è molto importante per Android, perchè viene finalmente pubblicato l'SDK e Google fornisce ( a soli 400$ ) il Dev Phone 1.

Google Android Dev Phone 1

Google si impegna cosi a fornire ai futuri Sviluppatori una piattaforma per lo sviluppo semplice da installare ed utilizzare così da permettere una grande divulgazione forse tutte le età l'Android SDK s'implementa come Plugin in Eclipse, (o NetBeans).

Si arriva così ad Android v.1.5 e v.1.6 (quest'ultima non è nient'altro che una pre-release della 2.0) e Android inizia a far parlare di se. [cont.]

Ma come funziona Android ?

La tabella mostra l'architettura di Android

Android è un sistema Open Source e si appoggia al kernel Linux, >=2.6.27, nel quale le varie Mobile Manufacters inseriscono i drivers per i propri Hardwares.

Tutto ciò avviene al livello più basso del sistema; salendo troviamo le Librerie e le Android Runtimes, tutte naturalmente Open, e tra queste ricordiamo:

  • Surface Manager: permette l'accesso alle funzioni del Display e quindi dell'interfaccia 2D e 3, esso si occupa quindi di impostare i diversi layer delle finestre, utilizzando il double buffering, cosicchè vi sarà l'impossibilità dell'accavallamento di finestre in modo scoordinato
  • OpenGL ES: versione delle famose OpenGL per sistemi embedded, ormai alla versione 1.0; queste librerie rispecchiano la versione 1.3 delle GL Standard, per cui se avete del codice scritto in OpenGL 1.3, esso funzionerà perfettamente con le OpenGL ES 1.0: queste API permettono l'accesso a funzionalità 2D e 3D
  • Media Framework: API per la gestione dei MEDIA e dei vari CODEC per i formati multimediali (mp3, png, jpeg, mpeg..)
  • FreeType: insieme di fonts Free molto personalizzabili
  • SQLite: DBMS completamente scritto in C: conseguente di ciò naturalmente una grande versatiità, leggerezza e potenza.
  • Webkit: naturalmente da Google non si poteva aspettare altro, le famose webkit utilizzate da Google Chrome (e da Safari) per il browser di Android; qui c'è da fare, però, una puntalizzazione: su Android il browser occupa un'aspetto di tipo browser engine quindi andrà integrato in diversi tipo di applicazioni.
  • SSL: potevano mai mancare le Secure Socket Layer ?
  • LibC: implementazione delle librerie standard C, ottimizzate per Android.

Davvero ben organizzato non credete ? Ora parliamo un po dello sviluppo vero e proprio.

Come si sviluppa su Android ?

In Java; già, proprio così, Java, ma con qualche particolarità: essendo un sistema Open, Android ha evitato di entrare nel campo Sun (ed evitato le royalty); voi a questo punto vi potreste chiedere: «“Come fa Android a utilizzare JAVA senza la JVM ?”» Bhè, Google ha per l'appunto scritto una sua DVM (Dalvik Virtual Machine) grazie alla quale ogni applicativo java viene elaborato e il suo bytecode trasformato e snellito. La DVM precisamente lavora in ambito register based a differenza dello stack based della classica JVM. La differenza sostanziale sta nel fatto che le operazione di preparazione dell'esecuzione dell'applicativo avvengono nella fase di building, per cui i vantaggi si trovano nella maggiore velocità di esecuzione dei software che devono girare in un sistema a risorse limitate quale appunto un Cellulare ( anche se ormai non è più giusto chiamarli così in quanto la funzione di Telefono è solo una opzione fra le tante disponibili), mentre gli svantaggi vanno a tempo di building più lungo.

Le estensioni generate dalla DVM sono .dex.

Altra puntualizzazione molto importante da fare è che fino alla versione 2.1, la DVM non ha avuto il supporto per il JIT ( Just in Time: l'obiettivo di questo sistema è di combinare i vantaggi della compilazione del bytecode a quelli della compilazione nativa, aumentando le prestazioni quasi al pari di una compilazione direttamente in linguaggio macchina )  ma a quanto pare, nella versione 2.2 Froyo c'è questo supporto e da alcuni test effettuati dagli sviluppatori, le applicazioni e il sistema globale è aumentato, in termini di performance, del 450%; Gingerbread dal canto suo, ha un'ottimizzazione a livello Dalvik ancora più elevata e una direzione hardware che ne faranno, insieme ad Honeycomb, la versione Android dell'innovazione (Vedi proc. dualcore aka Nvidia Tegra 2).

Spero abbiate trovato questo Understanding interessante perchè ce ne saranno altri :) quindi alla prossima cari lettori e.. fatemi sapere cosa ne pensate nei commenti!

NOTE: testo consigliato per un'approfondimento: Android, Guida per lo sviluppatore (M. Carli)