adb shell(保姆级教程)

什么是 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 之前,你需要先确保以下几点:

  1. 已安装 Android SDK Platform Tools(包含 adb 工具)
  2. 手机已开启“开发者选项”和“USB 调试”
  3. 通过 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

执行后,设备会重启。这在调试系统级问题时非常有用,比如应用无法启动,可以尝试重启设备。

⚠️ 警告:在生产环境或未备份数据前,不要随意使用 rebootrm 等命令。


实战案例:自动化日志收集脚本

假设你正在开发一个应用,需要在每次测试后自动收集日志并保存到电脑。

你可以编写一个简单的 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 开始,逐步尝试 lspslogcat 等基础命令,建立对 Android 系统运行机制的直观理解。对中级开发者而言,可以结合脚本自动化,提升测试与部署效率。

记住:每一次 adb shell 的输入,都是你离系统底层更近一步。多用、多试、多总结,你终将掌握这把通往 Android 深层世界的钥匙。