正确调用adb
的命令行应该是这样的:
adb backup "-apk -obb -shared -all -system" -f phone-20180522-120000.adb
这行代码适用于Linux,但对于Windows和OS-X也应该有效。对于Linux(可能也适用于OS-X),您可以使用以下脚本自动为文件分配时间戳:
adb backup "-apk -obb -shared -all -system" -f "${PHONE:-phone}-`date +%Y%m%d-%H%M%S`.adb`"
Important After doing a backup, verify your data! At my side, sometimes some corruption of the file shows up (and I doubt it is my computer, as I only observe such errors with adb
).
Here is a check
instruction I use:
set -o pipefail
for a in *.adb;
do
echo "$a";
dd if="$a" bs=24 skip=1 | zlib-flate -uncompress | tar tf - >/dev/null;
echo "ret=$?";
done
It should show ret=0
, but it doen't.
- If you see
inflate: data: invalid code lengths set
your archive is corrupted and - very likely - unusable for restore!
- If you see
tar: Unexpected EOF in archive
your backup probably is usable (all backups end this way, I do not know why).
- Even if you see just
ret=0
there might be undiscovered errors which still prevent a restore.
- There is definitively missing an
adb verify
command, to verify correctness of a backup!
注意
我发布此更新,因为所有其他答案都很有帮助,但是没有详细到最后一个细节。(当与完整引用一起使用时,备份会被执行,但称为backup.ab
)
这是我的环境:
- 操作系统:Ubuntu 16.04
- 手机:Android 7.0
- ADB:1.0.32
完整的步骤是(以防有人不知道需要什么):
- 第零步:安装
adb
(在Ubuntu上:sudo apt-get install android-tools-adb
)
- 第一步:在手机上启用USB调试模式。
- 第二步:使用USB数据线将手机连接到计算机的USB端口(仅充电的数据线不足够)
- 请注意,Ubuntu Phone Manager可能会出现并要求您输入手机的PIN码。如果发生这种情况,您不需要它,请关闭它。
- 第三步:运行
adb devices
- 您应该看到类似XXXXXXXXXXXX未经授权
的内容
- 过一段时间后,您的手机会显示一个消息,询问是否允许USB调试权限
- 只允许一次。出于安全考虑,您不应自动信任计算机,因为指纹可以很容易地被伪造。
- 请注意,如果某个辅助功能按钮阻挡了此确认窗口的单个像素(例如),则无法点击
OK
。请先移动遮挡窗口。
- 第四步:现在再次运行
adb devices
- 您应该看到类似XXXXXXXXXXXX设备
的内容
- 如果出现多行,则表示您将多个手机连接到计算机上。简单的方法是拔掉您不想备份的所有手机。(复杂的方法是设置环境变量
ANDROID_SERIAL=XXXXXXXXXXXX
)
现在按照上面所示运行adb backup
。将文件更改为您的需求。
- 这将弹出一个窗口,询问备份权限。
- 在备份进行时不要关闭备份窗口。当我试过这样做时,备份停止了,生成的存档文件也损坏了。
- 你可以设置密码来加密备份。我没有任何关于密码安全性的信息。但很可能,如果你忘记了这个密码,你不能恢复备份。
- 我不知道如何将这样的备份还原到其他手机上。我甚至从未尝试过还原,所以在这方面我无法提供帮助。
注:
adb help
显示所有可能的选项到 adb backup
- 在备份之前关闭您手机上的所有应用程序。我不知道这是否需要,但它肯定不会有害。
- 备份期间请勿操作手机。我不知道这是否需要,但它肯定不会有害。
- 请不要心急。留给备份足够的时间。在我的设备上,我看到每分钟大约进度为100MB(YMMV)。因此,备份我手机的需要大约半个小时(2.5 GB)。
显然 adb backup
并不能完全备份所有内容!
我查看了备份文件 (cd X && dd if=../XXXX.adb bs=24 skip=1 | zlib-flate -uncompress | tar xf -
),但未找到所有已安装的应用程序。
我能够找到的是(请注意,这个列表不完整):
- 内部模拟SD卡:
shared/0
- 外部SD卡:
shared/1
- 应用程序:
apps/
- 许多应用程序(如Google Authenticator)都不见了
- 日历:
apps/com.android.providers.calendar/db/calendar.db
(可能)
我找不到的内容(请注意,此列表不完整):
- 闹钟。(我可能无法检测到正确的应用程序)
- 完整的外部SD卡(此卡上有比下面显示的
share/1
更多内容。例如已移至SD卡的应用程序。)
结论:
- 有时
adb备份
可能会创建损坏的备份,这可能不会被注意到。因此,请检查您的备份或频繁备份,并假装足够幸运,以便并非所有备份都出现故障。
- 使用
adb备份
可以备份大多数重要数据,如相机图像等。但是,解压缩可能有点困难。
adb备份
不足以完全备份手机。
adb备份
不足以备份您的SD卡,以便如果它损坏,您可以用新的SD卡替换它并恢复其内容。这非常令人难过!
附注:笔误“Forth”不是偶然的。
提醒:在Ubuntu 18.04中,可在qpdf
软件包中找到zlib-flate
。