通过ADB备份和还原Android设置和应用程序


30

我想问一下是否可以通过ADB备份和还原所有Android设置和应用程序。

我试过了:

adb backup -all
adb: unable to connect for backup

当所有其他命令都起作用时,它不起作用。

可以使用此bmgr吗?


我在win7-64上使用adb 1.0.29,adb: unable to open file ./backup.ab执行时出现错误adb backup -all。没有adb devices找到你的Android?
k3b 2012年

是的,我可以看到设备ID。

在命令行上提交多包名称时,我遇到了类似的问题。问题是要备份的软件包数太长。我需要将其拆分为多个命令
Romuald Brunet

Answers:


9

确保已启用调试并连接了设备。另外,请记住实际选择设备本身上的“备份我的数据”按钮(设备需要确认)。如果您在设备上看不到这样的屏幕,则很可能正在运行ICS之前版本(<4.0)的电话,不幸的是,它将没有此功能。

此外,bmgr这也不是解决方案-它是一种工具,用于通过手动在应用程序中的备份代理上触发“ backup”和“ restore”方法,而不是使用设备和应用程序来测试使用备份API处理自己的备份的应用程序向/从开发机器复制数据。


是的-对我来说,问题是手机上的Android版本低于4.0。谢谢!
nealmcb 2015年

这实际上包括设置/数据吗?
没人

7

这是我备份的命令

./adb shell ls -l -a | grep '^[^l]' | sed -e 's/^d.* \([^ ]*\)\r$/mkdir sav\/\1; .\/adb pull \/\1 sav\/\1/' -e 's/-.* \([^ ]*\)\r$/.\/adb pull \/\1 sav\/\1/' | /bin/bash
  1. 列出所有文件
  2. 忽略链接
  3. 对于
    • files:输出adb pull命令
    • directorys:将目录(如果我们将某物拉为空)并输出adb pull命令
  4. 用bash执行所有操作

有些文件中我的权限被拒绝-但是由于要备份此文件是为了使设备root,因此我无法获得更多的权限:(


1
实际上,即使在较旧的Android设备(在本例中为Gingerbread 2.3.3)上,这似乎也可以备份所有文件(减去“拒绝权限”位)。我使用了这种变体(添加了-pparam以mkdir避免一些错误消息,并./在前面删除了./adb):time adb shell ls -l -a | grep '^[^l]' | sed -e 's/^d.* \([^ ]*\)\r$/mkdir -p sav\/\1; adb pull \/\1 sav\/\1/' -e 's/-.* \([^ ]*\)\r$/adb pull \/\1 sav\/\1/' | /bin/bash
StéphaneGourichon 13年

3
无需任何花哨的正则表达式即可对所有文件进行递归备份的简单得多的方法是“ adb pull /”。
JC Hulce'2

5

如果我对您的理解正确,那么此链接可能就是您所需要的。总结一下:

1)运行adb devices以确保已连接设备。

2)运行adb pull /data/app ./以获取所有应用APK,并将其放入当前文件夹中。
a)或运行adb pull /system/sd/app ./以在SD卡上获取应用程序。

3)设置位于不同的位置,因此请找出位置,然后使用相同的adb pull命令进行抓取。

然后,该链接详细说明了如何基于Mac或Windows进行还原。

另外,看起来bmgr您提到的命令也可以与一些简单的命令一起使用(adb shell bmgr backup <package>备份和adb shell bmgr restore <package>还原)。您还在寻找什么?


1
正如Alexander Lucas在下面的回答中指出的那样,该bmgr命令是开发人员测试应用程序备份/还原的工具。它实际上不会从设备上复制任何数据,因此它不太可能有用。
PT

是否对亚行1.0.30姜饼设备不工作:pull: building file list... 0 files pulled. 0 files skipped.
斯特凡纳·古里科

adb pull将无法在非root用户的设备上处理私人应用程序数据。而且bmgr仅用于控制
Google的

2

问题可能是由于连接了多个设备/仿真器。

检查adb devices如果显示的设备不止一个,那么它可能无法连接specialy to emulators

运行adb usb它将重新启动其他设备,然后断开/重新连接USB电缆,现在运行

adb devices

它应该只显示一个设备。

现在做

adb backup -all

你应该很好:)


如果我通过适用于Android的终端模拟器在本地使用命令,该怎么办?
user2284570

2

确保运行SDK更新,并特别选中Google USB驱动程序复选框并更新SDK。

在设备上启用USB调试并插入PC后,您将得到有关安装驱动程序的提示。即使其成功打开了设备管理器并找到了您的手机,也可以右键单击并更新驱动程序,然后将其指向SDK > Extras > Google USB并让其更新驱动程序。

然后,您应该能够从设备中提取完整备份。


这为我解决了这个问题。驱动程序不是问题,但是ADB版本本身已经过时了。
AJ亨德森2014年

1

我有一个我需要备份的GS4,很不幸遇到了这个错误。经过一番挠头(和咒骂)后,我发现了一个修复程序,希望对您有用。我可以通过运行abd和滚动帮助文档来找到它。我发现这-d是一个“将命令定向到唯一连接的USB设备”的参数。因此,在插拔之后,我就可以使用它了。我使用的命令是:

adb -d backup -apk -shared -all -f C:\Users\NAME\backup.ab

希望这对遇到我同样问题的人有用。


0

我有同样的问题,也是ICS之前的课程。解决该问题的方法是使用ls /和awk(使用grep跳过链接)创建一个批处理文件,该文件将每个实际目录都拉到PC上的目录中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.