On Cygwin you have cat and the other utilities you have to install them from the setup.
I thought I did, as the tar command works fine. I think cygwin installed them all, but I will check.
On Cygwin you have cat and the other utilities you have to install them from the setup.
What is an android adb backup?
5) Create the new tar archive. The directories stored on tar shouldn't contain trailing slashes, so I use pax or star instead of tar:
ORCode:cat gta.list | pax -wd > gta3.tar
Code:star -c -v -f gta3.tar -no-dirslash list=gta3.list
Well,
But when I use the command pax gives me the following error on every file on the list:
pax: ustar header field is too small for apps/com.rovio.angrybirds/f/settings.lua
(this is just one instance of the error; the archive consists of many more files which all create the same error)
I have Googled the error but can't seem to find the solution.
Any idea?
Maybe I could use the star option, but did not find a version of star that works on my Mint installation yet.
Thanks
The problem is that the GID / UID is just too big to be compatibly recorded, so pax blows chunks. Example of error:Well,
I have made progress up to step 5 trying to transfer Angry Birds scores to my Jelly Bean phone. Following the tutorial I decided to use the pax option in Cygwin with this command:
cat ab.list | pax -wd > ab.tar
having created the .tar archive and .list file before as described in the tutorial.
But when I use the command pax gives me the following error on every file on the list:
pax: ustar header field is too small for apps/com.rovio.angrybirds/f/settings.lua
(this is just one instance of the error; the archive consists of many more files which all create the same error)
I have Googled the error but can't seem to find the solution.
Any idea?
Maybe I could use the star option, but did not find a version of star that works on my Mint installation yet.
Thanks
I'm not sure but is possible that owner is coded different when you extract the tar files under linux or under windows. You can see all the information with thisI see. But the version of pax that I installed with Mint 13 works ok. So it seems to be related to the version that gets installed with Cygwin. Is the link you are referring to about the Cygwin version? Not sure what the subject of Macports-website is. Still a noob in Linux-land, although I've learned a lot by following this guide
ls -l apps/com.rovio.angrybirds/f/settings.lua
What is an android adb backup?
An adb backup is a file with ab extension, generated by android's backup manager when we request it via adb shell. This allows you to backup some data of the phone, but is not a replacement of a clockworkmod backup:
- Each application files may be backed up or not depending on its policies. In some cases, the apk itself is never backed up even if requested.
- Usually for restoring an application's data it requires you to have it installed first.
- Inside an ab file is a tar file, which contains files and folders in a certain order. You have you respect that order in order to create a valid tar file.
- Inside the tar file, directories must not have trailing slash, for that reason pax, star or equivalent has to be used.
- There are some bugs present in the android source code.
- 'adb backup' or 'adb restore' are pretty slow, no matter what computer or phone you have, because the android debugging bridge has a maximum internal speed of about 1 MBps. So, each gigabyte can take about 15 minutes to backup or restore.
- If you have the device encrypted with a password, you must use that as well when your device asks to confirm backup creation or restoration. You can't create a backup without password in this particular case.
You can use java or perl, although with perl can be more complicated because requires downloading some modules from cpan and some ssl headers.
To know more information about types of android backups:
[Guide] Types of Android backups
Software needed
The entire process can be done from Windows, but is better to use a unix-like operating system, like Linux, OS X or BSD, since we should extract the files on a filesystem that preservers file permissions and owners and repack the tar archive. Furthermore some tools like star are easier to get for linux. In such cases, using Virtualbox or VMWare Workstation is highly recommended. Using Windows should work in any case whatsoever.
Java 7 or higher
- Oracle Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7 if you are going to work with password encrypted backups.
You need to install the files local_policy.jar and US_export_policy.jar under jre's lib/security folder, for example:
- For Windows:- For Linux or BSD:
- C:\Program Files\Java\jdk1.7.0_09\jre\lib\security\
- C:\Program Files\Java\jre7\lib\security\
- C:\Program Files (x86)\Java\jdk1.7.0_07\jre\lib\security\
- C:\Program Files (x86)\Java\jre7\lib\security\
/usr/local/jdk1.7/jre/lib/security/
/usr/lib/jvm/java-7-openjdk-*/jre/lib/security/
/usr/local/openjdk7/jre/lib/security/
- For OS X:
- /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/security/
Perl
- Perl is available for several operating systems
- libssl or openssl headers. If you are using Linux or Cygwin is much more easier
- cpan modules required by use functions
pax or star
pax is an archiving utility that compresses in ustar by default. In this case is extremely useful because stores directories without trailing slash. Is available for all operating systems, and in windows can be installed via cygwin's setup.exe or download a native version like gnuwin32 (sometimes available via bsdtar with pax option).
star allows storing directories without trailing slash. You can get the ubuntu version 1.5 here. There is no version of star for Windows or Cygwin, and other versions like tar, gtar or bsdtar don't implement the option. So, the only option is to user another operating system, installing it or running it from VMWare Workstation or Virtualbox, and share a folder. See here images.
Android Backup Extractor
Android Backup Extractor is the java application that does all the job. It includes the perl scripts.
How it works, better with an example
I will use an example to demonstrate how it works, with java version. If you like to use perl, just grab the perl scripts and is nearly the same.
This is extracted from the readme file, and will extract a whole adb backup and repack only the data for the game Grand Theft Auto III for android.
1) Convert the original adb backup to tar format:
Code:java -jar abe.jar unpack nexus7.ab nexus7.tar <password>
2) Extract the contents of the tar archive. This should be done on a filesystem where the permissions of the files inside the tar are preserved, for example using linux, mac or bsd. Up to two folders may appear, apps and shared:
Code:tar -xvf nexus7.tar
3) Make a list of all the contents of the original archive in the order they are archived:
Code:tar -tf nexus7.tar > nexus7.list
4) Create a new list only with the files and folders you want, in proper order. For example for the GTA 3 (you can try savegames instead of all data):
Code:cat nexus7.list | grep com.rockstar.gta3 > gta3.list
5) Create the new tar archive. The directories stored on tar shouldn't contain trailing slashes, so I use pax or star instead of tar:
ORCode:cat gta.list | pax -wd > gta3.tar
Code:star -c -v -f gta3.tar -no-dirslash list=gta3.list
6) Create the adb backup from the tar archive. Password is optional:
Code:java -jar abe.jar pack gta3.tar gta3.ab <password>
Note: if the backup is not encrypted zlib can be used instead for both unpack and pack the ab archive:
- Quick unpacking:
- Quick packing:Code:dd if=nexus7.ab bs=24 skip=1 | openssl zlib -d > nexus7.tar
Code:dd if=nexus7.ab bs=24 count=1 of=gta3.ab ; openssl zlib -in gta3.tar >> gta3.ab
Links
Android Backup Extractor (@ Sourceforge)
Android Backup Extractor (@ GitHub)
Documentation at Blogspot
[Guide] Types of Android backups
Perl scripts to encrypt/decrypt adb backup files
[GUIDE] Full Phone Backup without Unlock or Root
[GUIDE] Internal Memory Data Recovery - Yes We Can!
Related adb backup and restore bugs:
Issue 28303: adb backup doesn't respect -noshared flag
Issue 32830: adb restore errors not displayed on device
Issue 34311: Galaxy Nexus gets stuck when restoring adb backup
Issue 25780: BackupManager causes reboot when BackupAgent missing
Issue 40691: ab backup and restore Ski Safari does not restore saved data
Issue 16286: Restoration of phone not working properly
Pax is not included in Cygwin base install. You can run all commands from Mintty in a single terminal.
Mintty is a terminal emulator for Cygwin and MSYS. In Cygwin, it is installed as the default terminal by Cygwin's setup.exe.
Thank you - so if I am telling people about Cygwin, I need to tell them to search PAX and select "installed". OK.
RE: Mintty - I did a search on it and this page says that
Does this mean that when I double click the Cygwin shortcut, Mintty is the terminal window that opens?
I ask this because when I navigate to the folder where the adb.exe is located, and run the adb backup command I get the response
-bash: adb: command not found
Yes, you have to intentionally install pax from setup.exe and Mintty in the default shortcut to "Cygwin".
Yes you can. adb must be in the windows' path to run it directly or either provide the full path to it.
Yes you can. adb must be in the windows' path to run it directly or either provide the full path to it.
Yes you need to specify full path in unix format if adb is not in windows PATH. You can convert from windows path with cygpath:Not at home right now so cannot test immediately - do I need to specify the path if I am trying to run it from its own directory?
Because that is what I was trying? Admittedly I tried adb and not ./adb - would that make a difference.
$ cygpath.exe 'C:\adt-bundle-windows-x86-20130219\sdk\platform-tools'
/cygdrive/c/adt-bundle-windows-x86-20130219/sdk/platform-tools
Yes you need to specify full path in full format if adb is not in windows PATH. You can convert from windows path with cygpath:
Code:$ cygpath.exe 'C:\adt-bundle-windows-x86-20130219\sdk\platform-tools' /cygdrive/c/adt-bundle-windows-x86-20130219/sdk/platform-tools
Or you can add the windows path to Windows PATH and restart cygwin. You can run also ./adb if you first navigate to the corresponding directory.
How to Add a Folder to Path in Windows XP
Yes you need to specify full path in unix format if adb is not in windows PATH. You can convert from windows path with cygpath:
Code:$ cygpath.exe 'C:\adt-bundle-windows-x86-20130219\sdk\platform-tools' /cygdrive/c/adt-bundle-windows-x86-20130219/sdk/platform-tools
Or you can add the windows path to Windows PATH and restart cygwin. You can run also ./adb if you first navigate to the corresponding directory.
How to Add a Folder to Path in Windows XP
export PATH="$PATH:C:\ADT\sdk\platform-tools"
That won't work because PATH is generated each time you start cygwin so will overwrite it. You may better add the line to ~/.bashrcYou can add the adb program path to Cygwin on every start-up -or- automatically via .bash_profile:
Code:export PATH="$PATH:C:\ADT\sdk\platform-tools"
echo 'PATH=`echo $PATH`:/cygdrive/c/ADT/sdk/platform-tools/' >> $HOME/.bash_profile
You can add the adb program path to Cygwin on every start-up -or- automatically via .bash_profile:
Code:export PATH="$PATH:C:\ADT\sdk\platform-tools"
Alternatively, you can just drop three files (adb.exe, AdbWinApi.dll, AdbWinUsbApi.dll) to Cygwin /bin/ directory.
That won't work because PATH is generated each time you start cygwin so will overwrite it. You may better add the line to ~/.bashrc
Code:echo "export PATH=$PATH:/cygdrive/c/ADT/sdk/platform-tools" >> ~/.bashrc
bash: export: 'Files/Common' : not a valid identifier
bash: export: 'Files/Roxio' : not a valid identifier
bash: export: 'Shared/DLLShared:/cygdrive/c/Program' : not a valid identifier
bash: export: 'Files/Common' : not a valid identifier
bash: export: 'Files/Roxio' : not a valid identifier
bash: export: 'Shared/DLLShared:/cygdrive/c/Program' : not a valid identifier
bash: export: 'Files/Common' : not a valid identifier
bash: export: 'Files/Roxio' : not a valid identifier
bash: export: 'Shared/9.0/DLLShared:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:cygdrive/c/Program' : not a valid identifier
bash: export: 'Files/QuickTime/QTSystem:/cygdrive/c/Program' : not a valid identifier
bash: export: 'Files/Nmap:cygdrive/c/ADT/sdk/platform-tools' : not a valid identifier
export PATH=/usr/local/bin:/usr/bin:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Program Files/Common Files/Roxio Shared/DLLShared:/cygdrive/c/Program Files/Common Files/Roxio Shared/DLLShared:/cygdrive/c/Program Files/Common Files/Roxio Shared/9.0/DLLShared:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files/QuickTime/QTSystem:/cygdrive/c/Program Files/Nmap:/cygdrive/c/ADT/sdk/platform-tools:/cygdrive/c/ADT/sdk/platform-tools
java -jar abe.jar unpack nexus7.ab nexus7.tar <password>
tar -xvf nexus7.tar
tar -tf nexus7.tar > nexus7.list
cat nexus7.list | grep com.rockstar.gta3 > gta3.list
cat gta.list | pax -wd > gta3.tar
star -c -v -f gta3.tar -no-dirslash list=gta3.list
java -jar abe.jar pack gta3.tar gta3.ab <password>
dd if=nexus7.ab bs=24 skip=1 | openssl zlib -d > nexus7.tar
dd if=nexus7.ab bs=24 count=1 of=gta3.ab ; openssl zlib -in gta3.tar >> gta3.ab
Read the guide. 7z is not compatible, you have to use star or equivalent and meet the requirements.I have tried similar attempt to restore my save of another game but that doesn't work.
How did you replace the files in the .tar file? I am using 7z to replace the .tar file but nothing happen after i restored.
Thanks.
Maybe I'm missing something.
I've installed Java, ran cygwins setup.exe and I think it installed everything. Also downloaded the Android Backup Extractor. I try running a windows command prompt with:
java -jar abe.jar unpack nexus7.ab nexus7.tar
All I get is "java is not an internal or external command". I'm running the command prompt in the android backup extractor folder. Does everything have to be in the same folder? Where do I dump everything?
which java
$ which java
/cygdrive/c/Windows/system32/java
Because i am using windows, so does it mean that i couldn't modify the .tar file in any way?
thanks.