adb shell(手把手讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
一、前言:为什么说 ADB Shell 是安卓开发者的必备技能?
在安卓开发领域,有一个像瑞士军刀般全能的工具——ADB Shell。它不仅是连接开发者与安卓设备的桥梁,更是调试、诊断和优化应用的「秘密武器」。无论是初学者尝试理解设备底层逻辑,还是中级开发者需要快速定位问题,ADB Shell 都能提供高效且直观的解决方案。
本文将从零开始,通过循序渐进的讲解和实战案例,带您掌握 ADB Shell 的核心功能。即使没有命令行经验,也能通过本文快速入门,并学会如何将其融入日常开发流程。
二、基础概念:ADB Shell 是什么?如何工作?
1. ADB Shell 的核心定位
ADB Shell 是 Android Debug Bridge(ADB)工具中的一个子功能,允许开发者通过命令行直接访问安卓设备或模拟器的 Shell 环境。简单来说,它就像一个「远程控制台」,可以执行 Linux 命令、操作文件系统、查看系统日志,甚至直接与应用进程交互。
形象比喻:
想象你有一台安卓手机,ADB Shell 就像是给手机装了一个「后门」,让你能像操作电脑一样,通过键盘输入指令,直接「钻进」手机内部查看或修改内容。
2. ADB Shell 的工作原理
ADB Shell 的通信流程如下:
- 连接设备:通过 USB 或 Wi-Fi 与安卓设备建立网络连接。
- 命令传输:在开发者电脑的终端(如 Terminal、CMD)输入命令。
- 执行与反馈:命令通过 ADB 服务转发到设备,设备执行后将结果返回给开发者。
关键前提:
- 设备需开启「开发者选项」和「USB 调试模式」。
- 确保电脑已安装 Android SDK 并配置好环境变量。
三、快速上手:从连接设备到基础命令
1. 安装与环境配置
步骤 1:安装 Android SDK
- 下载 Android Studio,安装时勾选「SDK Tools」中的「Android SDK Platform-Tools」。
- 将
platform-tools
文件夹路径添加到系统环境变量。
步骤 2:验证安装
打开终端输入:
adb version
若输出版本信息(如 Android Debug Bridge version 1.0.41
),则安装成功。
2. 连接设备
通过 USB 连接设备后,执行:
adb devices
成功连接时,设备序列号会显示为 device
。
3. 进入 Shell 环境
输入以下命令即可直接进入设备的 Shell:
adb shell
此时终端提示符会变为 shell@device:/ $
,表示已进入设备的根目录。
四、核心功能详解:ADB Shell 的高频使用场景
1. 设备管理
查看设备信息
adb shell getprop
该命令会列出设备的所有系统属性,包括品牌、型号、Android 版本等。
重启设备
adb reboot
可指定重启类型,例如 adb reboot recovery
进入恢复模式。
2. 文件操作
文件复制
从设备复制文件到电脑:
adb pull /sdcard/test.txt ./
从电脑推送文件到设备:
adb push local_file.txt /sdcard/
文件系统导航
在 Shell 环境中,可用 cd
切换目录,ls
列出文件。例如:
cd /data/data/com.example.app
ls -l
(注意:访问 /data
目录需设备已 Root)
3. 应用调试
查看已安装应用列表
adb shell pm list packages
若想筛选特定应用(如你的测试包),可组合 grep
:
adb shell pm list packages | grep example
安装与卸载应用
adb install app-release.apk
adb uninstall com.example.app
4. 日志与调试
实时查看日志
adb logcat
通过过滤器缩小范围,例如只看你的应用日志:
adb logcat | grep "YourAppTag"
网络诊断
adb shell netstat
adb shell ping 8.8.8.8
五、进阶技巧:让 ADB Shell 更高效
1. 组合命令与管道符
利用管道符 |
将多个命令串联,例如:
adb shell ps | grep "your_process"
快速定位特定进程的 PID。
2. 脚本化操作
将常用命令保存为 Shell 脚本,例如创建 debug.sh
:
#!/bin/bash
adb logcat -s YourAppTag > log.txt
adb shell dumpsys activity | grep "Recent"
执行时只需 bash debug.sh
。
3. 跨设备操作
若连接多台设备,通过 -s
参数指定设备:
adb -s emulator-5554 shell input tap 100 200
(模拟器点击屏幕坐标)
六、实战案例:用 ADB Shell 解决真实问题
案例 1:应用崩溃后的日志分析
假设你的应用在特定场景下崩溃:
- 触发崩溃:操作设备后立即执行:
adb logcat -d > crash_log.txt
(
-d
表示仅导出缓冲区内容) - 分析日志:搜索
FATAL EXCEPTION
关键词,定位堆栈信息。
案例 2:强制停止顽固进程
若应用无响应,可通过 PID 杀死进程:
adb shell ps | grep your_app_package
adb shell kill <PID>
案例 3:自动化测试脚本
编写脚本模拟用户操作:
adb shell input tap 500 1200
adb shell input text "test@example.com"
七、常见问题与解决方案
1. 设备无法连接
- 问题:
adb devices
显示unauthorized
。 - 解决:在设备上确认 USB 调试授权,或重启设备与 ADB 服务:
adb kill-server && adb start-server
2. 权限不足
- 问题:操作
/data
目录时提示Permission denied
。 - 解决:Root 设备或使用
adb root
(仅限调试设备)。
3. 命令执行缓慢
- 解决:检查 USB 线缆是否支持数据传输,或改用 Wi-Fi 连接:
adb tcpip 5555 adb connect <设备IP>:5555
八、结论:ADB Shell 的未来与扩展
随着安卓生态的演进,ADB Shell 也在持续进化。例如,Android 13 引入了更安全的调试模式,而 ADB over Wi-Fi 的优化则让远程调试更便捷。掌握 ADB Shell 的核心技能,不仅能提升开发效率,更能为探索安卓底层机制打下坚实基础。
无论是定位崩溃、优化性能,还是实现自动化测试,ADB Shell 都是开发者不可或缺的工具。建议读者通过实际项目不断练习,逐步解锁其高级功能,最终成为安卓开发领域的「全才」。
通过本文的学习,您已掌握了从基础命令到实战案例的完整知识体系。接下来,不妨尝试用 ADB Shell 解决一个实际开发中的问题,并在实践中进一步探索它的无限可能。