Android backup extractor
Clone or download
Nikolay Elenkov
Nikolay Elenkov fixed typo
Latest commit d750899 Oct 12, 2018

README.md

Android backup extractor

Utility to extract and repack Android backups created with adb backup (ICS+). Largely based on BackupManagerService.java from AOSP.

Building

Requires Java 7. Handling encrypted backups requires the JCE unlimited strength jurisdiction policy (not needed if using current Java 9 release).

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

Use one of the tools listed below to build or see Releases for pre-built binaries (runnable jar files).

With Eclipse:

Download the latest version of Bouncy Castle Provider jar (bcprov-jdk15on-*.jar) from here:

Drop the latest Bouncy Castle jar in lib/, import in Eclipse and adjust build path if necessary. Use the abe script to start the utility.

With Ant:

Use the bundled Ant script to create an all-in-one jar and run with: (you still need to put the Bouncy Castle jar in lib/; modify the bcprov.jar property accordingly)

java -jar abe.jar pack|unpack|pack-kk ...

(Thanks to Jan Peter Stotz for contributing the build.xml file)

With Gradle:

Use gradle to create an all-in-one jar: ./gradlew and then:

java -jar build/libs/abe-all.jar pack|unpack|pack-kk ...

Usage

Syntax:

  • unpack: abe unpack <backup.ab> <backup.tar> [password]
  • pack: abe pack <backup.tar> <backup.ab> [password]
  • pack for 4.4: abe pack-kk <backup.tar> <backup.ab> [password] (creates version 2 backups, compatible with Android 4.4.3)

If the filename is -, then data is read from standard input or written to standard output.

If the password is not given on the command line, then the environment variable ABE_PASSWD is tried. If you don't specify a password the backup archive won't be encrypted but only compressed.

Packing tar archives

  • Android is very particular about the order of files in the tar archive. The format is described here.
  • Incompatible tar archives lead to errors or even system crashes.
  • Apps with the allowBackup flag set to false are not backed up nor restored.
    • (you can try restoring manually via adb push and adb shell)
  • Errors are only printed to logcat, look out for BackupManagerService.

The safest way to pack a tar archive is to get the list of files from the original backup.tar file:

tar tf backup.tar | grep -F "com.package.name" > package.list

And then use that list to build the tar file. In the extracted backup directory:

tar cf restore.tar -T package.list

You can now pack restore.tar and try adb restore restore.ab

Releases

Releases are built with Travis CI from the master branch and include a runnable fat jar.

Use the binaries at your own risk. No warranty or support provided.

Please report only bugs in backup extractor itself, I can't answer questions regrading unpacking/repacking backups or tar files. (See Usage for a mini usage guide.)

Build Status

Notes

More details about the backup format and the tool implementation in the associated blog post.