• android-sviluppo-app

    Introduzione allo sviluppo di app con Android

    In questo articolo faremo una panoramica dello sviluppo di app con Android. Si tratta del primo articolo sullo sviluppo mobile, a cui ne seguiranno altri con taglio più orientato alla persistenza dei dati in ambiente mobile.

    Le basi di Android

    Con i suoi 1,4 miliardi di installazioni mensili attive, Android è il sistema operativo più diffuso per i dispositivi mobili. E con un numero così elevato di installazioni, l’attività di sviluppo di app è un’opportunità divertente, stimolante e redditizia. Per sviluppare applicazioni Android è necessario possedere nozioni di programmazione Java e familiarità con il linguaggio XML.

    Prima di entrare nei dettagli di come è fatta un’app, facciamo un primo excursus generale sul mondo delle app. Le app Android si possono acquistare/scaricare dallo store di Google Play (o da Amazon per dispositivi Fire). Le app di solito sono disponibili per diversi dispositivi: tablet, smartphone, dispositivi Chrome OS supportati, Android TV, Android Auto e Android Wear. Le versioni del sistema operativo Android (a partire dalla 1.5 Cupcake) sono state chiamate ufficialmente con nomi di dolci in ordine alfabetico:

    • Cupcake
    • Donut
    • Eclair
    • Froyo
    • Gingerbread
    • Honeycomb
    • Ice Cream Sandwich
    • Jelly Bean
    • KitKat®
    • Lollipop
    • Marshmallow
    • Nougat
    • Oreo

    versioni-android

    Quando si crea un’app per Android, occorre prestare attenzione alla versione dell’SDK con la quale viene creata e quindi su quale versione può essere installata.

    Lo sviluppo di un’app per Android richiede alcuni passaggi fondamentali. Innanzitutto, occorre creare un progetto, una sorta di contenitore con dei file, delle risorse e delle impostazioni dell’app. Le componenti di base di un progetto sono le seguenti:

    1. Le impostazioni. Definiscono come funziona l’app, cosa serve al progetto, come apparirà in Google Play, il numero di versione, l’icona dell’app, etc …
    2. Le risorse. Ad esempio un effetto sonoro per la notifica o per un’azione dell’app è associata ad un file audio, che è una risorse del progetto.
    3. Il layout. E’ l’insieme delle schermate, ciascuna con i propri pulsanti, caselle di testo, aree scorrevoli e menu.
    4. Il comportamento. Cosa deve fare l’app e come deve farlo viene descritto nel codice sorgente scritto dal programmatore, compilato, convertito in codice nativo per essere eseguito sul dispositivo.
    5. L’SDK. E’ il componente fornito per consentire all’app di essere eseguita sul dispositivo Android, accedere alle risorse del sistema operativo, mostrare gli elementi grafici sullo schermo, etc …

     

    componenti-app-android

    Tutti questi elementi in un progetto vengono utilizzati per assemblare l’applicazione che potrà poi essere eseguita sul proprio dispositivo, ma occorre anche consentire agli altri di scaricarla, inviandola a Google Play. Google analizza l’app (per assicurarsi che non faccia nulla di illecito) e la rende disponibile su Google Play. Se l’app è oggetto di aggiornamenti, (ad esempio vengono aggiunte nuove funzionalità o corretti dei bug), occorre modificare uno o più componenti del progetto, riassemblare l’app e caricarla su Google, per aggiornare la versione nello Store.

    Questo è in poche parole il normale processo per lo sviluppo di un’app, e quindi la procedura di base che verrà eseguita quando si crea un’app per Android.

    Gli strumenti per lo sviluppo delle app per Android

    Lo sviluppo di un’app per Android richiede l’utilizzo di alcuni strumenti. Il principale è un IDE (Integrated Development Environment, o ambiente di sviluppo integrato), come Android Studio. Utilizzando la definizione di Wikipedia, in informatica un ambiente di sviluppo integrato è un software che, in fase di programmazione, aiuta i programmatori nello sviluppo del codice sorgente di un programma. Spesso l’IDE aiuta lo sviluppatore segnalando errori di sintassi del codice direttamente in fase di scrittura, oltre a tutta una serie di strumenti e funzionalità di supporto alla fase di sviluppo e debugging. Gli IDE più moderni hanno un meccanismo di completamento intelligente del codice. Android Studio include tutte queste funzionalità.

    android-studio

    Android Studio è completamente gratuito e consente di creare applicazioni per cellulari, tablet, dispositivi Chrome OS supportati, TV e ware con sistema operativo Android.

    Un altro strumento utile è Adobe Creative Cloud, una raccolta di software e servizi cloud per la fotografia, il disegno grafico, il montaggio video, la creazione di contenuti per il web e altre applicazioni creative sviluppata e distribuita da Adobe Systems. Adobe Creative Cloud utilizza una licenza Saas (Software as a Service), per cui l’utente finale acquista abbonamenti mensili o annuali che gli permettono di scaricare e usufruire delle ultime versioni dei software della raccolta. I programmi inclusi inAdobe Creative Cloud, come Photoshop o Illustrator, sono importanti per creare icone app, grafica e altre risorse di design utilizzate nell’app.

    Infine ti serviranno dei dispositivi hardware per testare l’app, piuttosto che utilizzare gli emulatori che fanno parte di Android Studio. Un emulatore esegue una versione virtuale di Android per diversi dispositivi. Gli emulatori sono utilissimi per testare le funzioni fondamentali, ma occorre sempre avere un hardware reale per un test effettivo.

     

    Il framework per lo sviluppo Android

    Gli sviluppatori Android dovrebbero possedere almeno di una conoscenza di base dell’architettura del sistema operativo e del framework. Il sistema operativo Android è come una torta costituita da vari strati, ciascuno dei quali ha le proprie caratteristiche e il proprio ruolo.

    android-stack

    Android è stato progettato attorno a un kernel di tipo Linux ottimizzato per dispositivi mobili, in modo che funzioni bene su dispositivi che hanno capacità limitate di CPU e memoria. Sopra il kernel c’è il runtime Android e un insieme di librerie (libc, WebKit, SQLite, SSL, FreeType, Media Framework, SGL, OpenGL, Surface Manager, etc …). Ancora sopra c’è il framework applicativo e infine le applicazioni vere e proprie, sia quelle fornite con il sistema, che quelle installate dall’utente.

    Il kernel Linux

    Il kernel Linux (scelto per motivi di portabilità, sicurezza ed elevato numero di funzionalità) contiene un insieme di driver per audio, fotocamera, display, tastiera, gestione della memoria flash, alimentazione, Wi-Fi e così via. I produttori dei dispositivi (come Samsung, Asus, HTC, LG, Huawei, etc …) si occupano di personalizzare i driver e farli funzionare per i propri dispositivi.

    Il runtime Android

    Il runtime Android comprende una raccolta di librerie principali e la macchina virtuale. Fino alla versione Android 4.4 è stata usata  una macchina virtuale chiamata Dalvik. A partire da Android 5, la VM Dalvik è stata sostituita da una nuova macchina virtuale chiamata ART, che utilizza la compilazione ahead-of-time rispetto al modello just-in-time utilizzato in Dalvik: le app vengono compilate in codice macchina al momento dell’installazione o la prima volta che si apre l’app, piuttosto che aspettare che le funzionalità vengano utilizzate per la prima volta. Di conseguenza, le app vengono eseguite un po’ più velocemente con ART, a parità di altre condizioni.

    E come ho detto in precedenza, ora ci sono due catene di compilatori, il compilatore Legacy e il compilatore Jack che è stato introdotto in Android 7. Il compilatore guarda il tuo codice e funziona anche con un mucchio di librerie fornite all’interno dell’SDK di Android. Queste librerie gestiscono tutti i tipi di funzionalità, tra cui grafica, database, crittografia, caratteri tipografici e così via. Funzionano allo stesso livello dello stack software del runtime di base, ma sono espandibili e quindi i produttori di dispositivi possono aggiungere le proprie librerie a questo livello.

    Le librerie

    Sopra il livello relativo al kernel Linux, ci sono le librerie native come WebKit, OpenGL, FreeType, SQLite, Media, C runtime library (libc) etc … La libreria WebKit fornisce supporto ai browser, la libreria SQLite fornisce supporto per i database, la libreria FreeType fornisce supporto ai font, la libreria Media alla riproduzione e alla registrazione di audio e video, e così via.

    Il framework applicativo

    Il framework applicativo dispone di moduli per il controllo di tutti i componenti delle app, come le attività (le schermate che l’utente vede, i fornitori di contenuti per gestire i dati, posizioni, notifiche, risorse, gestione del telefono e così via.

    Applicazioni

    Nell’ultimo livello infine ci sono le app. Ogni versione di Android fornita da Google è stata distribuita con diverse app predefinite, come Gmail, Hangouts, Google Maps e così via. Un dispositivo che non dispone di licenze Google (come ad esempio un tablet Amazon Fire), avrà un diverso insieme di applicazioni predefinite.

    Tutte le versioni di Android hanno una schermata home, un browser, la gestione dei contatti e un calendario, la gestione del telefono e della fotocamera.

     

    Sviluppo Java per Android

    Il framework di Android ruota attorno al linguaggio di programmazione Java. Prima di Android 7, Android utilizzava una versione customizzata di Java; con Android 7 viene usato Open JDK. Le sintassi di Java 5 e 6 sono completamente supportate, e la sintassi Java 7 lo è in gran parte. Scegliendo di configurare il progetto con il compilatore Jack, è possibile utilizzare gran parte della sintassi di Java 8. Non tutte le API Java sono implementate nell’SDK di Android; per sapere se una determinata API è disponibile, occorre guardare la documentazione di Android. Ad esempio, il costrutto try-with-resources funziona solo a partire dalle API 19 dell’SDK , e l’annotation @SafeVarargs non è supportata. Invece i package java.lang, java.io, java.nio, java.math, java.net, java.text, java.util, javax.xml e javax.sql sono completamente o in larga misura supportati. In aggiunta, l’SDK di Android comprende delle API che non sono disponibili in Java, come android.app, android.database, android.net e così via. Controlla la documentazione all’indirizzo https://developer.android.com/reference/classes.html per sapere cosa è disponibile.

    Quando si crea un’app in Android Studio o dalla riga di comando, di solito si utilizza il processo di compilazione standard (chiamato processo Legacy). Si parte dal codice sorgente (.java) e da librerie precompilate (.class) assemblate dal compilatore standard javac in bytecode Java (.class). A partire dal bytecode è possibile trasformare le classi utilizzando ProGuard, uno strumento che minimizza e offusca il codice il bytecode (rendendo più complessa la decompilazione). I file generati da ProGuard sono sempre .class. Infine lo strumento DEX trasforma il bytecode .class in bytecode universali per Android basati su DEX.

    android-compilazione-predefinita

    L’utilizzo del compilatore Jack (per utilizzare ad esempio la sintassi Java 8) è più semplice. Si parte dal codice sorgente (.java) e da librerie precompilate (.class) assemblate dal compilatore Jack direttamente in bytecode universali per Android basati su DEX, ma eseguendo tutte le attività effettuata da javac e ProGuard in modo implicito. Il processo di compilazione è più veloce ed è possibile utilizzare un maggior numero di costrutti della nuova sintassi di Java. Lo svantaggio nell’utilizzo del compilatore Jack consiste nel fatto che non è possibile utilizzare lo strumento Instant Run di Android Studio che consente di distribuire parti di un’applicazione su un dispositivo di test, che è utile per applicazioni molto grandi.

    android-compilazione-jack

    Una volta che il codice DEX è sul dispositivo, viene tradotto in codice macchina specifico per il dispositivo stesso.

    Cosa serve per sviluppare con Android

    Per creare app per Android, occorre un computer in grado di eseguire Android Studio. Come minimo occorrono 2 GB di RAM, ma è molto meglio averne 8. Occorre avere almeno 2 GB di spazio libero su disco, ma per installare le immagini del dispositivo virtuale per testare le app è consigliato averne 4. È necessario avere una risoluzione minima dello schermo di 1280 x 800. Se hai un PC, come sistema operativo, hai bisogno di Windows 7, 8, 8.1 o 10. Se hai un Mac, avrai bisogno di Mac OS versione 10.8.5 o successiva.

    Infine occorre avere un di account sviluppatore Android se desideri pubblicare l’app su Google Play Store. Per ottenere un account, è necessario registrarsi con Google. Al momento della stesura di questo articolo (settembre 2017) la registrazione costa 25 dollari una tantum. Per iscriverti, devi seguire la procedura di registrazione alla pagina https://play.google.com/apps/publish/signup/. È necessario avere un account Google (ne puoi creare uno mentre completi la registrazione) ed è possibile pagare con carta di credito o con Android Pay.

     

     

    Nel prossimo articolo dal titolo Installare Android Studio su Mac vedremo come predisporre un ambiente di sviluppo Android su Mac.

     

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">