:::: MENU ::::

Gestire le librerie con Android Studio e Git submodule

Può capitare che sviluppando un’app Android si riveli utile creare delle librerie di codice riutilizzabili in diversi progetti.

Utilizzando Eclipse il procedimento è abbastanza semplice, dato che ogni libreria è un progetto a sè stante e può essere associata a uno o più progetti. E’ anche facile metterla sotto controllo di versione con Git o altri VCS.

Utilizzando invece Android Studio, gestire le librerie si rivela un po’ più complesso. In Android Studio infatti ogni libreria è memorizzata all’interno della directory principale dell’app che la utilizza. Se a questo punto si volesse mettere sotto versioning la directory dell’app, si andrebbe ad aggiungere anche la cartella della libreria, mentre l’obiettivo è quello di tenere il versioning della libreria separato da quello dell’app.

Per poter tenere separato il versioning della libreria da quello del progetto che la utilizza, ci viene in aiuto il comando git submodule. Il vantaggio di questo metodo è che se la stessa libreria fa parte di più progetti app sarà molto semplice attraverso dei push e pull tenerle sincronizzate.

Ecco dunque come gestisco l’inclusione di librerie con Android Studio e Git submodule.

Procedimento su Android Studio

Android Studio

In Android Studio creo un nuovo progetto chiamato MyAwesomeApp, e lo aggiungo al controllo versione Git

MyAwesomeApp$ git init
MyAwesomeApp$ git add .
MyAwesomeApp$ git commit -m"initial commit"

Creo il repository MyAwesomeApp su Github (o su un qualunque altro server Git) e lo imposto come remote al progetto di Android Studio

MyAwesomeApp$ git remote add origin https://github.com/marcovisona/MyAwesomeApp.git
MyAwesomeApp$ git push -u origin master

In Android Studio creo la libreria myAwesomeLib andando su File -> New Module e selezionando Android Library.

A questo punto aggiungo al controllo di versione anche la libreria appena creata, con gli stessi comandi usati in precedenza, facendo attenzione ad eseguirli all’interno della directory della libreria.

MyAwesomeApp$ cd myAwesomeLib
myAwesomeLib$ git init
myAwesomeLib$ git add .
myAwesomeLib$ git commit -m"initial commit"

Affinché il codice contenuto nella libreria sia utilizzabile dal progetto principale, è necessario modificare il file build.gradle del progetto principale aggiungendo la dipendenza

dependencies {
...
compile project(':myAwesomeLib')
...
}

La stessa operazione può essere eseguita andando su File -> Project Structure … e selezionando la tab Dependencies relativa al modulo del progetto principale. A questo punto si clicca sull’iconcina col simbolo + in basso nella schermata, si sceglie l’opzione “Module dependency” e si seleziona il modulo della libreria.

Ancora una volta su Github creo il repository per la libreria appena creata, e lo imposto come remote per il modulo libreria

myAwesomeLib$ git remote add origin https://github.com/marcovisona/MyAwesomeAndroidLib.git
myAwesomeLib$ git push -u origin master

A questo punto la libreria è sincronizzata con il repository remoto su Github e non resta che informare il progetto principale che la directory myAwesomeLib è in realtà un submodule tramite il seguente comando

MyAwesomeApp$ git submodule add https://github.com/marcovisona/MyAwesomeAndroidLib.git myAwesomeLib

Assicuriamoci che le questa impostazione venga salvata localmente e riportata nel repository remoto con i seguenti comandi

MyAwesomeApp$ git add .
MyAwesomeApp$ git commit -m"initial commit"
MyAwesomeApp$ git push

Codice di esempio

Riferimenti