7、文件传输:adb push(从电脑推送到手机)、adb pull(从手机拉取到手机)、实战:备份与恢复文件

文件传输,说白了就是让电脑和手机之间互相“扔文件”。

我刚开始接触 ADB 时,觉得这功能没啥了不起的——不就是传个文件嘛。但后来在项目里调试日志、备份数据库、甚至给测试机批量装 APK 时,才发现这两个命令简直是救命稻草。今天咱们就把 adb pushadb pull 彻底讲透,再结合一个实战案例:备份与恢复文件。

7.1 adb push:从电脑推送到手机

命令格式很简单:

adb push <本地路径> <手机目标路径>

举个例子,我想把电脑桌面上的 test.apk 推到手机的 /sdcard/Download/ 目录下:

adb push C:\Users\admin\Desktop\test.apk /sdcard/Download/

执行后,终端会显示传输进度和速度。我个人习惯在推送大文件时,先看一眼手机剩余空间,免得推到一半报错。

小技巧: 如果目标路径不存在,ADB 会自动创建目录吗?答案是:不会。我曾经踩过这个坑——推送时写了个不存在的路径,结果命令直接报错。所以推送前最好先确认目录存在,或者用 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 知识体系图

下面这张图帮你理清文件传输的核心逻辑:

ADB 文件传输核心逻辑 电脑(本地) 手机(设备) adb push adb pull 本地路径:C:\Users\... 或 /home/... 手机路径:/sdcard/... 或 /data/... ⚠️ 注意:/data/data/ 目录需要 root 或 run-as 权限才能写入 建议先推送到 /sdcard/,再用 shell 命令复制到目标位置

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 pushadb pull 是双向文件传输的基础工具。
  • 推送前确认目录存在,拉取时注意同名覆盖问题。
  • 系统分区文件需要 root 或 run-as 才能操作。
  • 实战中,备份数据库或配置文件时,建议先推到 /sdcard/ 再拉取,避免权限问题。

好了,文件传输这块就讲到这里。你想想看,掌握了 pushpull,是不是感觉手机和电脑之间的壁垒一下子打通了?下次遇到需要备份应用数据、导出日志、或者批量安装文件时,直接上 ADB,比用数据线拖拽靠谱多了。


公众号:蓝海资料掘金营,微信 deep3321