Nel corso delle lezioni precedenti abbiamo imparato tante cose interessanti che è possibile fare su un dispositivo Android. Tuttavia prima di rendere disponibili le nostre applicazioni sui dispositivi di altri utenti è necessario una procedura di rilascio e distribuzione delle stesse.
Fortunatamente Google ha reso relativamente semplice la pubblicazione delle applicazioni in modo che esse possano essere rapidamente distribuite agli utenti finali. I passi per la distribuzione di un’applicazione Android sono generalmente quattro:
- Esportare l’applicazione in un file APK (Android Package)
- Generare un proprio certificato e firmare l’applicazione con esso
- Rilasciare l’applicazione firmata
- Utilizzare Play Store o altri metodi per installare l’applicazione sui dispositivi degli utenti
Per avere un’idea di come effettuare queste operazioni prendiamo una delle applicazioni sviluppate durante il corso o creiamone una nuova, non è importante quale sia il suo funzionamento. A tale scopo io creo un’applicazione denominata TestDeploy che è una semplice applicazione del tipo Hello World.
La prima cosa da fare è controllare se nel file AndroidManifest.xml siano presenti gli attributi versionCode e versionName e in caso negativo inserirli
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test.testdeploy"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
L’attributo versionCode rappresenta numericamente la versione dell’applicazione e per ogni revisione dovrebbe essere incrementato di una unità in modo da differenziare le nuove versioni dalle precedenti. Tramite questo attributo il Play Store determina se è disponibile una nuova versione dell’applicazione e lo notifica a coloro che già l’hanno installata sul proprio dispositivo. L’attributo versionName invece contiene informazioni sulla versione visibili agli utenti e dovrebbe essere nella forma X.X.X (ad esempio versione 1.0.1).
Se vogliamo distribuire l’applicazione sul Play Store dobbiamo assicurarci inoltre che il file AndroidManifest.xml contenga anche gli attributi label e icon. L’attributo label specifica il nome dell’applicazione che verrà poi visualizzato nella schermata delle impostazioni dei dispositivi Android su cui sarà installata.
Per la nostra applicazione di esempio scriviamo qualcosa
android:label="Prima Applicazione"
L’attributo icon serve a specificare l’icona associata all’applicazione e per esso lasciamo il valore predefinito.
Sempre in questo file molto importante è la sezione
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
Tale sezione serve ad indicare quale versione di Android è consigliata per l’esecuzione dell’applicazione (attributo targetSdkVersion) e quale è la versione minima di Android necessaria per l’esecuzione della stessa.
Altro passaggio preliminare alla generazione del file APK è l’impostazione della modalità di compilazione dell’app da debug a release. Per fare questo basta aprire la finestra Build Variants ed impostare il valore release al posto del valore debug
Come abbiamo accennato, tutte le applicazioni Android devono essere firmate digitalmente prima di essere distribuite sui dispositivi. Fortunatamente non è necessario acquistare certificati digitali da un’autorità di certificazione ma è possibile generare i propri certificati ed utilizzare gli stessi per firmare le applicazioni.
Adesso bisogna configurare le informazioni sulla chiave di firma da utilizzare quando genereremo il package finale dell’applicazione. Il primo passaggio è quello di creare un file denominato keystore e per farlo dal menù Build clicchiamo su Generate Signed APK
In questo modo viene visualizzata la finestra di dialogo Generate Signed APK
Se disponiamo già di un file keystore generato in precedenza dobbiamo cliccare su Choose existing e andarlo a selezionare, in caso contrario clicchiamo su Create new e si apre la finestra New Key Store
In questa finestra dobbiamo inserire il percorso ed il nome del file keystore che vogliamo generare e la relativa password. Bisogna inoltre inserire nella sezione Key i dati necessari a generare una chiave privata per firmare l’APK. Infine bisogna valorizzare almeno uno dei campi della sezione Certificate.
Dopo aver cliccato su OK ritorniamo alla finestra Generate Signed APK
Dopo aver cliccato su Next si accediamo alla finestra di generazione dell’APK
Scegliamo il percorso di destinazione dell’APK, la versione della firma (date un’occhiata al link Signature Help) e clicchiamo su Finish.
Dopo il tempo necessario a compilare l’app comparirà il seguente messaggio
Dopo aver ottenuto il file apk firmato ci serve un modo per portare l’applicazione sui dispositivi degli utenti.
Fondamentalmente esistono tre possibilità per effettuare questa operazione:
- Distribuire manualmente l’applicazione utilizzando lo strumento adb.exe
- Esporre l’applicazione su un server web
- Pubblicare l’applicazione tramite il Google Play Store
In ogni caso oltre a questi metodi è sempre possibile installare l’applicazione sui dispositivi semplicemente facendo in modo di trasferire su di essi l’apk (tramite email o file explorer ad esempio) ed avviarlo.