Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 91 di 97
  • livello avanzato
Indice lezioni

Creare librerie Android

Creare una libreria software con Android Studio, per poterla poi riutilizzare come modulo di un'app mobile per il sistema operativo Android.
Creare una libreria software con Android Studio, per poterla poi riutilizzare come modulo di un'app mobile per il sistema operativo Android.
Link copiato negli appunti

I progetti Android Studio sono basati su una struttura a moduli.
Le nostre applicazioni, infatti, partono da un primo modulo di nome app, inserito di default
in un nuovo progetto. Per creare librerie per Android esiste una tipologia di modulo a sè stante: Android Library.

Creare un modulo libreria

Per avere a disposizione un modulo libreria si può procedere in due modi:

  • creare un nuovo modulo: è sufficiente agire da menu File > New > New Module e selezionare un modulo Android Library:
    Figura 1. Creare un modulo liberia (click per ingrandire)

    Creare un modulo liberia

    La finestra di dialogo che si apre richiede alcune informazioni di base: nome della libreria, nome del modulo (quello che appare proprio nel progetto Android), il nome del package e la versione minima di SDK, utilizzata per valutare la compatibilità.
    Si ricordi infatti che le applicazioni che integreranno la libreria devono avere un attributo minSdkVersion di valore maggiore o uguale a quello della libreria;

  • convertire un modulo applicativo in un modulo libreria. Per ottenere questo risultato è necessario effettuare solo due modifiche nel file build.gradle del modulo libreria:
    1. cancellare la direttiva applicationId che appartiene solo ai moduli applicativi;
    2. sostituire a inizio file com.android.application con com.android.library per la direttiva apply plugin.

Qualunque delle due strade sceglieremo, la struttura del nostro progetto somiglierà a quella mostrata nella figura seguente (in visualizzazione Android, in questo caso) in cui le cartelle rappresentano i due moduli, e più in basso appaiono tre gradle script, uno per il progetto e uno per ogni modulo.

Figura 2. Struttura progetto con modulo libreria (click per ingrandire)

Struttura progetto con modulo libreria

Inoltre, nel file settings.gradle è contenuta la direttiva:

include ':app', ':mylibrary'

che dimostra come il progetto sia effettivamente costituito dai due moduli.

Usare moduli libreria

Una volta inserito tutto il codice che vogliamo nel modulo libreria, possiamo esportarlo eseguendo il comando Build > Build APK o digitando, dalla finestra Terminal presente in Android Studio, il comando:

gradlew build

Il risultato che otterremo sarà un file in formato AAR (Android Archive). Questo, a differenza di un normale JAR, contiene codice destinato esplicitamente ad Android e non solo in linguaggio Java "neutro". In particolare, in un AAR troveremo obbligatoriamente:

  • un file AndroidManifest.xml;
  • un file classes.jar contenente codice compilato;
  • materiale relativo alle risorse, la cartella res ed il file R.txt;
  • un file public.txt contenente definizioni di risorse pubbliche.

Troveremo inoltre alcuni elementi opzionali, come la cartella assets, il file di proguard e le eventuali librerie aggiuntive. In proposito, si consideri che una libreria non può includere assets di tipo raw, mentre può avere dipendenze esterne specificando la direttiva <uses-library> nel file AndroidManifest.xml.

Per utilizzare un file AAR nel progetto destinazione, dobbiamo creare un nuovo modulo con File > New > New Module e lì selezionare la voce Import .JAR/.AAR Package.

Figura 3. Importare un file AAR (click per ingrandire)

Importare un file AAR

Se si vuole utilizzare un modulo libreria direttamente dai sorgenti, possiamo importarlo con
File > New > Import Module: la finestra di dialogo che si apre permetterà di indicare la cartella di residenza del codice.

In entrambi i casi, non va dimenticato di inserire il modulo libreria tra le dipendenze, specificando nel file build.gradle del modulo applicativo la direttiva compile project:

compile project(":nome_modulo_libreria")

Pubblicare risorse

Parlando poco fa della struttura interna di un file AAR, si è detto che esso può contenere un file public.txt. Tale file riguarda la visibilità all'esterno delle risorse definite nella libreria nel resto del progetto dopo la sua importazione. Per definizione, tutte le risorse di una libreria sono pubbliche. Se si vuole specificare quali devono avere una visibilità privata, possiamo esporre una lista di risorse pubbliche nel file /res/values/public.xml
all'interno della libreria. Ad esempio, se definiamo nel modulo le seguenti due stringhe (file /res/values/strings.xml):

<string name="public_string">codice pubblico</string>
<string name="private_string">codice privato</string>

possiamo esporre pubblicamente solo la prima, in questo modo (file /res/values/public.xml):

<resources>
<public name="public_string" type="string"/>
</resources>

dove non dobbiamo far altro che specificare nome e tipo delle risorse pubbliche. Si faccia attenzione che in questo modo la situazione si ribalta: passiamo da avere tutte risorse pubbliche della libreria ad averle tutte private tranne quella esplicitamente dichiarata.

Come si immagina, si possono facilmente rendere private tutte le risorse della libreria, creando il file public.xml con all'interno un unico nodo vuoto:

<resources>
<public />
</resources>

Tali configurazioni verranno appunto esportate nel file public.txt al momento della creazione del file in formato AAR. Per il resto i moduli libreria sono totalmente autonomi, producendo una propria classe R per le risorse.

Quando produrre librerie

Moduli libreria Android non sono sempre indispensabili, ma al momento opportuno possono essere molto utili. Se si stanno producendo funzionalità utili in diverse applicazioni, si può creare un proprio file AAR in grado di contenerle e metterle a disposizione velocemente. Inoltre, se si vuole produrre una medesima applicazione in versioni diverse, si può impacchettare tutto il suo funzionamento in un'unica libreria e successivamente renderla parte di progetti diversi.

Ti consigliamo anche