如何提取或解压缩.ab文件(Android备份文件)

ton*_*099 48 backup android cmd

我正在运行一个android 4.0.3设备,我想提取由以下创建的备份文件:

adb backup -f ~/data.ab -noapk app.package.name
Run Code Online (Sandbox Code Playgroud)

上面的代码在CMD(windows)中运行,我可以在'〜'目录中获取data.ab文件.

我不能做的是使用CMD来接收该文件.我尝试了以下两种方法.

dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -

dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
Run Code Online (Sandbox Code Playgroud)

我得到以下错误

错误

我尝试通过CYGWIN提取它,但是,我也失败了.

错误

我应该在哪里提取?我的命令提示符应该在哪个目录中?任何见解?

Pud*_*ler 46

根据https://android.stackexchange.com/a/78183/239063,您可以在Linux中运行一行命令,以添加适当的tar标头来提取它.

( printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 backup.ab ) | tar xfvz -

backup.ab替换为文件的路径.

  • 似乎工作,虽然它以`gzip:stdin:意外结束文件``tar结束:孩子返回状态1``tar:错误不可恢复:现在退出` - 假设这是正常的? (7认同)
  • @tobek,是的,如果您按照给定的命令运行命令,但产生正确的输出.它可能是抱怨,因为backup.ab没有具有CRC-32校验和和长度的正确的gzip文件页脚. (4认同)
  • 只需一个小注释,如何在没有Linux命令行的情况下执行此操作.使用HexEditor打开**backup.ab**,并将前24个字节(0x18)替换为"1F 8B 08 00 00 00 00 00"并保存为**backup.tar.gz**.然后可以使用WinRAR或任何其他提取工具打开它. (4认同)
  • 现在工作:`gzip:stdin:无效的压缩数据 - 格式违反 tar:孩子因信号 13 死亡 tar:错误不可恢复:现在退出` (2认同)

fin*_*oot 33

我也不得不解压一个.ab文件,并在寻找答案时找到了这篇文章.我建议的解决方案是Android Backup Extractor,一个适用于Windows,Linux和Mac OS的免费Java工具.

如果遇到问题,请务必查看README.如果您的.ab-file受密码保护,则可能必须下载更多文件.

用法:
java -jar abe.jar [-debug] [-useenv=yourenv] unpack <backup.ab> <backup.tar> [password]
Run Code Online (Sandbox Code Playgroud)

例:

比方说,你有一个test.ab没有密码保护的文件,你正在使用Windows并希望.tar调用生成的-Archive test.tar.然后你的命令应该是:

java.exe -jar abe.jar unpack test.ab test.tar ""

  • Android备份Extractor的源代码和官方版本位于Github上:https://github.com/nelenkov/android-backup-extractor/releases/latest。此答案中链接的 SourceForge 存储库正在重新打包旧版本。 (8认同)
  • 仅供参考,以供新手尝试弄清楚以上命令在Linux上的工作方式。`java -jar path / to / abe.jar解压path_to / backup.ab path_for_generation / backup.tar“” (2认同)