Ed eccoci al secondo appuntamento della rubrica WazoTech, dove i Rom e la tecnologia vanno a braccetto.
Oggi vedremo nel dettaglio la struttura di un file .zip flashabile da recovery modificata (CWM o TWRP). Dentro questa categoria di file troviamo tutto ciò che i cuochi, i themer e gli sviluppatori rilasciano sui forum specializzati in giro per la rete.
Questi package sono abbastanza semplici da creare a patto che si conosca la struttura delle partizioni di Aandroid (vedi puntata precedente) e che si conosca un minimo il device che si sta utilizzando.
Partiamo con la struttura del file .zip – Utilizzerò come esempio l’installazione di un’app di sistema contenente tutta la magia e le fantasmagoriche innovazioni di iOS7.
Immagine 1 – Root del file .zip
Immagine 2 – Contenuto della cartella system
Immagine 3 – Contenuto della cartella app
Il file .zip deve essere sempre composto da:
- La cartella META-INF che contiene il binario necessario alla recovery del nostro device per installare il pacchetto e il file con le istruzioni per l’installazione dello stesso (il percorso completo di questi due files è rispettivamente /META-INF/com/google/android/update-binary e /META-INF/com/google/android/updater-script)
- Le cartelle con i file da installare. Nelle immagini sopra riportate vedrete il percorso completo delle cartelle e del file che andremo a scrivere nella partizione di sistema (il leggendario iOS7.apk).
Andiamo un po’ più nel dettaglio e vediamo come possiamo far capire al nostro device che deve installare quel file.
Per fare in modo che il file venga correttamente installato nella cartella desiderata, oltre a strutturare correttamente i file e le cartelle del nostro .zip, dobbiamo “dire” ad Android come e dove le deve estrarre. Per far questo abbiamo bisogno dei due file sopra citati:
- update-binary: ATTENZIONE questo file è un binario e non è uguale per ogni device. Domandone: quante volte vi è capitato di flashare uno .zip e la recovery vi ha restituito errore (abort)? Ecco… la causa, se l’autore dello zip non ha fatto cazzate, è questo file qui 🙂
- updater-script: come dice il nome stesso del file, questo script conterrà le istruzioni con le quali la recovery installerà i file. Sempre considerando il nostro esempio, lo script dovrà contenere queste istruzioni (per crearlo usate un editor di testo come Notepad++):
ui_print(“”);
ui_print(“Installing iOS7”);
ui_print(“by Carburano”);
ui_print(“”);
run_program(“/sbin/busybox”, “mount”, “/system”);
ui_print(“Extracting System Files…”);
package_extract_dir(“system”, “/system”);
ui_print(“Setting Permissions…”);
set_perm_recursive(0, 0, 0755, 0644, “/system/app”);
unmount(“/system”);
ui_print(“”);
ui_print(“Done! :-)”);
Ve le spiego:
Le istruzioni col comando ui_print sono quelle che appariranno a schermo da recovery mentre installate il package.
L’istruzione run_program(“/sbin/busybox”, “mount”, “/system”); monta la partizione di sistema (grazie al tool busybox) e la rende disponibile ad Android.
L’istruzione package_extract_dir(“system”, “/system”); significa: prendi tutto quello che c’è nella cartella /system del nostro file zip ed estrailo nella cartella /system dello smartphone. In questo momento, per la precisione, la nostra app è stata copiata nella cartella /system/app di Android.
A questo punto non dobbiamo fare altro che verificare che i permessi sulle cartelle siano corretti. Il comando per fare ciò è set_perm_recursive(0, 0, 0755, 0644, “/system/app”); che tradotto vuol dire: dài al proprietario (root) i permessi di scrittura, lettura ed esecuzione alla cartella /app e sue sottocartelle mentre gli altri leggono ed eseguono e basta e dài i permessi di lettura e scrittura per i file contenuti nella cartella /app al proprietario (root) mentre gli altri leggono e basta.
Per concludere “smontiamo” la partizione di sistema con il comando: unmount(“/system”);
Ora dobbiamo solo prendere il nostro file .zip, metterlo nella Sdcard, riavviare in recovery e installarlo… Ecco il risultato se il device non va in bootloop:
Bello vero? Ha funzionato!!
E ora un elenco di cose che succedono spesso quando installate un package .zip da recovery:
– Ho installato un tema e il device ora è in bootloop. Causa: state installando un tema non appropriato al vostro device o alla versione di Android del vostro device (di solito il framework viene aggiornato contestualmente alle versioni di Android). Cercate subito uno zip di ripristino sul forum del vostro device su XDA.
– Ho installato il launcher portato dal sony xperia z1 ma non la trovo al riavvio. Causa: probabilmente l’updater script conteneva degli errori oppure avete utilizzato uno .zip non adatto al vostro device. La cosa migliore da fare è prendere i file contenuti nel pacchetto scaricato e ricreare il file updater-script più adatto alla struttura del vostro device.
– Ho flashato un file .zip ed è apparsa un’installazione guidata fighissima, con la scritta Aroma Installer. Che è? Risposta: Aroma installer è un’estensione grafica all’update-binary realizzata per personalizzare e rendere più semplice la configurazione e l’installazione dei pacchetti .zip e soprattutto delle ROM. Io lo usavo per i miei kernel, i miei pacchetti di customizzazione grafica e le mie ROM, è davvero figo, ma non ve lo spiegherò perchè ci vorrebbe troppo.
Beh mi sono rotto il cazzo di acculturarvi.
Alla prossima… vedremo la struttura di sistema di una ROM e delle cartelle più importanti.
W Jony Ive
Commenta utilizzando Google+