Seleziona una pagina
programmare in Android con Android Studio e Kotlin

Android è una piattaforma veramente interessante e che permette di realizzare le più disparate applicazioni. Dalle app per telefoni, alle app per auto, cellulari e persino dispositivi IoT (i dispositivi connessi come lavatrici ma anche la lampadina intelligente che si accende da sola).

Uno dei motivi del suo grande successo è che la licenza con cui è stato rilasciato è Open Source, quindi è possibile visionare gran parte del suo codice a parte i driver proprietari delle varie aziende. Motivo anche per cui molte realtà invece che sviluppare il proprio sistema operativo si sono appoggiati ad Android. Quelle che l’hanno fatto, come Samsung, hanno fatto un botto di soldi. Quelle che invece hanno tentato di opporsi in ogni modo, come Nokia, sono state di fatto spazzate via (o quasi).

Inoltre, avendo dietro Google che spinge con montagne di soldi per il suo sviluppo e per dare risorse, documentazione, video, ecc. ai professionisti che ci lavorano, è veramente difficile che questo ecosistema un giorno morirà. Motivo per cui le persone negli anni hanno deciso di acquistare telefoni Android invece che Microsoft, Nokia, Blackberry o altre marche che avevano sistemi operativi proprietari.

L’unica che ancora resiste allo strapotere di Google è Apple. Il motivo per cui ancora resiste a questo dominio di Google è abbastanza semplice: think different. Per anni Apple si è distinta per essere un marchio caratteristico, distintivo. Un qualcosa quasi di “artistico”, per persone “diverse”. Inoltre, hanno puntato molto sul fatto che sia un brand differenziante e associato ad articoli di “lusso“.

Il mercato di iOS infatti è sempre più ristretto, tuttavia le persone che usano iOS sono per la maggior parte persone benestanti che quindi sono altospendenti, specie sul fronte app. Motivo per cui molte aziende sviluppano comunque per iOS visto che altrimenti si perderebbero la “fascia alta” del loro mercato.

Tuttavia, i sistemi proprietari arrivati nel 2022 ormai sono veramente old e se Apple dovesse continuare su questa linea, è abbastanza inevitabile che dovrà chiudere i battenti di iOS in tempi anche relativamente ristretti.

distribuzione di Android vs iOS
Fonte: statista.com

Le app ibride infatti, per quanto possano sembrare la soluzione hanno invece il problema che finché rimani sul semplice funziona tutto abbastanza bene, ma appena cominci a fare cose abbastanza complesse devi per forza smanettare parecchio. Ed entrare molto nella specificità della piattaforma per cui sviluppi.

Inoltre, quando ormai Android ha l’86.2% del mercato ed è in crescita… ha realmente senso sviluppare app che non girino solo in modo proprietario su Android? Diciamo che ancora il senso ce l’ha per alcune applicazioni che hanno grandi ambizioni, per chi ne ha meno piuttosto che fare app ibride forse ha senso fare solo app Android ormai.

Comunque, sotto con i 5 motivi!

Le app Android le fai in Kotlin

Fare app in kotlin è stupendo

Può sembrare il più stupido dei motivi, invece forse è quello principale. Kotlin è un linguaggio davvero favoloso e su cui hanno investito davvero tantissimi soldi su più fronti. Di fatto è un “Java mascherato e fatto bene”, motivo per cui inizialmente Android ha avuto così grande diffusione.

Infatti, ha permesso a molti programmatori che facevano Java per altri motivi di avvicinarsi al mondo del mobile visto che il linguaggio era lo stesso. Va detto che le logiche sono molto diverse rispetto alla programmazione backend o (meno) quella per app per computer, però è stata un’ottima scusa per molti per “fare il salto”.

Per quanto sia ancora possibile programmare per Android utilizzando Java, di fatto il futuro è inevitabilmente la programmazione con Kotlin. La cosa divertente, è che dovessimo guardare alla lista dei linguaggi più utilizzanti Kotlin sarebbe appena 30esimo!

Tuttavia, guardando in testa vedremo che…

classifica dei linguaggi e come si posiziona kotlin

Il terzo linguaggio più usato in assoluto è comunque il Java. Volendo spiegare questa lista, molto brevemente:

  • Python è un linguaggio molto bello e semplice. Motivo per cui è spesso usato a fini didattici. Per questo motivo e per la sua semplice interoperabilità con C e C++, è usato molto a fini matematici. I matematici e gli statisti infatti usano principalmente Python, R e Matlab. Inoltre, ha di fatto soppiantato per molti il vecchio Perl per scrivere brevi programmini di scripting per la gestione di task di utilità / di manutenzione. Nel pratico però, dovessi voler fare app desktop, mobile o web è comunque utilizzato, ma non così tanto.
  • C/C++. Sono linguaggi veramente molto utilizzati nonostante siano molto vecchiotti. Il motivo principale è che non hanno il garbage collector, quindi di fatto la gestione della memoria te la devi fare tutta a mano. In sostanza, sono più complessi rispetti a Java e molto più complessi rispetto a Python. Tuttavia, sono anche molto più efficienti in termini di performance. Specialmente il C che è la versione senza programmazione a oggetti (che permette di creare codice più mantenibile ma meno performante). Nel pratico tuttavia, vengono molto utilizzati in ambito IoT dove non hai molta disponibilità di memoria o di calcolo e quindi ti serve un linguaggio che spreme fino all’ultimo ciò che hai.
  • Java/C# diciamo che il resto del mercato grossomodo se lo dividono Java e C#. Sono sostanzialmente linguaggi quasi equivalenti, con l’unica differenza che Java è la “versione open source” mentre C# è la versione “enterprise” di Microsoft.

Sei interessato a questi temi? Seguimi su instagram per non perdere i prossimi articoli! 🙂

Pertanto, Java è molto rivendibile sul mercato. Anche dovesse fallire domani Google (impossibile, ma mettiamo) e/o dovessero chiudere il progetto Android (impossibile, ma mettiamo) comunque avresti imparato un linguaggio che ha così tanto share di mercato che è virtualmente impossibile che ti trovi in reali difficoltà a trovare un lavoro.

Quindi anche se Kotlin è ancora nelle retrovie avrà inevitabilmente un grande sviluppo nei prossimi anni. Considerato che è “consigliato” per lo sviluppo su Android solo da maggio 2019, ti fa capire come sia molto difficile per Kotlin rivaleggiarsela con Java (maggio 1995) o con C++ (1983). Il mondo dell’informatica infatti per quanto abbia molte novità rapidamente è anche molto lento nel cambiamento (basti pensare che il COBOL, linguaggio ormai vetusto, è ancora alla 23esima posizione nella lista…).

Infatti, se invece guardiamo la lista dei linguaggi verso cui i programmatori ambiscono a cambiare nell’immediato futuro…

Vediamo infatti che Kotlin sta in una bellissima terza posizione. Dopo Go che è principalmente usato per lo sviluppo backend/cloud e Typescript che è sostanzialmente il “Kotlin di JavaScript” (sto banalizzando :-)).

Comunque, futuribilità di Kotlin a parte, ha sicuramente anche svariati vantaggi:

  • totale compatibilità con Java. Ovvero, è possibile copiare codice Java su Android Studio e vederlo tradotto immediatamente in Kotlin. Anche Python può caricare librerie Java, ma non c’è alcun modo di “tradurre” (facilmente) codice Java in Python. La traduzione invece da Java a Kotlin è instantanea e con un copia/incolla. Questo facilita notevolmente la transizione a Kotlin.
  • è un linguaggio con tipizzazione statica e forte. In breve, se vuoi usare una stringa devi specificare che è una stringa. E se è una stringa, non puoi usarla come se fosse un intero. Per molti potrebbe sembrare una gran rottura (specialmente per chi arriva da linguaggi più dinamici e deboli) tuttavia permette molti refactoring direttamente da Android Studio con zero (o quasi) possibilità di introdurre errori. Inoltre, molti dei problemi possono essere trovati addirittura prima di compilare il codice direttamente dall’IDE proprio per questo motivo.
  • nonostante la tipizzazione, molto spesso il compilatore è in grado di inferire il tipo e quindi non serve specificarlo in modo esplicito come, per esempio, in Java. Questo permette nella gran parte dei casi di ridurre un gran quantitativo di boilerplate (ovvero: codice inutile) arrivando a sembrare di programmare per linguaggi più dinamici del Java.
  • ha varie strutture dati come i data class, sealed class ma anche le extensions, la delegation e le SAM interfaces oltre a molte altre cose che lo rendono molto più comodo da utilizzare rispetto a Java e molti altri linguaggi. Già solo le data class sono una tipologia di classe spesso molto usata su Java dove è possibile tuttavia risparmiare moltissimo codice.
differenza di un data class tra java e kotlin
Differenza tra codice Java e Kotlin
  • Kotlin è null safe (si, ho creato la voce su Wikipedia per spiegare cosa vuol dire lol). Ovvero, non puoi chiamare dei metodi di oggetti null o delle loro proprietà senza specificare una “strategia alternativa” nel caso in cui appunto l’oggetto possa essere null. Questo porta a una notevole riduzione dei bug a runtime e al blocco di questa problematica già a compile time.
  • Permette di utilizzare vari costrutti funzionali (ma meno di quelli presenti in scala) e quindi riesce a rendere molto più sempici operazioni sulle liste e sugli stream. Motivo per cui ormai va molto di moda la programmazione ad eventi su Android, proprio per la semplicità di manipolarli, filtrarli, modificarli, ecc. Va detto che tutto ciò è presente anche nelle ultime versioni di Java, per cui non è realmente una novità incredibile se uno ancora lo ua
  • Ha varie “scorciatoie” e “abbreviazioni” per ridurre ultieriormente il codice che vai a scrivere rispeto a Java (es. puoi scrivere arrayListOf(1, 2, 3) per creare un array con i tre interi all’interno. In Java è un mezzo parto).

In sostanza è quasi come avere un linguaggio “moderno” come Python e Ruby (quasi nel senso che è meglio) ma anche con la stabilità di un linguaggio corazzato come Java. Va detto che rispeto a Python o Ruby ci vuole un po’ di tempo in più per poterlo apprendere appieno, ma ne vale assolutamente la pena.

Puoi utilizzare Android Studio per sviluppare

è bellissimo programmare con Android Studio per kotlin

Sembra un vantaggio banale ma Android Studio è veramente uno strumento fantastico per lavorare e sviluppare.

Android Studio non è altro che IntelliJ sviluppato da JetBrains con il plugin di Android installato. Tuttavia, è veramente ben integrato per qualsiasi cosa tu debba fare per Android. Google e JetBrains ci hanno investito i milioni per renderlo uno strumento funzionale per lo sviluppo.

Sei interessato a questi temi? Seguimi su instagram per non perdere i prossimi articoli! 🙂

Quando ho lavorato in altri linguaggi, come node.js, iOS, C++ o altro ho raramente trovato un IDE che ti aiutasse così tanto. In particolare:

Preview della UI in real time

anteprima in real time del codice che stai facendo su Android Studio

Possibilità di vedere immediatamente quello che stai modificando nella UI. Questo vale sia che usi XML che compose per fare l’interfaccia grafica. Con compose probabilmente aumenteranno notevolmente nel tempo quanto è possibile vedere già nell’IDE senza neanche dover lanciare l’app.

Inoltre, come nella foto qui sopra, è possibile lanciare l’emulatore direttamente dentro Android Studio per vedere tutto in un’unica schermata e avere una risposta immediata di quello che hai cambiato.

Sembra banale ma questa funzionalità taglia notevolmente i tempi di sviluppo.

Metà del codice lo fa Android Studio

Ho fatto un breve video che puoi vedere qui sopra in cui velocemente faccio vedere quanto sia facile creare codice con Android Studio.

Infatti, tra l’autocompletamento del codice, il suggerimento delle classi e la generazione automatica del codice, molto di quello che dobbiamo fare è in realtà già gestito da Android Studio.

Questo riduce i tempi di sviluppo e ci semplifica la vita enormemente perché già scrivendo abbiamo suggerito quello che possiamo fare.

Inoltre, questo ci permette di evitare bug visto che già scrivendo l’IDE ci segnalerà se un metodo non esiste o lo stiamo usando in modo scorretto. Oppure ancora se c’è un modo migliore per fare quello che stiamo facendo (es: mettere qualche campo o funzione privata invece che pubblica).

Android Studio fornisce anche un grandissimo aiuto per quanto riguarda il refactoring. Nel video infatti ho fatto qualche refactoring banale e l’IDE ha fatto praticamente tutto automaticamente rendendo coerente il codice senza dover manualmente aggiornare le classi in cui questo codice viene utilizzato. Sembra una banalità, ma in molti altri linguaggi non ci sono IDE così corazzati che ti aiutano così tanto quando sviluppi codice.

Già per iOS molte di queste funzionalità non ci sono (tanto che ci “prendono in giro” dicendo che sostanzialmente programmare per Android è fare tante volte “alt+invio” e vedere il codice che si completa da solo :-)), specie quelle di refactoring. Per altri linguaggi ce ne sono anche molte di meno.

Sicuramente non sono stato esauriente su tutte le funzionalità e potenzialità di questo IDE ma penso renda l’idea di quanto sia potente e di quanto ci semplifichi la vita.

Essendo basato su IntelliJ va detto che gran parte di questi vantaggi ce li avresti anche se sviluppassi in Kotlin per back-end o desktop.

Emulatore molto ben sviluppato

emulatore per Android Studio

Sicuramente l’emulatore per Android è sviluppato molto bene e permette di testare molti scenari applicativi. Inizialmente lavorare con l’emulatore era una pena essendo pesantissimo e con molti problemi. Negli anni tuttavia l’hanno alleggerito parecchio (e i PC sono diventati molto più veloci) quindi questo problema si è ridotto notevolmente.

Ad oggi è praticamente possibile sviluppare anche un’app interamente da zero su un emulatore senza troppi problemi, a meno che non usi eccessivamente cose come la localizzazione e altre funzionalità proprie del dispositivo.

Supporto al testing

testing con Android Studio

Direttamente nell’IDE è molto semplice lanciare unit, integration e UI test. Sapendo anche la copertura del codice e le parti del codice che sono state toccate dai test e quali no.

Questo ci permette di riuscire a controllare molto meglio il nostro codice e utilizzare con più frequenza questi strumenti di verifica.

Può sembrare banale ma anche questa è una funzionalità spesso non presente in altri strumenti di sviluppo e non è così inusuale vedere le persone utilizzare il terminale o altri strumenti per lanciare i test e vederne l’andamento.

Ben integrato con Git e gli altri VCS

A molti piace usare git direttamente dal terminale, a me personalmente no. Android Studio in questo ti aiuta ed essendo molto ben integrato con git puoi fare praticamente qualsiasi cosa direttamente dall’IDE.

Dal selezionare un nuovo branch, a vedere la history del progetto, tutti i branch, l’andamento dei vari branch e i vari merge, ecc. Proprio come i “tanti” tool di gestione di Git, solo che hai tutto integrato già nel tuo IDE.

Puoi sfruttare il Google Play Store

è appassionante lavorare per il Google Play Store

A un costo una tantum di 25€ puoi pubblicare quante app vuoi sullo store di Google Play. Rispetto ai 99$ annuali di Apple annuali direi che è sicuramente un gran vantaggio. Il motivo è che Apple revisiona tutte le app prima della pubblicazione, cosa che ha sicuramente costi alti. Lo fa recentemente anche Google ma in modo meno stringente.

Da un lato dover pubblicare l’app può sembrare una limitazione dall’altro invece potresti sfruttare i meccanismi di Google Play per ottenere pubblicità gratuita. Come la migliore app del 2021 oppure la migliore di un certo mese in una certa categoria. Sfruttando questi meccanismi in modo intelligente è possibile avere un boost della visibilità della propria app che normalmente non sarebbe possibile. Sicuramente rispetto a realizzare un sito internet, questo è un grosso plus.

Sei interessato a questi temi? Seguimi su instagram per non perdere i prossimi articoli! 🙂

Di contro, sembra banale ma non lo è, l’utente deve installare la tua app. Ora, se la tua app è l’app di un dispositivo che vendi (io, per esempio, lavoro all’app dei robot di Neato Robotics) l’utente la scaricherà in modo abbastanza consequenziale all’acquisto del dispositivo. Quindi non si farà troppi pensieri sul scaricarla o meno. Se invece tuttavia è un’app a se stante, è possibile che guardi cose come:

  • la dimensione dell’app. Molti hanno poca memoria nei propri telefoni e quindi installano il minimo indispensabile. Altri magari hanno internet limitato a tot giga al mese e quindi dovesse pesare troppo non la scaricherebbero.
  • che permessi richiede e per quale motivo (es: se la tua app serve per le diete e chiede il permesso della localizzazione, non è un bel segnale…)
  • se ha o meno la traduzione nella propria lingua.
  • quanti download ha già fatto l’app.
  • ecc.

Pertanto, mentre in un sito mette l’url e lo apri, per un’app scaricarla è uno sforzo attivo. Bisogna dunque che non fai solo una buona app, ma che riesci a pubblicizzarla bene sullo store rendendo appetibile e interessante l’app tramite screenshot e una buona descrizione. Sicuramente è una barriera che scoraggia molte persone dallo scaricarla e fruirne.

Inoltre, hai anche molti strumenti integrati con lo store per fare pubblicità in app o rendere parti dell’app a pagamento. Diciamo che stai lanciando l’app in un ambiente che è già pensato per farti monetizzare. Mentre i siti internet erano stati pensati come documenti online con al massimo dei link. E per quanto ci siamo evoluti molto da quel punto, l’idea di base rimane e si sente.

Le app stanno fagocitando i computer

le app si stanno pappando i computer

Ci sono molti contesti applicativi dove un’app è l’unica soluzione. In altri, dove magari ha senso iniziare a pensare un servizio prima per le app e poi per il web. Molti altri in cui vale il contrario.

Faccio un esempio. Dovessimo lanciare un servizio tipo Google Maps domani avrebbe più senso lanciarlo per il tuo cellulare oppure per un sito internet? Molto probabilmente per il cellulare. Per il semplice motivo che l’utente avrà bisogno di questa funzionalità prevalentemente in movimento.

Dall’app potrai sfruttare molto meglio le capacità del telefonino in ambito geolocalizzazione e anche le sue performance per fare animazioni e una UI più accattivante.

Se invece dovessi fare il nuovo Facebook, probabilmente avrebbe senso iniziare da un sito internet. Ma se invece volessi fare Instagram? O Tiktok? Entrambi ora prevedono anche un sito internet, ma la fruizione dei contenuti è pensata principalmente da un telefono.

Il motivo è che le persone comuni si stanno spostando sempre di più verso cellulari e tablet. Molti addirittura non hanno più un computer non ritenendolo un accessorio vitale non lavorando magari in ambito tecnico. Addirittura per quelli molto poco tecnici, il computer è visto molto male e come troppo complicato.

Pertanto, prima di iniziare a lavorare per il tuo progetto, dovresti chiederti se ha più senso fare un sito internet o un’app. E in molti casi ti ritroverai a renderti conto che l’app e molto più utile di un sito internet.

Anche banalmente per Neato Robotics, fare un sito internet per manovrare i robot potrebbe avere senso ma molto meno rispetto alle app. Motivo per cui la maggior parte dei dispositivi che vengono venduti, hanno associato un’app e non un sito internet.

Sei interessato a questi temi? Seguimi su instagram per non perdere i prossimi articoli! 🙂

Inoltre, il mondo delle app sta velocemente fagocitando anche il mercato delle app desktop. Il motivo è che prima quando si voleva sviluppare delle app desktop per il controllo di macchinari industriali si usava magari Java e si creavano appunto app desktop. Ora sempre più spesso si vendono direttamente dei tablet che controllano il macchinario e per abbattere i costi spesso sono tablet Android.

Quando lavoravo per CenterVue (ora iCare) infatti lavoravo per un tablet Android che manovrava un macchinario per la vista.

Questo porta come vantaggio il non dover pensare a dei dispositivi industriali con vetri ad hoc, cpu e memoria a posta ecc. con costi sicuramente maggiori sia di realizzazione che di manutenzione e aggiornamento. Lo svantaggio è che bisogna anche trovare tablet di qualità visto che il mercato consumer ha requisiti più bassi rispetto al mercato industriale, che non accetta facilmente un tablet difettoso o che “perde colpi”.

Inoltre, banalmente, un tablet si può sganciare e sostituire facilmente. Un dispositivo integrato con il macchinario magari può prevedere il dover spedire l’intero macchinario indietro. Con costi di manutenzione e sostituzione infinitamente maggiori.

Puoi sfruttare al massimo il tuo dispositivo

dai il boost alle performance del tuo dispositivo

Può sembrare scontato ma non lo è. Android ti permette di far leva sulle caratteristiche il tuo dispositivo ha o meno. Esempio: ti può dire se hai o meno una tastiera fisica. Ti può dire se ha il GPS o meno (o quantomeno se ti dà l’autorizzazione a usarlo :-)). Idem la fotocamera e tante altre cose che può avere come caratteristiche il tuo dispositivo. Tipo l’accelerometro per dirne un’altra.

Inoltre, ti permette anche di eseguire codice in C nativo per performance maggiori. O di far partire dei servizi in background che nel mentre scaricano dati o fanno azioni in background (tipo spotify che ti fa andare la musica mentre scorri Instagram :-)).

Diciamo che hai molto più “potere” sul tuo dispositivo e le schermate sono sicuramente più responsive. Questo vale specialmente se fai il confronto con un sito internet ma vale anche per chi usa dei framework per creare app ibride. Con le app ibride il gap si sta colmando sempre di più, ma è ancora presente.

Conclusioni

Personalmente dovessi iniziare ora, rifarei la stessa scelta. Android ha un bacino d’utenza enorme ed in crescita. E le app hanno così tante possibilità di mercato da essere veramente il fenomeno che sta esplodendo, contro un internet sempre più vecchio e obsoleto.

Inoltre, sviluppare app è divertente e ti permette anche di fare i soldi sfruttando il market in modo relativamente facile e diretto. E’ ovvio che starà poi a te riuscire ad avere un impatto sul mercato.

A questo punto potresti chiederti perché non ho lanciato un’app mia ma ho creato un blog, vista tutta questa premessa sul fare app… beh il motivo è che questo blog l’ho creato per fare informazione e dare vita a un confronto con amici e persone con cui ho a che fare quotidianamente. L’app la vedo invece un ottimo modo per creare un prodotto da vendere e potenzialmente farci soldi o basarci un business.

Inoltre, un grande problema è che per creare un prodotto di successo hai bisogno di una community che lo sostenga. Un’app da sola non basta. Mentre un blog potrebbe essere un ottimo modo per creare una community interessata a quanto hai da proporre. Motivo per cui non escludo in futuro di lanciare delle app mie dovessi mai creare una community realmente interessante e che può essere interessata a dei miei prodotti.

Detto questo, spero di averti incuriosito e appassionato 🙂 se vuoi seguire anche i mie prossimi articoli, non dimenticarti di seguirmi su instagram! 🙂 se invece hai domande, falle liberamente qui sotto. A presto.