User Tools

Site Tools


doc:appunti:android:cli_app_backup

Backup App Android da riga di comando

Lo script Python adb-pakage-get-apk consente di fare il backup sul proprio PC delle app installate su un dispositivo Android. La copia consiste nel file apk (o i file, se sono più di uno) che può essere utilizzato per installare nuovamente la app sullo stesso device o su di un altro.

Perché fare il backup di una app

Un dispositivo Android generalmente installa le applicazioni accedendo al Play Store di Google oppure a store alternativi, come l'ottimo F-Droid dedicato al software libero ed open source. In genere si pensa che lo store sia sempre disponibile e che sarà sempre possibile installare o reinstallare le app a piacimento. Ciò ovviamente non è vero: in ogni momento una app potrebbe essere rimossa dallo store per i motivi più disparati.

Inoltre la app associata allo store gestisce anche gli aggiornamenti in modo più o meno automatico. Questo significa che normalmente una app viene aggiornata disinstallando automaticamente la vecchia versione per sostituirla con quella nuova.

Ci sono molti motivi per cui è possibile pentirsi di un aggiornamento, ad esempio:

  • La nuova versione introduce qualche nuovo bug e gli sviluppatori non sono rapidi nel risolverlo.
  • Aumentano le richieste hardware della app, per cui risulta preferibile eseguire la vecchia versione se il nostro device non è abbastanza performante.
  • Lo sviluppatore ha introdotto delle anti feature che prima non erano presenti, ad esempio ha aggiunto i banner pubblicitari ad una app che ne era priva.

Purtroppo gli store non garantiscono la disponibilità delle vecchie versioni delle app (fortunatamente F-Droid è una eccezione), quindi è consigliabile fare un backup prima di un aggiornamento. Android offre il vantaggio di poter trovare sul filesystem del dispositivo uno o più file apk che contiene tutto il necessario per reinstallare l'app.

La parte complicata è scoprire il percorso del file apk e il nome dell'archivio e la versione del programma.

Le app di backup

Esistono molte app, gratuite e non, che promettono di fare il backup delle app installate in modo più o meno automatico, ma in generale hanno dei difetti, tra cui:

  • Le app gratuite sono spesso infestate da banner pubblicitari.
  • Le app di backup in genere hanno decine di altre funzioni non necessarie e non volute.
  • Non è possibile collegare la procedura di backup con altre azioni, cioè realizzare script utente con procedure di backup.

Backup da riga di comando

Viste le premesse, ho cercato una soluzione semplice e da riga di comando, che abbia come unico requisito l'accesso ADB (Android Debug Bridge). Lo script presentato qui è stato provato su un PC GNU/Linux con installato il pacchetto Debian adb.

Vedi e scarica lo script Python: adb-pakage-get-apk.

La procedura (richiede Python 3) si basa in realtà su alcuni comandi eseguibili in una sessione terminale Android. Per stabilire la connessione con il dispositivo Android si deve collegare il cavetto USB, abilitare l'opzione Debug USB e quindi eseguire sul PC il comando adb shell.

Per ottenere la lista delle app installate:

cmd package list packages -f

in alternativa, se non è presente il comando cmd, si può utilizzare pm:

pm list packages

Per sapere la versione di un pacchetto installato (ad esempio com.android.chrome) si utilizza dumpsys:

dumpsys package com.android.chrome

Per scoprire i file apk installati da una app (potrebbero essere più di uno) si utilizza pm path:

pm path com.android.chrome

Infine per scaricare il file dal dispositivo Android verso il PC si esegue (sul PC) il comando adb pull:

adb pull /system/app/Chrome/Chrome.apk

In generale non sono richiesti i privilegi di root. Tuttavia alcune app mettono i file apk in directory non accessibili all'utente non privilegiato, in questo è necessario disporre dei privilegi di root (avere cioè il comando su funzionante) e copiare il file apk nello storage (directory /sdcard/) prima di scaricarlo con adb pull.

Web References

doc/appunti/android/cli_app_backup.txt · Last modified: 2019/10/18 19:02 by niccolo