User Tools

Site Tools


doc:appunti:android:cli_app_backup

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
doc:appunti:android:cli_app_backup [2019/10/18 16:49] – created niccolodoc:appunti:android:cli_app_backup [2019/10/18 19:02] (current) niccolo
Line 1: Line 1:
 ====== Backup App Android da riga di comando ====== ====== Backup App Android da riga di comando ======
 +
 +Lo script Python **[[https://github.com/RigacciOrg/android-my-scripts/blob/master/adb-pakage-get-apk/adb-pakage-get-apk|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 **[[https://packages.debian.org/search?keywords=adb|pacchetto Debian adb]]**.
 +
 +Vedi e scarica lo script Python: **[[https://github.com/RigacciOrg/android-my-scripts/blob/master/adb-pakage-get-apk/adb-pakage-get-apk|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**:
 +
 +<code>
 +cmd package list packages -f
 +</code>
 +
 +in alternativa, se non è presente il comando **cmd**, si può utilizzare **pm**:
 +
 +<code>
 +pm list packages
 +</code>
 +
 +Per sapere la **versione** di un pacchetto installato (ad esempio //com.android.chrome//) si utilizza **dumpsys**:
 +
 +<code>
 +dumpsys package com.android.chrome
 +</code>
 +
 +Per scoprire **i file apk** installati da una app (potrebbero essere più di uno) si utilizza **pm path**:
 +
 +<code>
 +pm path com.android.chrome
 +</code>
 +
 +Infine per **scaricare il file** dal dispositivo Android verso il PC si esegue (sul PC) il comando **adb pull**:
 +
 +<code>
 +adb pull /system/app/Chrome/Chrome.apk
 +</code>
 +
 +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 =====
 +
 +  * **[[https://stackoverflow.com/questions/4032960/how-do-i-get-an-apk-file-from-an-android-device|How do I get an apk file from an Android device?]]**.
  
doc/appunti/android/cli_app_backup.1571410158.txt.gz · Last modified: 2019/10/18 16:49 by niccolo