Introduzione allo sviluppo Android

Lo sviluppo di una applicazione Android può essere effettuato in svariati modi. Lo sviluppatore ha infatti la possibilità di decidere se creare:

  • una app nativa
  • una app ibrida
  • una webapp

App native

Le applicazioni native sono generalmente le più performanti e le più ottimizzate per il sistema operativo in uso. Sono le app che andremo a sviluppare durante questa “guida”.

App ibride

Le applicazioni ibride sono applicazioni che possono essere eseguite su più sistemi operativi, rinunciando in parte alle performance ottimali delle app native. I framework più utilizzati sono per esempio:

  • Apache Cordova (di Adobe), che permette di utilizzare HTML, CSS e Javascript
  • React Native (di Facebook), che utilizza JSX, una versione “modificata” di JavaScript
  • Flutter (di Google), il framework “più giovane”, che utilizza il linguaggio Dart e un “Flutter engine” che è in grado di aumentare notevolmente le performance

Webapp

Sono le app che si basano interamente sulle piattaforme web.

Strumenti di sviluppo

Fino al 2014, le applicazioni Android venivano sviluppate utilizzando il programma “Eclipse”, oggi invece esiste un IDE chiamato “Android Studio” che è direttamente sviluppato da Google. È possibile scaricarlo dal sito ufficiale ed include anche l’ultima versione dell’SDK di Android.

Per creare un nuovo progetto sarà necessario cliccare su “Start a new Android Studio project”. Successivamente si aprirà questa schermata, selezionare “Empty Activity” e successivamente cliccare su “Next”.

Successivamente si aprirà una schermata nella quale andremo ad inserire i dati fondamentali dell’app, ovvero:

  • Name, il nome dell’app
  • Package name, considerato come una sorta di ID, deve essere univoco affinché ché non ci siano errori durante la fase di pubblicazione dell’app (es. non può essere “com.instagram.android” in quanto già usato da Instagram)
  • Save location, dove sarà salvato il codice sorgente dell’app
  • Language, il linguaggio di programmazione che andremo ad utilizzare (Kotlin o Java)
  • Minimum API level, la versione minima di Android che andremo a supportare (API 21 = Android 5.0, API 28 = Android 9.0, …)
  • This project will support instant apps, una funzione che permette alle app di essere utilizzate senza scaricarle dal Play Store (come fossero “in streaming”)
  • Use AndroidX artifacts, implementa la libreria AndroidX sviluppata da Google che ci aiuterà durante lo sviluppo dell’app

Infine apparirà la schermata contenente il progetto che abbiamo appena configurato.

Configurazione del telefono Android

Per abilitare il telefono alla comunicazione con Android Studio, bisogna abilitare una impostazione chiamata “Debug USB”:

  • Andare nelle impostazioni
  • Informazioni dispositivo
  • Cliccare su numero build per più volte fino a quando non comparirà il messaggio “ora sei uno sviluppatore”

Struttura di una app Android

Le applicazioni Android si dividono principalmente in tre parti:

  • Codice Java (rosso), necessario per la creazione della logica dell’app
  • Risorse (azzurro), come per esempio stringhe, traduzioni, immagini, colori e soprattutto layout
  • Android Manifest (giallo), un file in formato XML che specifica informazioni importanti riguardanti l’app, come per esempio i permessi (accesso alla fotocamera, lettura del disco, accesso al microfono, accesso alla connessione internet, …), il nome dell’app, l’icona da usare, la lista delle “schermate” dell’app, …

Le Activity

Le Activity sono entità che rappresentano le schermate di una app. Nella pratica sono classi Java che estendono la classe “Activity”; ogni Activity per essere eseguita deve essere registrata nell’AndroidManifest.xml (rosso).

In questo caso è importante notare come vengano inseriti altri tag che rendono la “MainActivity” la schermata che verrà aperta al lancio dell’app.

Il ciclo di vita di un’Activity

Le Activity posseggono uno speciale ciclo di vita che può essere rappresentato con il seguente schema:

Nella pratica, il controllo del lifecycle di una Activity è effettuato attraverso l’override (ovvero la riscrittura) delle varie funzioni “onCreate”, “onPause”, “onResume”, etc…

Le View ed i Layout

Lo sviluppo della parte grafica di una app Android viene effettuata con il linguaggio XML. Tutti i file di layout vengono inseriti nella cartella “res > layout”. Una View / Layout rappresenta una singola componente dell’Activity. Mentre un layout è in grado di possedere più View “figlie”, una View non può avere elementi al suo interno.

Esempi di View:

  • Button
  • TextView
  • ImageView

Esempi di layout:

  • LinearLayout
  • RelativeLayout
  • FrameLayout

La nostra prima app

In questa app andremo a creare una semplice app che visualizza un testo a nostra scelta. Come precedentemente detto, esistono vari tipi di Layout. Il layout che utilizzeremo è il LinearLayout, un layout in grado di predisporre le proprie View figlie in modo orizzontale (default) o verticale. All’interno di questo LinearLayout inseriamo una TextView, ovvero un testo che comparirà nella nostra Activity. È importante notare come ogni View / Layout possegga gli attributi “layout_width” e “layout_height”, cioè larghezza e altezza. Il valore di questi attributi può essere di tre tipi:

  • wrap_content, il “minimo” possibile
  • match_parent, il “massimo” possibile
  • dimensione fissa, come per esempio 30dp, 400dp, … I “dp”, ovvero Density-independent Pixels, sono “unità di misura” (come px, cioè pixel o “in”, cioè pollici), che Android è in grado di “scalare” in base alla dimensione dello schermo. Generalmente, i “dp” sono le unità più usate.

Per eseguire l’app basta cliccare sul tasto “play” in alto a destra e selezionare il dispositivo collegato.

Cliccando su “OK”, l’applicazione verrà automaticamente lanciata sul dispositivo.

Button

In questo piccolo progetto andremo a sviluppare un’app che mostra un messaggio Toast al click di un bottone. Procediamo con lo sviluppo della UI aprendo il file activity_main.xml nella cartella “res > layout” e inseriamo il seguente codice:

In questo modo andremo a creare un semplice bottone. Un attributo importantissimo è l’Android ID, ovvero un identificativo di quella View all’interno di quel layout. L’ID è di fondamentale importanza in quanto permette di collegare il layout XML al file Java dell’Activity. Ora passiamo alla parte logica, aprendo il file MainActivity.java nella cartella “java”. Per prima cosa, dichiariamo una variabile di tipo Button. Per importare nella MainActivity la classe Button, sarà sufficiente scrivere “Button cliccamiBottone” per poi attendere che compaia un popup di colore azzurro e premere contemporaneamente sulla tastiera “ALT + Invio”.

La funzione “findViewById” permette di assegnare alla variabile “cliccamiBottone” il bottone creato nel file XML. Essa richiede come parametro l’ID della View (il bottone nel nostro caso). Per ottenere gli ID delle View dalle classi Java, è necessario utilizzare la classe “R”. Quindi il parametro completo del findViewById sarà R.id.cliccami_bottone.

Per eseguire delle azioni al click del bottone, esiste il metodo “setOnClickListener”, che richiede come parametro una implementazione dell’interfaccia “OnClickListener”; Ciò che andremo a far fare al bottone una volta cliccato, deve essere inserito nella funzione “onClick”. Per far comparire un messaggio Toast, basta chiamare la funzione statica “makeText” presente nella classe Toast. Questa funzione richiede tre parametri: l’istanza dell’Activity, la stringa che rappresenterà il messaggio ed infine quanto tempo il Toast sarà visibile (Toast.LENGTH_SHORT, Toast.LENGTH_LONG).