搞安卓开发或者折腾手机的人,迟早都要跟ADB打交道。GUI工具用着用着就卡,传个大文件MTP协议各种断连,批量操作更是噩梦。ADB才是正道,快、稳、可控。
这篇讲的就是怎么用ADB命令行管理安卓手机上的文件,从基础操作到进阶技巧,一次讲透。
环境准备
装好Android SDK Platform Tools就行,不需要完整的Android Studio。
| |
手机端开启USB调试:设置 → 关于手机 → 连续点击版本号7次激活开发者选项 → 开发者选项 → USB调试打开。
用USB线连上电脑,终端输入:
| |
如果看到设备ID后面跟着device,说明连接成功。如果显示unauthorized,看手机上有没有弹出授权对话框,勾上"始终允许"点确定。
无线连接也行,前提是手机和电脑在同一局域网:
| |
拔掉USB线,后续操作走WiFi。延迟比USB高,传大文件不推荐,但日常操作够用。
基础文件操作
推送文件到手机
| |
这个命令把本地的vacation.zip推送到手机的/sdcard/Pictures/目录。注意安卓的/sdcard不是真正的SD卡,是内部存储的符号链接,大多数手机只有这一个用户可见存储区。
推送整个目录也行:
| |
末尾的斜杠不能少,否则adb会把整个目录作为子目录推过去,路径变成/sdcard/Music/music/,多套一层。
从手机拉取文件
| |
拉取单个文件或整个目录都支持。拉取目录时本地目标路径如果不存在会自动创建。
一个实用场景:备份应用数据。前提是应用数据在可访问路径下:
| |
查看文件列表
| |
adb shell后面跟的是标准的Linux shell命令。ls -la显示详细列表含隐藏文件。安卓底层是Linux,大部分常用命令都能用。
删除文件
| |
rm -r删目录,没有确认提示,删了就是删了。建议先ls确认路径再动手。
进阶技巧
批量清理截图
手机截图攒了几百张,手动删要命:
| |
或者只删7天前的:
| |
find命令在安卓上可用,-mtime +7匹配修改时间超过7天的文件。
按扩展名找文件
| |
找所有APK文件。-type f限定只匹配文件,跳过目录。
查看磁盘占用
| |
df -h看整体容量,du -sh看特定目录占用。手机存储空间不够的时候,这两个命令比去设置里翻快多了。
文件权限问题
有时候push过去的文件在手机上打不开,十有八九是权限问题:
| |
644 = 拥有者读写,组和其他人只读。安卓的/sdcard目录用的是FUSE文件系统,chmod可能不生效,这种情况需要把文件先推到/data/local/tmp/,改完权限再移过去。
大文件断点续传
ADB本身不支持断点续传,但可以拆分文件:
| |
这种土办法在MTP频繁断连的场景下比GUI工具靠谱得多。
应用管理相关文件操作
导出已安装APK
想备份某个应用或者分享给没网的环境:
| |
pm path输出的路径每次安装都不一样,别硬编码。
清除应用缓存
| |
注意这会清除所有应用数据,等于恢复出厂设置里单个应用的清除数据。缓存大了占空间但又不想卸载重装的时候用。
列出所有已安装包
| |
-3只显示第三方应用,不显示系统应用。要全看就去掉-3。
多设备操作
如果同时连了多台设备,adb devices列出后需要指定目标:
| |
-s后面跟设备序列号。序列号从adb devices的输出里抄。
常见坑
MTP和ADB同时连会冲突。 电脑文件管理器通过MTP访问手机存储时,adb push/pull可能报错。关掉电脑端的MTP文件管理器窗口再试。
/sdcard路径不统一。 有的手机是/sdcard,有的要用/storage/emulated/0,本质是同一个地方,符号链接指向不同。用adb shell echo $EXTERNAL_STORAGE查看当前设备的标准路径。
Android 11+的Scoped Storage限制。 从安卓11开始,应用只能访问自己目录下的文件。adb shell是以shell用户运行的,权限比普通应用高,大部分目录还是能访问,但/sdcard/Android/data/下的内容在shell里也可能受限。遇到Permission Denied先adb root试试,不行的话说明厂商锁了SELinux策略,普通用户只能认栽。
中文字符乱码。 adb shell里中文文件名可能显示为问号。这是终端编码问题,不是文件坏了。设置终端编码为UTF-8,或者用adb shell ls -1 > filelist.txt把列表导出再看。
速查表
| 操作 | 命令 |
|---|---|
| 推送文件 | adb push 本地路径 手机路径 |
| 拉取文件 | adb pull 手机路径 本地路径 |
| 列出文件 | adb shell ls -la 路径 |
| 删除文件 | adb shell rm 文件路径 |
| 删除目录 | adb shell rm -r 目录路径 |
| 查找文件 | adb shell find 路径 -name "*.ext" |
| 磁盘占用 | adb shell du -sh 路径 |
| 改权限 | adb shell chmod 644 文件路径 |
| 查APK路径 | adb shell pm path 包名 |
| 清应用数据 | adb shell pm clear 包名 |
ADB文件管理这活,熟练了比任何GUI工具都快。命令行不骗你,出错了信息明明白白摆在那,比MTP突然断连让你怀疑人生强一万倍。
