Pensare in modo modulare: suddividi la tua applicazione Android in più progetti

Android puzzle

Anche se le applicazioni per i nuovi dispositivi mobili vengono percepite come progetti di piccole dimensioni che non richiedono grossa manutenzione, è bene non scordarsi dei buoni principi di progettazione e programmazione. Cerchiamo quindi sin da subito di pensare a come suddividere il proprio progetto in moduli che possano essere eventualmente riusati in applicazioni future. Vediamo come fare!

Caro vecchio Eclipse

Per chi ha esperienza di lavoro con Eclipse sa già come si importano nuovi jar in un progetto o come si referenziano i progetti l’un l’altro, mentre per chi non lo sapesse siamo qua apposta!
La prima cosa da ricordare è che (giustamente) non si possono creare referenze cicliche tra progetti: sarebbe come chiedersi se è nato prima l’uovo o la gallina! Saremo noi invece a decidere chi è nato prima, definendo quindi un progetto come principale e un altro come libreria.

Cominciamo col creare due progetti:

  • MyFirstApp: sarà il nostro progetto Android principale. Non sai come creare un progetto Android? Niente paura! Segui il Tutorial 2.
  • MyFirstLib: sarà il modulo/libreria da includere. Per il momento creiamo un normale progetto Java: clicchiamo su File > New > Java Project. Se Java Project non fosse disponibile nell’elenco selezioniamo Projects… quindi cerchiamolo nella finestra che compare.

A questo punto non ci resta che referenziare i progetti: clicchiamo con il tasto destro del mouse sul progetto principale (MyFirstApp) > Build Path > Configure Build Path… come in figura:

Configura build path

Spostiamoci quindi sul tab Projects: clicchiamo Add e selezioniamo il progetto MyFirstLib in modo da avere la seguente situazione finale:

Aggiungere un progetto come libreria

Se siamo fortunati, durante lo sviluppo di un progetto possiamo non aver bisogno di librerie esterne a quelle fornite dall’SDK di Android, ma se non lo siamo? Se per esempio abbiamo bisogno di una libreria per il parsing dell’XML? E’ possibile aggiungere librerie di terze parti sempre dal Configure Build Path…: questa volta spostiamoci nel tab Libraries:

Come aggiungere un jar

Tra le varie possibilità possiamo aggiungere un jar presente all’interno del workspace (Add JARs…) o direttamente prelevato dal filesystem (Add Externals JARs…).

A questo punto dal progetto principale avremo completo accesso alle classi presenti nei jar o nei progetti importati. Con quanto descritto si risolve tranquillamente l’import di progetti/librerie che non contengono specifiche componenti Android come risorse o Activity per esempio. Se invece il modulo che abbiamo chiamato MyFirstLib conterrà elementi caratteristici della piattaforma Android il sistema di import di Eclipse non è sufficiente! In questa situazione solo il plugin ADT per Eclipse può venirci incontro!

ADT, aiutami tu!

Abbiamo già visto come configurare il plugin ADT per Eclipse nel Tutotial 1: tramite questo strumento possiamo definire la natura dei nostri progetti in 3 modi, come suggerisce il sito di Android Developers:

  • progetto Android, destinato ad essere una applicazione installabile su un device;
  • progetto Libreria, che non portà essere direttamente installato su un device;
  • progetto di Test, che estende le funzionalità di JUnit per testare le applicazioni Android.

A questo punto creiamo un nuovo progetto Android che chiameremo MyFirstAndroidLib e successivamente marcheremo come libreria. Una volta creato, clicchiamo con il tasto destro del mouse sul progetto > Properties > Android dal menù a sinistra.

Configurare un progetto come libreria

Selezioniamo quindi il check “Is Library”, quindi Apply e infine Ok. Da questo punto in poi questo progetto non potrà essere più considerato come stand-alone, cioè non potrà diventare un’applicazione. In questo caso, tutte le risorse, le Activity, Service e quant’altro definito nel suo manifest verranno condivise con le applicazioni che la importano, come per esempio:

<manifest>
  ...
  <application>
    ...
    <activity android:name="MyFirstActivity" />
    ...
  </application>
</manifest>

Non rimane che dire a MyFirstApp chi è la sua libreria. Torniamo nella finestra mostrata precedentemene (click destro sul progetto > Properties > Android) però questa volta sul progetto MyFirstApp. Cliccando su Add…, se abbiamo correttamente impostato MyFirstAndroidLib, lo dovremmo vedere nell’elenco. Selezioniamolo per ottenere la situazione seguente:

Aggiungere un progetto come libreria ad un progetto Android

Manca ancora un ultimo passo: dichiarare nel manifest dell’applicazione tutte le Activity, i Servizi ecc. della libreria che verranno usati, completi del full qualified name dove necessario:

<manifest>
  ...
  <application>
    ...
    <activity android:name="it.devapp.android.myfirstandroidlib.activities.MyFirstActivity" />
    ...
  </application>
</manifest>

Conclusioni

Ripensiamo sempre alle nostre applicazioni in un ottica modulare, in modo da creare componenti riusabili per semplificarci la vita. Grazie a queste nuove funzionalità di gestione dei progetti di ADT possiamo mantenere quindi pieno accesso alle risorse di un progetto senza trascurare i principi di buona programmazione.

By Andrea Como

Sono un software engineer focalizzato nella progettazione e sviluppo di applicazioni web in Java. Presso OmniaGroup ricopro il ruolo di Tech Leader sulle tecnologie legate alla piattaforma Java EE 5. In particolare: WebSphere 7.0, EJB3, JPA 1 (EclipseLink), JSF 1.2 (Mojarra) e RichFaces. In passato ho lavorato con la piattaforma alternativa alla enterprise per lo sviluppo web: Java SE 6, Tomcat 6, Hibernate 3 e Spring 2.5. Ultimamente mi sono appassionato al mondo mobile e in particolare ad Android per i motivi che potete immaginare seguendo questo blog! Nei ritagli di tempo invece sviluppo siti web in PHP e ASP e condivido le mie esperienze lavorative sul blog CoseNonJaviste. Per maggiori informazioni consulta il mio curriculum pubblico.

1 comment

Leave a comment

Your email address will not be published.