====== 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**: 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 ===== * **[[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?]]**.