Android è il sistema operativo per dispositivi mobili più utilizzato al momento. È open source ed è basato su kernel linux. Questo significa che è possibile sviluppare applicazioni per Android quasi come si fa per ogni ambiente Unix. "Quasi" perché il sistema ha delle limitazioni, dovendo girare su dispositivi mobili. Una fra tante, è la natrualmente la mancanza di un interprete PHP (e di tutti gli altri linguaggi di scripting). Per sviluppare su Android quindi, è necessario utilizzare il linguaggio Java.
La versione attuale di Android è la 4.2.2, rilasciata il 12 Febbario 2013, e chiamata Jelly Bean.
Sviluppare in PHP su Android
Android si basa su applicazioni integrate nel sistema operativo (che permettono di interfacciarsi con le funzionalità del dispositivo) e su applicazioni sviluppate da terzi: i file APK, gli Android Packages. Questo ha permesso alla comunità di porre rimedio alla mancanza di un interprete PHP e di sviluppare applicazioni che permettono l’utilizzo di questo linguaggio molto usato in ambiente Web.
Al momento della stesura dell’articolo ci sono pochissime applicazioni che lo permettono: Paw Server for Android, Bit Web Server, KSWEB e Php for Android.
In quest’articolo ci occuperemo dell’ultima menzionata: Php for Android (PFA). Si differenzia dalle altre perché non richiede la presenza di un web server per far girare codice PHP. Utilizza infatti PHP-CLI (PHP da riga di comando), risultando anche più performante rispetto alle altre applicazioni.
Cos’è e come funziona PHP for Android
PFA non è altro che un’applicazione per Android (in sostanza un file APK) che deve essere installata sul dispositivo mobile. È quindi scritta in Java come tutte le applicazioni.
Comprende:
- php_rX.zip: i file binari PHP;
- php_extras_rX.zip: Android.php e php.ini;
- php_scripts_rX.zip: Scripts di esempio.
I file binari includono PHP-CLI collegato a Bionic (la versione Android delle librerie standard C), e due estensioni precompilate: sockets e JSON. Queste estensioni servono per comunicare con “SL4A” (Scripting Layer for Android), un’applicazione sviluppata e mantenuta da Google che permette di eseguire script su dispositivi Android.
Come abbiamo detto infatti Android ha delle limitazioni, tra le quali c’è l’impossibilità di eseguire script direttamente sul dispositivo. Per questo motivo, il team di sviluppo di Google ha creato SL4A (in precedenza chiamato ASE, Android Scripting Environment), un’applicazione che ha il compito di rendere disponibili ai linguaggi di scripting le API che accedono alle risorse del dispositivo. Di per sé SL4A non supporta nessun linguaggio, semplicemente implementa un server RPC (Remote Procedure Call) scritto in Java che mette a disposizione dei metodi per accedere alle risorse. È compito dell’applicazione relativa al linguaggio di scripting interagire con SL4A utilizzando JSON.
In pratica funziona così: prima si installa SL4A, poi l’applicazione relativa al linguaggio di scripting che si vuole usare e che interagisce con SL4A. Sono state sviluppate applicazioni per tutti i linguaggi di scripting più noti: Python, Perl, JRuby, Lua, ecc. Ora, grazie a PFA, anche per il PHP.
Strumenti necessari
Per iniziare a sviluppare abbiamo bisogno di 3 componenti:
- Dispositivo con Android o emulatore software;
- File APK di SL4A;
- File APK di PFA.
Visto che non sempre si ha a disposizione un cellulare con Android solo per i test, è molto più facile usare un emulatore. Google ha creato l’SDK per Android che comprende anche un emulatore, perfetto per testare le proprie applicazioni. Poi è necessario scaricare i pacchetti SL4A e PHP for Android.
Installazione
La procedura che segue è per ambiente Windows. Gli stessi comandi valgono anche per ambiente Unix. Basta scaricare l’SDK adatto (i file APK rimangono gli stessi).
Installato l’SDK di Google, si può lanciare l’emulatore con il comando “AVD Manager”. Appare questa schermata:
AVD sta per Android Virtual Device, e rappresenta un emulatore di configurazione per un dispositivo mobile che poi verrà usato dall’emulatore. Si possono creare infiniti Virtual Devices, che possono essere configurati diversamente in modo da testare l’applicazione negli scenari più diversi.
Queste le impostazioni che servono per creare un device per il nostro esempio:
Bisogna usare “ARM” come CPU, in quanto le applicazioni non sono ancora compatibili con le altre opzioni. Una volta creato un device, il pulsante “Start” lo lancia. Se la macchina non parte e ottenete questo messaggio di errore: “Failed to allocate memory: 8”, diminuite la quantità di RAM.
Dopo qualche minuto (l’elumatore non è velocissimo, bisogna avere pazienza) appare la classica schermata di un dispositivo Android (la schermata può variare a seconda della versione di Android scelta nella configurazione del device):
A questo punto dobbiamo installare i due file APK. Con la macchina virtuale accesa dobbiamo andare da riga di comando (comando cmd di Windows o il terminale di linux) nella directory “platform-tools” che si trova nella directory di installazione dell’SDK di Android.
Da qui basta dare prima il comando:
adb install c:/percorso/sl4a_*.apk
per installare SL4A, e poi:
adb install c:/percorso/phpforandroid_r*.apk
per installare PFA.
Se i comandi sono andati a buon fine e torniamo alla macchina virtuale (rimasta accesa) e entriamo nella lista delle applicazioni, possiamo vedere che sono state installate correttamente.
Ora se lanciamo PFA ci viene chiesto di installarlo. Con questa procedura scarichiamo effettivamente i pacchetti relativi al PHP e concludiamo il processo di installazione.
La prima applicazione PHP su Android con PFA
Una volta che l’installazione è andata a buon fine, il nostro emulatore avrà questa schermata:
Per creare e lanciare uno script PHP, dobbiamo aprire l’applicazione SL4A. PFA ha già installato alcuni script di esempio, come si può vedere da quest’immagine:
Potremmo lanciare gli script già presenti, ma è più formativo crearne uno da zero. Inoltre questi script non sono aggiornati, quindi c’è il rischio che non funzionino.
Apriamo il menu dell’emulatore Android e scegliamo l’opzione add. Un’ulteriore lista di opzioni ci permette di scegliere il tipo di file da creare. Scegliamo PHP 5.* (a seconda della versione di PFA scaricata).
A questo punto abbiamo un file aperto con già del codice scritto:
<?php require_once(“Android.php”); $droid = new Android();
La prima riga di codice include il file “Android.php” di PFA. È il file più importante, perché definisce la classe Android che crea una connessione tra PFA e SL4A (aprendo una socket e comunicando tramite JSON, come descritto nell’articolo precedente). La seconda istanzia un oggetto di tipo Android, che utilizzeremo per chiamare i metodi di SL4A.
Andiamo a scrivere qualcosa di basilare:
$nome = dialogGetInput(“Ciao”, “Come ti chiami?”); $droid->makeToast(“Ciao “. $nome[‘result’]);
- dialogGetInput mostra una finestra di dialogo che permette all’utente di inserire del testo. Il primo parametro è il titolo della finestra, il secondo un eventuale messaggio. L’array di ritorno comprende la chiave “result” che contiene il valore immesso dall’utente.
- makeToast mostra a video del testo.
È importante notare che la funzione makeToast non è definita nella classe Android, ma è messa a disposizione da SL4A.
La classe Android non fa altro che aprire una socket e chiamare la funzione di SL4A con lo stesso nome. In questo caso appunto makeToast.
A questo punto possiamo salvare e lanciare lo script. Apriamo il menu dell’emulatore e scegliamo la voce Save & Run per ottenere questo risultato:
Se l’immagine è ruotata di 90 gradi non vi preoccupate, è normale. Tutte le applicazioni che stiamo utilizzando sono in versione beta.
Una volta inserito il nome il risultato ci appare in questo modo:
Al momento credo che possa bastare. Nell’ApiReference di SL4A possiamo trovare i metodi messi a disposizione dall'applicazione che possono essere chiamati dall’oggetto Android
.