什么是 adb shell?它能帮你做什么?
你有没有遇到过这样的场景:调试 Android 应用时,想查看设备里的某个文件,或者想快速执行一条系统命令,但又不想通过复杂的 IDE 或模拟器界面?这时候,adb shell 就像一把万能钥匙,能直接打开 Android 设备的“后台世界”。
adb shell 是 Android Debug Bridge(ADB)工具的一个核心功能。它允许你通过命令行与连接的 Android 设备或模拟器进行交互,进入设备的 Linux 命令行环境,执行各种系统级操作。简单来说,它就是你和 Android 系统之间的一条“直通管道”。
想象一下,你的手机是一台小型 Linux 电脑,而 adb shell 就是你远程登录这台电脑的终端。你不需要物理接触设备,也不需要图形界面,只要通过电脑上的命令,就能查看日志、管理文件、运行脚本,甚至重启系统。
在开发、测试、故障排查过程中,adb shell 是不可或缺的利器。尤其对于初学者来说,掌握它能让你摆脱“点来点去”的低效调试方式,真正理解 Android 系统的运行机制。
基础用法:如何连接设备并进入 shell
在使用 adb shell 之前,你需要先确保以下几点:
- 已安装 Android SDK Platform Tools(包含 adb 工具)
- 手机已开启“开发者选项”和“USB 调试”
- 通过 USB 数据线将设备连接到电脑
打开终端(macOS/Linux)或命令提示符(Windows),输入以下命令:
adb devices
这会列出当前连接的所有设备。如果看到类似输出:
List of devices attached
847945f6 device
说明设备已成功连接。
接下来,输入:
adb shell
执行后,你会看到命令行提示符变成 shell@android:/ $,这意味着你已经成功进入了设备的命令行环境。
💡 小贴士:如果你不想一直输入
adb shell,也可以直接在命令中嵌入指令,比如:adb shell ls /data/data这样可以一次性执行命令并返回结果,无需进入 shell 环境。
查看系统信息与运行状态
进入 adb shell 后,你可以像在 Linux 系统中一样,使用各种基础命令来获取设备信息。
查看设备基本信息
uname -a
这条命令会显示设备的内核版本、主机名、操作系统等信息。输出示例:
Linux localhost 4.14.113 #1 SMP PREEMPT Mon Apr 27 14:22:00 CST 2020 armv8l
这就像在问:“你是什么系统?哪个版本?”
查看运行中的进程
ps | grep -i "com.example.app"
这条命令会列出所有包含 com.example.app 的进程。ps 是查看进程的命令,grep 用于过滤关键字,-i 表示忽略大小写。
举个例子:如果你正在调试一个名为
com.myapp.main的应用,就可以用这条命令快速确认它是否在运行。
查看内存与 CPU 使用情况
top -n 1
top 命令会实时显示系统资源使用情况,-n 1 表示只运行一次并退出。你可以看到每个进程的 CPU 占用率、内存使用量等。
像一个“系统健康检查仪”,帮你发现哪些应用在偷偷吃资源。
文件系统操作:读写与管理设备文件
Android 的文件系统结构与 Linux 类似,adb shell 让你可以像操作本地文件一样管理设备文件。
查看文件列表
ls /sdcard/Download/
这会列出 SD 卡中 Download 文件夹下的所有文件。注意:/sdcard 是 Android 的公共存储路径,对应用户可见的文件夹。
创建与删除文件
echo "Hello from ADB!" > /sdcard/test.txt
这条命令会创建一个名为 test.txt 的文件,并写入文本内容。> 是重定向操作符,把输出写入文件。
要删除文件:
rm /sdcard/test.txt
rm 是删除命令,小心使用,避免误删重要数据。
复制与移动文件
cp /sdcard/test.txt /sdcard/backup/
将 test.txt 复制到 backup 文件夹。mv 命令用于移动文件。
✅ 安全提醒:操作文件时,建议先用
ls确认路径是否正确,避免误操作。
日志查看与调试技巧
调试应用时,日志是最重要的信息来源。adb shell 提供了强大的日志查看能力。
查看系统日志
logcat
执行后,会实时输出系统日志。你可以看到应用崩溃信息、权限请求、网络请求等。
举个实际例子:如果你的应用闪退,可以在 logcat 中搜索
FATAL EXCEPTION,通常能定位到具体错误行。
过滤特定应用日志
logcat | grep "com.myapp"
这会只显示与 com.myapp 相关的日志。grep 帮你从海量日志中“捞出”关键信息。
保存日志到本地文件
logcat -v threadtime > /sdcard/app_log.txt
-v threadtime 表示输出更详细的日志格式,包括线程时间戳。> 将输出重定向到文件,方便后续分析。
✅ 实用技巧:你可以在调试时运行这条命令,然后用
adb pull把日志文件导出到电脑,交给团队分析。
系统级操作:权限、服务与重启
adb shell 不仅能查看信息,还能执行一些系统级操作,但需注意:部分操作需要 root 权限,非 root 设备可能无法执行。
查看当前用户与权限
whoami
显示当前登录的用户。Android 中通常为 shell 用户。
检查服务状态
service list | grep "battery"
这条命令会列出所有系统服务中包含 battery 的项。比如 battery 服务是否在运行。
重启系统(谨慎使用)
reboot
执行后,设备会重启。这在调试系统级问题时非常有用,比如应用无法启动,可以尝试重启设备。
⚠️ 警告:在生产环境或未备份数据前,不要随意使用
reboot或rm等命令。
实战案例:自动化日志收集脚本
假设你正在开发一个应用,需要在每次测试后自动收集日志并保存到电脑。
你可以编写一个简单的 shell 脚本(保存为 collect_log.sh):
#!/system/bin/sh
LOG_PATH="/sdcard/app_test_log.txt"
rm -f $LOG_PATH
logcat -v threadtime -s "MyApp" > $LOG_PATH
sleep 10
adb pull /sdcard/app_test_log.txt ./logs/
✅ 说明:
#!/system/bin/sh是脚本的 shebang,指定解释器logcat -s "MyApp"只记录标签为MyApp的日志sleep 10给日志写入留出时间adb pull将设备文件复制到本地
运行脚本前,确保设备已连接,并赋予脚本执行权限:
adb shell chmod +x /sdcard/collect_log.sh
adb shell /sdcard/collect_log.sh
这样,你就能实现自动化日志收集,大幅提升测试效率。
小结:adb shell 是开发者效率的加速器
adb shell 并不是什么高深莫测的工具,它只是一个让你直接与 Android 系统对话的命令行接口。掌握了它,你就不再只是“点点点”的使用者,而是能主动掌控系统状态的开发者。
从查看日志、管理文件,到运行脚本、调试服务,adb shell 覆盖了开发过程中的多个关键环节。它就像你的“系统医生”、“文件管家”和“调试助手”,在关键时刻能救你于水火。
对初学者来说,建议从 adb shell 开始,逐步尝试 ls、ps、logcat 等基础命令,建立对 Android 系统运行机制的直观理解。对中级开发者而言,可以结合脚本自动化,提升测试与部署效率。
记住:每一次 adb shell 的输入,都是你离系统底层更近一步。多用、多试、多总结,你终将掌握这把通往 Android 深层世界的钥匙。