Skip to content

Instantly share code, notes, and snippets.

@AnatomicJC
Last active November 16, 2024 12:34
Show Gist options
  • Save AnatomicJC/e773dd55ae60ab0b2d6dd2351eb977c1 to your computer and use it in GitHub Desktop.
Save AnatomicJC/e773dd55ae60ab0b2d6dd2351eb977c1 to your computer and use it in GitHub Desktop.
Backup android app, data included, no root needed, with adb

Backup android app, data included, no root needed, with adb

Note: This gist may be outdated, thanks to all contributors in comments.

adb is the Android CLI tool with which you can interact with your android device, from your PC

You must enable developer mode (tap 7 times on the build version in parameters) and install adb on your PC.

Don't hesitate to read comments, there is useful tips, thanks guys for this !

Fetch application APK

To get the list of your installed applications:

adb shell pm list packages -f -3

If you want to fetch all apk of your installed apps:

for APP in $(adb shell pm list packages -3 -f)
do
  adb pull $( echo ${APP} | sed "s/^package://" | sed "s/base.apk=/base.apk /").apk
done

To fetch only one application, based of listed packages results:

adb pull /data/app/org.fedorahosted.freeotp-Rbf2NWw6F-SqSKD7fZ_voQ==/base.apk freeotp.apk

Backup applications datas

To backup one application, with its apk:

adb backup -apk org.fedorahosted.freeotp -f freeotp.adb

To backup all datas at once:

adb backup -f all -all -apk -nosystem

To backup all datas in separated files:

for APP in $(adb shell pm list packages -3)
do
  APP=$( echo ${APP} | sed "s/^package://")
  adb backup -f ${APP}.backup ${APP}
done

Restore Applications

First, you have to install the saved apk with adb:

adb install application.apk

Then restore the datas:

adb restore application.backup

Extract content of adb backup file

You will need the zlib-flate binary. You will able to use it by installing the qpdf package.

apt install qpdf

Then, to extract your application backup:

dd if=freeotp.adb bs=24 skip=1 | zlib-flate -uncompress | tar xf -

If adb backup doesn't work

If you have problems using adb backup (empty files, no prompts, other oddness), you can give a try to bu backup through adb shell. Thanks to @nuttingd comment.

Backing up

adb shell 'bu backup -apk -all -nosystem' > backup.adb

Restoring

adb shell 'bu restore' < backup.adb

Miscellaneous: remove non-wanted applications

Sometimes, you have already installed (but non wanted) apps when you buy an Android Smartphone. And you can't uninstall these apps. So Bad. And some pre-installed app are not present on PlayStore. WTF.

You can remove them with this command, and root is not needed:

adb shell pm uninstall --user 0 non.wanted.app

You can first disable them, then when you are sure, you can remove them.

To list disabled apps:

adb shell pm list packages -d

Example:

# Google Chrome
adb shell pm uninstall --user 0 com.android.chrome
# Gmail
adb shell pm uninstall --user 0 com.google.android.gm
# Google Play Films et Séries
adb shell pm uninstall --user 0 com.google.android.videos
# Youtube
adb shell pm uninstall --user 0 com.google.android.youtube
# Google Play Music
adb shell pm uninstall --user 0 com.google.android.music
# Google Hangouts
adb shell pm uninstall --user 0 com.google.android.talk
# Google Keep
adb shell pm uninstall --user 0 com.google.android.keep
# Google Drive
adb shell pm uninstall --user 0 com.google.android.apps.docs
# Google Photos
adb shell pm uninstall --user 0 com.google.android.apps.photos
# Google Cloud Print
adb shell pm uninstall --user 0 com.google.android.apps.cloudprint
# Google Actualités et météos
adb shell pm uninstall --user 0 com.google.android.apps.genie.geniewidget
# Application Google
adb shell pm uninstall --user 0 com.google.android.googlequicksearchbox

Resources

https://stackoverflow.com/questions/4032960/how-do-i-get-an-apk-file-from-an-android-device https://androidquest.wordpress.com/2014/09/18/backup-applications-on-android-phone-with-adb/ https://stackoverflow.com/questions/34482042/adb-backup-does-not-work https://stackoverflow.com/questions/53634246/android-get-all-installed-packages-using-adb https://www.dadall.info/article657/nettoyer-android https://etienne.depar.is/a-ecrit/Desinstaller-des-applications-systemes-d-android/index.html

@0nlyflash
Copy link

Thank you it worked.

@krupennikov
Copy link

krupennikov commented Feb 9, 2024

For those who don't have bash for Windows I recoded commands to work for powershell:

Backup apk of all installed apps

foreach ($APP in $(adb shell pm list packages -f -3)) {Invoke-Expression $($APP.replace('package:','adb pull ').replace('base.apk=','base.apk ')+'.apk')}

Backup data of all installed apps

foreach ($APP in $(adb shell pm list packages -3)) {Invoke-Expression $($APP.replace('package:','adb backup -f ')+'.backup '+$APP.replace('package:',''))}

Thanks for the description of the commands for powershell, but you must use .\ before adb. Otherwise it won't work.

@oxij
Copy link

oxij commented Feb 15, 2024

I made abarms, which a tool that helps to simplify a lot of this.

`abarms` is a *handy* Swiss-army-knife-like tool/utility/console app for POSIX-compatible systems for manipulating Android Backup files (`*.ab`, `*.adb`) produced by `adb backup`, `bmgr`, and similar tools.

With abarms you can do a full-system adb backup and split into per-app pieces later.

It's a pure Python tool, you don't need a heavy Java VM to run it, like with android-backup-extractor and android-backup-toolkit.

@LoneDev6
Copy link

@oxij sadly I doubt that works on Android 12 due to limitations.

To help protect private app data, Android 12 changes the default behavior of the adb backup command. For apps that target Android 12 (API level 31) or higher, when a user runs the adb backup command, app data is excluded from any other system data that is exported from the device.

@robt24
Copy link

robt24 commented Mar 14, 2024

@krupennikov , your scripts are working, what to do for restore? just replace pull with install and backup with restore ?

--
adb backup -f all -all -apk -nosystem
give me:
Now unlock your device and confirm the backup operation.

@krupennikov
Copy link

@robt24, I have not checked this script for restoring.

@AnatomicJC
Copy link
Author

Thanks all for your comments. I wrote this gist some years ago and I am not using it anymore, as backup doesn't work for some apps.

@amandy85
Copy link

amandy85 commented May 6, 2024

adb pull $( echo ${APP} | sed "s/^package://" | sed "s/base.apk=/base.apk /").apk

'sed' is not recognized as an internal or external command,
operable program or batch file.

@NguyenQuocVuong-git
Copy link

Is there any way to backup apps to my device? I want to use ADB to save backup files to my device and get the path of the backed-up file. Does anyone have a solution to this issue?

@XdekHckr
Copy link

Is there any way to backup apps to my device? I want to use ADB to save backup files to my device and get the path of the backed-up file. Does anyone have a solution to this issue?

Just root your phone and use swift backup

@NguyenQuocVuong-git
Copy link

Is there any way to backup apps to my device? I want to use ADB to save backup files to my device and get the path of the backed-up file. Does anyone have a solution to this issue?

Just root your phone and use swift backup

Is there any way to solve the problem without rooting? I have two current issues:

1.Backup the app into devices.
2.Get the path of the app that has just been backed up."

@trinityzhub
Copy link

trinityzhub commented Aug 30, 2024

Backup is working because it is executing in android owner user
Restore will not work for non-owner user. We can't restore for user,
Reason for Restore not Possible:
android user can't prompt confirmation for restore.

--------- REQUESTING HELP-----------------
@AnatomicJC
@ArRiMartinez

@artasoftware
Copy link

adb install app.apk
Performing Streamed Install
adb: failed to install app.apk: Failure [INSTALL_FAILED_MISSING_SPLIT: Missing split for com.gameloft.android....]

Is this can be solved somehow?

@licaon-kter
Copy link

@artasoftware did you put all the files in the command line? you need the others too

@artasoftware
Copy link

@artasoftware did you put all the files in the command line? you need the others too

What files do you mean? I have only one apk and one adb.

@licaon-kter
Copy link

@artasoftware we don't know which app you tried to install, but usually they (game?) come in multiple APK files, did you download/extract them all?

@artasoftware
Copy link

@artasoftware we don't know which app you tried to install, but usually they (game?) come in multiple APK files, did you download/extract them all?

Yeah it's a game but I have only one file. I've used this command: adb backup -apk org.fedorahosted.freeotp -f freeotp.adb

How can I backup multiple APKs for one application?

@licaon-kter
Copy link

if you need the app APK (not the data) you can use other tools too, like https://f-droid.org/packages/io.github.muntashirakon.AppManager/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment