7、文件传输:adb push(从电脑推送到手机)、adb pull(从手机拉取到手机)、实战:备份与恢复文件
文件传输,说白了就是让电脑和手机之间互相“扔文件”。
我刚开始接触 ADB 时,觉得这功能没啥了不起的——不就是传个文件嘛。但后来在项目里调试日志、备份数据库、甚至给测试机批量装 APK 时,才发现这两个命令简直是救命稻草。今天咱们就把 adb push 和 adb pull 彻底讲透,再结合一个实战案例:备份与恢复文件。
7.1 adb push:从电脑推送到手机
命令格式很简单:
adb push <本地路径> <手机目标路径>
举个例子,我想把电脑桌面上的 test.apk 推到手机的 /sdcard/Download/ 目录下:
adb push C:\Users\admin\Desktop\test.apk /sdcard/Download/
执行后,终端会显示传输进度和速度。我个人习惯在推送大文件时,先看一眼手机剩余空间,免得推到一半报错。
adb shell mkdir 提前建好。
7.2 adb pull:从手机拉取到电脑
命令格式:
adb pull <手机路径> <本地目标路径>
比如把手机里的某个日志文件拉回电脑:
adb pull /sdcard/log.txt C:\Users\admin\Desktop\
如果省略本地路径,文件会默认拉取到当前终端所在目录。嗯,这里要注意:拉取时如果本地已有同名文件,ADB 会直接覆盖,不会询问你。所以建议拉取前先检查一下,或者把文件拉到新建的文件夹里。
/system、/data)的文件时,如果没有 root 权限,可能会提示 Permission denied。我遇到过好几次,明明路径写对了,就是拉不下来——后来才发现是权限问题。解决办法要么 root,要么用 run-as 命令(仅限 debug 应用)。
7.3 实战:备份与恢复文件
光讲命令太枯燥,咱们直接上一个实战场景:备份手机里的某个重要数据库文件,并在需要时恢复回去。
假设我们有一个应用叫 com.example.myapp,它的数据库文件在 /data/data/com.example.myapp/databases/myapp.db。你想把它备份到电脑上。
步骤一:确认文件存在
adb shell ls -l /data/data/com.example.myapp/databases/myapp.db
如果返回文件信息,说明路径正确。如果提示 No such file or directory,那就得检查包名或文件名了。
步骤二:拉取到电脑
adb pull /data/data/com.example.myapp/databases/myapp.db C:\backup\
执行后,电脑的 C:\backup\ 目录下就会多出一个 myapp.db 文件。我一般会在文件名后面加个时间戳,比如 myapp_20250327.db,方便区分版本。
步骤三:恢复文件
假设手机上的数据库被误删了,或者你想恢复旧版本:
adb push C:\backup\myapp.db /data/data/com.example.myapp/databases/
但这里有个坑——/data/data/ 目录通常不允许直接写入。我曾经试过直接 push,结果报错 Permission denied。怎么办?
有两种办法:
- 方法一: 如果手机已 root,直接 push 即可。
- 方法二: 如果没有 root,可以先把文件推到
/sdcard/,然后用adb shell配合run-as命令复制过去:
adb push C:\backup\myapp.db /sdcard/
adb shell
run-as com.example.myapp
cp /sdcard/myapp.db databases/
注意:run-as 只对 debug 版本的应用有效。如果是 release 版本,这条路也走不通。那怎么办?我个人的经验是:提前在应用里加一个“导出/导入数据库”的功能,用代码把数据库复制到 /sdcard/,这样就不用折腾权限了。
7.4 知识体系图
下面这张图帮你理清文件传输的核心逻辑:
7.5 常用参数与技巧
| 命令/参数 | 说明 | 示例 |
|---|---|---|
adb push |
从电脑推送到手机 | adb push a.txt /sdcard/ |
adb pull |
从手机拉取到电脑 | adb pull /sdcard/a.txt . |
-a 参数 |
保留文件时间戳和权限(部分设备支持) | adb pull -a /sdcard/a.txt . |
run-as |
以指定应用身份执行命令(debug 应用) | run-as com.example cp /sdcard/a.txt databases/ |
核心要点:
adb push和adb pull是双向文件传输的基础工具。- 推送前确认目录存在,拉取时注意同名覆盖问题。
- 系统分区文件需要 root 或
run-as才能操作。 - 实战中,备份数据库或配置文件时,建议先推到
/sdcard/再拉取,避免权限问题。
好了,文件传输这块就讲到这里。你想想看,掌握了 push 和 pull,是不是感觉手机和电脑之间的壁垒一下子打通了?下次遇到需要备份应用数据、导出日志、或者批量安装文件时,直接上 ADB,比用数据线拖拽靠谱多了。