Android OS
An open platform for
sofware development
Ludovico Cellentani
Director, Just Funny Games s.r.l.
[email protected]
Portions of this page are reproduced from work created and
shared by Google and used according to terms described in
the Creative Commons 2.5 Attribution License.
“I have always wished that my
computer would be as easy to use
as my telephone.
My wish has come true.
I no longer know how to use my
telephone.”
-- Bjarne Stroupstrup
Che cos’Android OS?
 Sistema Operativo basato su versione modificata del kernel Linux
 Inizialmente sviluppato da Android Inc. società acquisita da Google
e poi successivamente ceduta alla Open Handset Alliance (un
consorzio di produttori di hardware, software e società operanti
nelle telecomunicazioni)
 Presentato alla comunità il 5 Novembre 2007
 Molto del software del sistema operativo è distribuito con licenza
Apache, una licenza open source
 Nel corso dei 3 anni il firmware ha già registrato una consistente
evoluzione arrivando alla versione 2.1
Android è Linux?
ANDROID NON E’ LINUX!
Android OS è costruito sul kernel di Linux, ma non è GNU/Linux
 nessun sistema di GUI nativo (vedi Linux Qt package)
 no GNU C Library
 nessuna utility GNU/Linux
Android è Java?
ANDROID NON E’ JAVA!
Android non è un’implementazione della piattaforma Sun Java
 utilizza Java come linguaggio di programmazione
 fornisce un’implementazione parziale del framework Java5 SE
 il codice prodotto viene eseguito su una Virtual Machine Dalvik e
non su una Java Virtual Machine
Dalvik VM, che cos’è?
 VM ad architettura register-based differentementa da JVM che
sono VM con architettura stack-machine
 Codice sorgente è convertito file Dalvik Executable (.dex), formato
compatto specificatamente disegnato per l’esecuzione su
dispositivi con forti vincoli di memoria e potenza della CPU
 NO JIT compilation (Android 2.0 ha introdotto una versione
sperimentale di compilazione JIT, disabilitata di default)
 Definisce e usa un proprio formato di bytecode (NO standard Java
bytecode)
 Class library set basato su Apache Harmony Java Implementation
Android OS kernel (1/2)
Basato su kernel Linux 2.6 di cui eredita le seguenti caratteristiche:
 Sicurezza
 Memory Management
 Processes and Threads Management
 Classico Network Stack OSI
 Driver Model
 Abstraction Layer
Android OS kernel (2/2)
A tutte le features ereditate dal kernel Linux, Android OS kernel
aggiunge le seguenti caratteristiche:
• Alarm support
• Linux Ashmem driver support (memory file system)
• Binder mechanism (remote procedure call system)
• Power Management support
• Low Memory Killer system (no swap space support)
•Logger system support
Android OS: l’evoluzione (1/4)
On 30 April 2009, the official 1.5 (Cupcake) update for Android was released.
There are several new features and UI updates included in the 1.5 update:
• Ability to record and watch videos with the camcorder mode
• Uploading videos to YouTube and pictures to Picasa directly from the phone
1.5
(Cupcake)
Based on
Linux Kernel
2.6.27
• A new soft keyboard with an "Autocomplete" feature
• Bluetooth A2DP support (which in turn broke Bluetooth connectivity with
many popular cars and headsets. This has yet to be fixed as of December 2009)
• Ability to automatically connect to a Bluetooth headset within a certain
distance
• New widgets and folders that can populate the Home screens
• Animations between screens
• Expanded ability of Copy & Paste to include web pages
Android OS: l’evoluzione (2/4)
On 15 September 2009, the 1.6 (Donut) SDK was released.
Included in the update are:
• An improved Android Market experience.
• An integrated camera, camcorder, and gallery interface.
1.6
(Donut)
Based on
Linux Kernel
2.6.29
• Gallery now enables users to select multiple photos for deletion.
• Updated Voice Search, with faster response and deeper integration with native
applications, including the ability to dial contacts.
• Updated search experience to allow searching bookmarks, history, contacts,
and the web from the home screen.
• Updated Technology support for CDMA/EVDO, 802.1x, VPN, Gestures, and a
Text-to-speech engine.
• Support for WVGA resolutions.
• Speed improvements for searching & the camera.
Android OS: l’evoluzione (3/4)
On 26 October 2009 the 2.0 (Eclair) SDK was released. Among the changes are:
• Optimized hardware speed
• Support for more screen sizes and resolutions
• Revamped UI adding a new contact lists
2.0/2.1
(Eclair)
Based on
Linux Kernel
2.6.29
• New browser UI and HTML5 support
• Better white/black ratio for backgrounds
• Improved Google Maps 3.1.2
• Microsoft Exchange support
• Built in flash support for Camera and Digital Zoom
• MotionEvent class enhanced to track multi-touch events[41]
• Improved virtual keyboard
• Bluetooth 2.1
• Live Wallpapers
Android OS: l’evoluzione (4/4)
Confirmed new features:
• Support of Application Installation to Memory Card
• Integrated Adobe Flash support
2.2
(FroYo)
Based on
Linux Kernel
2.6.32
ContentProviders
Notifications
(broadcast receivers)
Services
Intents
Views
Activities
Android OS: building blocks
AndroidManifest.xml
AndroidManifest.xml
• Ogni applicazione deve presentare un file AndroidManifest.xml nella propria
root per consentire al sistema di stabilire i parametri di esecuzione
• Tale file permette all’applicazione di:
• specificare il proprio identificativo univico all’interno del sistema
• descrivere i componenti: le Activities, gli Intents compatibili e i ContentProviders
di cui l’applicazione e’ composta
• specifica i permessi necessari per interagire con i componenti dell’applicazione
• stabilisce la versione minima delle API Android richieste dall’applicazione
• la lista di libreria con cui l’applicazione necessita di essere linkata a runtime
• riporta le classi Instrumentation che forniscono profiling e altre informazioni di
misura sull’esecuzione dell’applicazione
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<permission />
<instrumentation />
<uses-sdk />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>
<provider>
<grant-uri-permission />
<path-permission />
<meta-data />
</provider>
<uses-library />
</application>
</manifest>
Activities
• Oggetto adibito alla presentazione e gestione di una determinata necessità.
• Ogni Activity è implementata come sottoclasse di Activity dell’API Android.
• Un’applicazione può essere costituita da 1…N Activities.
• In un dato momento solo una Activity è visibile.
• In un dato momento solo una Activity è attiva; “il muoversi” tra Activities
viene fatto facendo si che ciascuna Activity attivi la successiva e ogni nuova
Activity è posizionata sopra la precedente.
• Presenta una Window di default che normalmente riempe tutto lo schermo
(ma è consentito avere Window di dimensione qualunque).
• Il contenuto della Window di default è presentato come un’organizzazione
gerarchica di oggetti Views (oggetti che hanno come classe base View).
Stati di una Activity
 ACTIVE
• posizionata sopra tutte le altre
 PAUSED
• non in focus ma visibile
• può essere “uccisa” da servizio LMK
 STOPPED
• dietro altre Activities
 DROPPED
• “uccisa” da servizio LMK per
recuperare memoria
Views
• Building block nella costruzione di interfaccie utenti per Android OS.
• Ogni classe derivante dalla classe View è responsabile di disegnare se stessa.
• Ogni classe derivante dalla classe View è chiamata a rispondere agli eventi.
• Nella costruzione dell’interfaccia utente di una applicazione Android, oggetti
di classe View possono essere organizzati in gerarchia più o meno complessa.
• Ogni classe derivante dalla classe View definisce un Layout per stabilire i
proprio parametri di disegno. Il Layout può essere specificato anche tramite
file XML
Views: esempio di Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
Views e Viewgroups
• Oggetti Viewgroups sono speciali classi di
oggetti View che possono contenere altri oggetti
View.
• Building block nella definizione di Layout
• Android framework è responsabile di invocare i
metodi di measuring, laying out e drawing
quando è necessario aggiornare una gerarchia di
View e Viewgroups.
• L’applicazione è responsabile di implementare i
metodi mesure(), layout() e draw().
Intents
• Intents sono “messaggi” che consentono di controllare il flusso di attivazione
di Activities, Services e Notifications.
• Meccanisco per la gestione del runtime late binding: ad esempio oggetti di
tipo Intent possono venir impiegati per “muoversi” tra Activity.
Attributi principali che descrivono un oggetto Intent
Attributo
Descrizione
Componernt Name Il nome del componente incaricato di gestire l’Intent. A runtime consente di
indirizzare l’Intent all’istanza di un oggetto specifico
Action
L’azione da eseguire, ad esempio ACTION_CALL (avviare una telefonata),
ACTION_EDIT (presentare dati all’utente per l’editing), ACTION_MAIN
(avviare il destinatario come Priamary Activity)
Data
Dati su cui operare associati all’Intent da passare all’oggetto destinatario,
ad esempio un contatto della rubrica, un URI da aprire
Services
• Componente di applicazione che viene eseguito in background per un tempo
indefinito e non interagisce con l’utente.
• Un Service permane nel suo stato di attività fino a quando:
• non viene interrotto da un’entità esterna
• non si auto-interrompe
• non ha alcuna connessione ad altri componenti attivi nel sistema
• Ogni oggetto Service deve avere un corrispondente tag <service> nel file
AndroidManifest.xml
• Oggetti Service sono eseguiti nel thread principale di applicazione
Notifications
• Oggetti con l’unico compito di informare l’utente riguardo eventi originati dal
sistema o da altre applicazioni. Ad esempio l’evento “battery low” o “la lingua
di sistema è cambiata”.
• Non hanno un’interfaccia utente, ma possono attivare una Activity per
consentire all’utente di interagire oppure utilizzare l’oggetto
NotificationManager per allertare l’utente di qualcosa.
• Notifications possono “comunicare” con l’utente in diversi modi:
• flashing della backlight
• vibrazione
• playback di un effetto sonoro
• icona persistente nella barra di stato del device
Content Providers
• Componente di un’applicazione che permette l’accesso da specifici dati ad
altre applicazioni.
• I dati possono essere memorizzati in un file nel file system o in un database
SQLite
• Ogni Content Provider è l’istanza di una classe derivante da ContentProvider.
• Oggetti Content Provider sono l’unico modo per condividere dati tra
applicazioni.
• I dati di un Content Provider sono esposti pubblicamente tramite un URI
univoco nel sistema: tutti gli URI iniziano con la stringa “content://”.
• Android OS mette a disposizione un set di Content Provider che contengono
dati generici: audio, video, immagini, personal contact information, etc…
Content Providers: un esempio
Content Providers espongo i dati come semplice tabella su un modello di dati simildatabase, dove ciascuna riga rappresenta un record e ciascuna colonna
un’informazione di un dato tipo e valore
_ID
NUMBER
NUMBER_KEY
LABEL
NAME
TYPE
13
(425) 555 6677
425 555 6677
Kirkland office
Bully Pulpit
TYPE_WORK
44
(212) 555-1234 212 555 1234
NY apartment
Alan Vain
TYPE_HOME
45
(212) 555-6657 212 555 6657
Downtown
office
Alan Vain
TYPE_MOBILE
53
201.555.4433
Love Nest
Rex Cars
TYPE_HOME
201 555 4433
Android Market
• Online software store creato da Google per i devices Android OS.
• Un’applicazione Market è pre-installata sui dispositivi Android e consente
agli utenti di sfogliare e comprare online applicazioni create da terze parti.
• Annunciato il 28 Agosto del 2008 e disponibile agli utenti il 22 Ottobre 2008.
• Inizialmente lanciato come mercato di sole applicazioni gratuite, il supporto
per le applicazioni a pagamento disponibile dal Febbraio 2009.
• Alla fine di Aprile 2010 l’Android Market contava circa 50,000 applicazioni.
• Le revenues collezionate dalle applicazioni a pagamento sono ripartite in:
70% allo sviluppatore, 30% tra operatore mobile e società di gestione del
billing
Biografia
 Android Home (http://www.android.com/)
 Android Developer Home
(http://developer.android.com/index.html)
 Android OS source code (http://source.android.com/)
 The Google App Market – An Analysis
(http://weblog.cenriqueortiz.com/mobility/2009/09/06/the
-google-app-market-an-analysis/)
Scarica

AndroidIntroduction