Programmazione mobile: ANDROID

23
ITIS Max Planck di Lancenigo di Villorba (TV) A.S. 2013-2014 Prof. PAOLO TOSATO Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported . Programmazione mobile: ANDROID Prima lezione: ambienti di sviluppo e architettura di un progetto

description

Prima lezione: ambienti di sviluppo e architettura di un progetto

Transcript of Programmazione mobile: ANDROID

Page 1: Programmazione mobile: ANDROID

ITIS Max Planck di Lancenigo di Villorba (TV) A.S. 2013-2014

Prof. PAOLO TOSATO

Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Programmazione mobile: ANDROID Prima lezione: ambienti di sviluppo e architettura di un progetto

Page 3: Programmazione mobile: ANDROID

17/04/2014 3 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Com’è fatto Android

Piattaforma software per smartphone e tablet. Realizzata dal consorzio Open Handset Alliance, di cui

Google è capofila (aderiscono anche Samsung, HTC, LG, Sony Ericsson, ASUS, Acer, ecc.).

Progetto nato nel 2005 che ha cominciato ad affermarsi presso il grande pubblico a partire dal 2009.

Page 4: Programmazione mobile: ANDROID

17/04/2014 4 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Com’è fatto Android

Architettura (dal mondo Open Source)

SW di base per l’utilizzo di un

dispositivo portatile

Piattaforma di sviluppo

Sistema Operativo

Page 5: Programmazione mobile: ANDROID

17/04/2014 5 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Com’è fatto Android

Dalvik Virtual Machine Esegue un linguaggio studiato per una migliore resa sugli

smartphone: DEX (Dalvik EXecutable).

Page 7: Programmazione mobile: ANDROID

17/04/2014 7 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Ambienti di sviluppo

Eclipse

• Scaricare Eclipse Modeling Tools (https://www.eclipse.org/downloads/)

• Scaricare Android SDK tools - USE AN EXISTING IDE (http://developer.android.com/sdk/index.html)

• Installare Eclipse Plugin (http://developer.android.com/sdk/installing/installing-adt.html)

• Aggiungere qualche package (Window Android SDK Manager): Android SDK Tools, Android SDK Platform-tools, l'ultima versione di Android (cartella Android), Android Support Library (nella cartella Extras).

• Aggiungere AVD (Window Android Virtual Device Manager)

Page 8: Programmazione mobile: ANDROID

17/04/2014 8 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Ambienti di sviluppo

Perché tutta questa fatica?

MIT App Inventor http://appinventor.mit.edu/explore/ai2/beginner-videos.html

Page 9: Programmazione mobile: ANDROID

17/04/2014 9 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Principi di programmazione

Hello World!

File New Project Android Application Project

Application name: nome visualizzato nel Play Store e nello smartphone Project Name: utilizzato in Eclipse Package name: almeno due livelli (esempi.ciaomondo) Minimum Required SDK: API 8 (Android 2.2)

Togliere la spunta su “Create custom launcher icon”

Activity Name: MainActivity (la classe che conterrà il nostro main)

Page 10: Programmazione mobile: ANDROID

17/04/2014 10 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Principi di programmazione

Modificare la classe MainActivity

package esempi.ciaomondo;

import android.os.Bundle; import android.app.Activity; import android.widget.TextView;

public class MainActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

TextView tv = new TextView(this); tv.setText("Hello World!"); setContentView(tv); } }

Page 11: Programmazione mobile: ANDROID

17/04/2014 11 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Principi di programmazione

Per provare l’applicazione

• AVD (Android Virtual Device).

• Dispositivo reale • Attivare “Debug USB” (Impostazioni Sviluppatore) • Se non trovate “Debug USB”: Impostazioni Info sul dispositivo 7 tap

sul “build number” finché non compare il messaggio “you are now a developer”.

• Collegare telefono al computer • Se tutto ok il dispositivo compare nella scheda “Devices” della prospettiva

DDMS (Dalvik Debug Monitor Service) di Eclipse.

• Pacchetto APK (Android Package)

Page 12: Programmazione mobile: ANDROID

Principi di programmazione

17/04/2014 12 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Android Package

• Aprire il file “AndroidManifest.xml”, all’interno del quale vanno dichiarati tutti i componenti del software (Eclipse fa già tutto il lavoro per noi).

• Prima di distribuire in giro il pacchetto è necessario apporre su di esso una firma digitale, altrimenti Android non potrà installarne i contenuti. Non è però necessario che una certification authority riconosca la chiave utilizzata per la firma.

• File Export Export Android Application

• Selezionare il progetto da esportare • Selezionare una chiare dallo keystore o crearne una (cartella "keystores",

file "android_keystore") • Per crearne una, specificare alias (nome chiave) e validità (25 anni).

Page 13: Programmazione mobile: ANDROID

Principi di programmazione

API (Application Programming Interface)

• Nella cartella di installazione di Android SDK: docs/reference/packages.html

• Online: http://developer.android.com/reference/packages.html

Poco della Micro Edition, molto della Standard Edition di Java (non ci sono AWT e Swing)

android.widget : contiene i componenti per la costruzione delle interfacce grafiche. android.graphics: funzioni primitive per la grafica di più basso livello. android.location: strumenti per interagire con un eventuale ricevitore GPS.

17/04/2014 13 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 14: Programmazione mobile: ANDROID

Principi di programmazione

17/04/2014 14 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

4 mattoni di base • Attività

sono quei blocchi di un’applicazione che interagiscono con l’utente utilizzando lo schermo ed i dispositivi di input messi a disposizione dallo smartphone.

Si realizza estendendo la classe base android.app.Activity.

• Servizio Un servizio gira in sottofondo e non interagisce direttamente con

l’utente. Si realizza estendendo la classe android.app.Service.

Page 15: Programmazione mobile: ANDROID

Principi di programmazione

17/04/2014 15 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

4 mattoni di base • Broadcast Receiver

Viene utilizzato quando si intende intercettare un particolare evento, ad esempio se si desidera compiere un’azione quando si scatta una foto o quando parte la segnalazione di batteria scarica.

Si realizza estendendo la classe android.content.BroadcastReceiver.

• Content Provider Utilizzati per esporre dati ed informazioni, costituiscono un canale di

comunicazione tra le differenti applicazioni installate nel sistema. Si realizza estendendo la classe android.content.ContentProvider.

Page 16: Programmazione mobile: ANDROID

Gestione delle risorse

17/04/2014 16 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Progetto Android: disaccoppiamento dati/codice

src: package e classi dell’applicazione.

assets: risorse esterne (poso usata).

res: risorse esterne strutturate e gestite (riferite nella speciale classe R).

gen: contiene la classe R, invocando la quale è possibile richiamare via codice le risorse memorizzate sotto la directory res.

Page 17: Programmazione mobile: ANDROID

Gestione delle risorse

17/04/2014 17 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

La cartella res può contenere una o più delle seguenti sotto-cartelle • anim: file XML che descrivono delle animazioni.

• drawable: immagini (supportati PNG e JPEG).

• layout: file XML che descrivono il layout delle interfacce utente.

• values: file XML che descrivono stringhe e parametri utilizzati dall’applicazione.

• xml: file XML di tipo qualsiasi.

• raw: file binari di tipo qualsiasi (ad esempio audio o filmati).

Page 18: Programmazione mobile: ANDROID

Gestione delle risorse

17/04/2014 18 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Qualificatori

• Lingua e regione: it per italiano, en per inglese, fr per francese, ecc.

• Dimensioni dello schermo: small (piccolo), normal (normale) e large (grande).

• Orientamento dello schermo: port (schermo più alto che largo), land (schermo più largo che alto) e square (schermo quadrato).

• Densità dei pixel dello schermo: ldpi (bassa densità), mdpi (media densità), hdpi (alta densità) e nodpi (speciale qualificatore che ospita le immagini che non devono essere scalate in base alla densità). Esempi • drawable-small-land-mdpi-it • values-it • values-fr

Page 19: Programmazione mobile: ANDROID

Gestione delle risorse

17/04/2014 19 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Gestioni dei valori in res/values Stringhe (strings.xml) <string name="hello_world">Hello world!</string> Colori (colors.xml) <color name="rosso">#FF0000</color> Rettangoli di colore (colors.xml) <drawable name="verde">#00FF00</drawable> Misure e dimensioni (dimens.xml) <dimen name="lato">180px</dimen>

Page 20: Programmazione mobile: ANDROID

17/04/2014 20 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Gestione delle risorse

Gestioni dei valori in res/values

Array di interi (arrays.xml) <integer-array name="numeriPrimi"> <item>3</item><item>7</item> </integer-array>

Array di stringhe (arrays.xml) <string-array name="nomi"> <item>Carlo</item><item>Claudia</item> </string-array>

Stili e temi (styles.xml) <style name="titolo"> <item name="android:textSize">18sp</item> <item name="android:textColor">#000088</item> </style>

Page 21: Programmazione mobile: ANDROID

Gestione delle risorse

17/04/2014 21 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Richiamare le risorse

Da XML: @tipo/nome • @array, per gli array. • @color, per i colori. • @dimen, per le dimensioni. • @drawable, per i valori drawable, e per le immagini messe in res/drawable. • @layout, per richiamare i layout presenti nella cartella res/layout. • @raw, per i file nella cartella res/raw (cfr. box laterale). • @string, per le stringhe. • @style, per gli stili.

Da Java Resources res = getResources(); String appName = res.getString(R.string.app_name);

Page 22: Programmazione mobile: ANDROID

Gestione delle risorse

17/04/2014 22 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

package esempi.ciaomondo;

import android.os.Bundle; import android.app.Activity; import android.widget.TextView; import android.content.res.Resources;

public class MainActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

Resources res = getResources(); String message = res.getString(R.string.hello_world);

TextView tv = new TextView(this); tv.setText(message); setContentView(tv); } }