ADB, strumento ideato per gli sviluppatori per consentire il debug delle applicazioni, può essere utilizzato anche per effettuare un backup dei dati e di alcune applicazioni dei nostri dispositivi Android. Però...
Sulla carta questa soluzione presenta indubbi vantaggi: non necessità di root o custom recovery, si può utilizzare su qualunque dispositivo Android, è possibile ispezionare il backup, è possibile ripristinare solo parte di esso, .... Ma purtroppo, come vedremo, questa soluzione ha diversi limiti.
Le operazioni preliminari da fare per poter eseguire il backup sono le stesse già viste in precedenza: occorre installare ADB e attivare il Debug USB sul dispositivo.
BACKUP
A questo punto, una volta connesso il nostro dispositivo al PC, se viene correttamente rilevato dal comando adb devices
possiamo cominciare.
adb backup -f nomedelbackup.ab pacchetto.di.cui.fare.il.backup
Attenzione ancora una volta al nome del pacchetto che può essere molto diverso dal nome mostrato nei menu di Android; per trovarlo possiamo sempre fare affidamento su Applications Info. Da notare che questo comando non creerà una copia dell'applicazione (il file .apk, per intenderci) ma solo dei dati a questa associati.
Se vogliamo fare un backup più o meno completo di tutti i dati delle nostre applicazioni, il comando diventa:
adb backup -all -f nomedelbackup.ab
Alcune delle opzioni che possiamo scegliere sono considerate come default in questo comando così che il comando sopra equivale a:
adb backup -noapk -noshared -system -f nomedelbackup.ab
Come detto, questo farà il backup di tutti i dati delle applicazioni (comprese quelle di sistema, -system
) ma non copierà nemmeno questa volta gli apk (-noapk
) ne la memoria interna condivisa (-noshared
).
-
-apk
: indicherà ad ADB di fare anche una copia del file .apk ma, attenzione, perché non ha effetto sulle app di sistema e verranno quindi copiate solo quelle installate dall'utente; -
-shared
: indicherà ad ADB di fare una copia della memoria interna condivisa; a mio avviso è l'opzione meno utile che si possa scegliere in quanto questa memoria è liberamente accessibile una volta collegato il nostro dispositivo al computer, utilizzando sempre ADB o anche wireless, tramite FTP, ed è quindi facile fare una copia di questi dati; -
-nosystem
: escluderà i dati delle applicazioni di sistema dal backup.
Per ottenere quindi un backup completo di tutti i dati delle app (comprese quelle di sistema) e dei file apk delle app installate dall'utente, il comando da impartire sarà:
adb backup -all -apk -f nomedelbackup.ab
Dopo questo comando, un avviso inviterà a sbloccare il dispositivo e confermare l'operazione
Sul dispositivo apparirà una schermata dove, se vogliamo, potremo scegliere una password per proteggere il backup e confermare l'operazione.
Il backup non richiederà molto tempo ma dipenderà molto da quante app avrete installato sul dispositivo e potremo trovarlo nel path da dove abbiamo lanciato adb (se non abbiamo specificato un path diverso nel comando stesso).
ISPEZIONE DEL BACKUP
Indipendentemente dall'estensione utilizzata durante la creazione del backup, il file risultante contiene dei dati compressi e non è leggibile direttamente con nessuna applicazione. C'è però un piccolo programma open source, scritto in java (occorrerà quindi aver installato Java Runtime Environment) che riesce a convertire il file di backup in un file archivio con estensione .tar che si può aprire con quasi tutti i gestori di archivio. Sto parlando di android-backup-extractor.
Una volta scaricato il file abe-all.jar e copiato, ad esempio, nella stessa cartella dove si trova il file di backup, possiamo "convertirlo" in tar con il comando:
java -jar abe-all.jar unpack nomedelbackup.ab nomedelbackup.tar
"nomedelbackup.ab" sarà ovviamente il nostro file di backup mentre potremo scegliere arbitrariamente come chiamare "nomedelbackup.tar"; nell'esempio sotto ho utilizzato per comodità lo stesso nome del mio backup. Se l'archivio è protetto da una password, saremo invitati a digitarla per far sì che la conversione abbia inizio.
A questo possiamo estrarre il contenuto di nomedelbackup.tar e ispezionare le cartelle in esso contenute.
Dentro la cartella apps
, estratta dall'archivio tar, ci saranno delle cartelle con il nome del pacchetto dell'applicazione in esse contenuta. Analizzate attentamente il vostro backup, notate niente di strano?
Mancano alcune app!!!
Infatti non è possibile eseguire il backup di tutte le app ma solo di quelle a cui, durante la compilazione, è stato concesso un apposito flag ALLOW_BACKUP (non vi confondete, non è un permesso!). Purtroppo l'unico modo per sapere se una particolare app è dotata di questo flag o no, è utilizzare un'applicazione dedicata (è possibile vederlo anche con Ghost Commander).
Se volessimo ripristinare solo una parte o una sola applicazione di questo backup, sarà necessario seguire un metodo un po' macchinoso: bisogna infatti creare un file di testo contenente il percorso relativo ad ogni file contenuto nella cartella con il nome del pacchetto dell'applicazione che vogliamo ripristinare. Per fare questo, una volta che conosciamo il nome del pacchetto, è consigliabile estrarre detta lista, tramite linea di comando, con il programma tar (è possibile anche su Windows 10 e versioni precedenti) con il seguente comando:
tar tf nomedelbackup.tar | grep -F "com.pacchetto.nome" > lista_app.txt
Ovviamente "com.pacchetto.nome" andrà sostituito con il nome del pacchetto dell'applicazione che vogliamo ripristinare. Per ogni altra applicazione che vogliamo aggiungere alla lista, dovremo cambiare l'operatore di redirezione > con ».
Questa lista dovrà poi essere passata come argomento al programma tar, per creare un archivio.tar; potremo copiarla per comodità nello stesso percorso della cartella apps
e qui aprire un terminale dove digitare:
tar cf archivio.tar -T lista_app.txt
Ogni altro modo di creare l'archivio.tar potrebbe portare ad un file di backup corrotto/danneggiato che, nel migliore dei casi, sarà impossibile da ripristinare!
Adesso dovremo effettuare la conversione inversa a quella prima vista, sempre utilizzando abe-all.jar; questa volta il comando sarà:java -jar abe-all.jar pack archivio.tar backupparziale.ab
RIPRISTINO
Per ripristinare il backup effettuato (o quello parziale eventualmente creato come descritto sopra) dovremo utilizzare il comando:
adb restore nomedelbackup.ab
Anche questa volta un messaggio avviserà di sbloccare il dispositivo per confermare l'operazione (dopo aver immesso la password di protezione del backup, se necessaria).
Il ripristino impiegherà quasi lo stesso tempo del backup.
CONCLUSIONI
Devo ammettere che, dopo aver saggiato le potenziali di ADB con la disinstallazione delle app di sistema, avevo grandi aspettative anche su questo lato ma purtroppo sono state disattese. I limiti di questa soluzione venuti fuori durante le mie prove, sono troppi: non solo non è possibile eseguire il backup di alcune applicazioni ma il backup non contiene dati importanti (come gli account o i contatti della rubrica), il ripristino parziale, anche se possibile, è molto macchinoso, il ripristino di un backup dopo un factory reset potrebbe non funzionare, non è garantito il ripristino del backup su un nuovo e/o diverso dispositivo, ...
La conclusione è semplice e lapidaria: per avere una valida soluzione di backup su cui poter fare affidamento sono necessari o il root del dispositivo o l'installazione di una custom recovery.