掌握ADB,让你的Android设备乖乖听话
ADB,全称Android Debug Bridge,是Android SDK中的一个命令行工具。它本质上是一个客户端-服务器程序,建立了电脑与Android设备之间的通信桥梁。
想象一下,ADB就像是连接你的电脑和Android设备的一座神奇桥梁,通过这座桥,你可以直接对设备"发号施令"。它最初由Google在Android 1.0时代推出,经过十余年演进,已从简单的调试工具发展为集设备管理、应用调试、系统控制于一体的全能工具。
ADB的强大之处在于它能打破应用沙箱限制,允许开发机直接操作设备底层资源。它提供统一的命令接口,兼容从手机到智能手表的全系列Android设备,并且支持跨平台操作(Windows/macOS/Linux),保障开发环境一致性。
理解ADB的架构,能帮你更好地使用它:
客户端:运行在开发机上,负责接收用户输入的指令守护进程(daemon):以adbd进程形式运行在Android设备后台,负责执行客户端发送的指令服务器:运行在开发机后台的adb进程,负责管理客户端与设备守护进程的通信当你输入一个ADB命令时,指令会经过"客户端→服务器→守护进程"的流程,最终在设备上执行并将结果返回。这种分层架构支持多客户端同时连接,服务器自动管理设备连接状态,大大提升了操作效率。
要开始使用ADB,首先需要搭建环境:
安装Android SDK Platform Tools: 访问Android官网下载对应系统的Platform Tools(包含ADB工具)解压后将路径添加到系统环境变量(Windows的PATH或macOS/Linux的.bashrc/.zshrc)验证安装:打开终端输入
adb version,显示版本信息即表示安装成功
设备调试模式配置:
开启设备"开发者选项":连续点击系统版本号7次启用"USB调试"选项(Android 11+需额外开启"无线调试"权限)首次连接时,设备会弹出"USB调试授权"窗口,勾选"始终允许此计算机"以避免重复授权
adb devices确认连接状态无线连接:适合需要摆脱线缆束缚的场景,步骤如下:
先用USB连接设备,设置端口:
adb tcpip 5555断开USB,通过IP连接:
adb connect 设备IP:5555验证连接:
adb devices
注意:设备与电脑需在同一局域网,部分设备需开启"无线调试"选项(Android 11+)。
查看设备信息
# 列出所有连接的设备
adb devices
# 显示设备详细信息
adb devices -l
# 查看设备型号和Android版本
adb shell getprop ro.product.model
adb shell getprop ro.build.version.release
# 查看屏幕分辨率
adb shell wm size
# 查看屏幕密度
adb shell wm density
设备连接控制
# 重启ADB服务
adb kill-server
adb start-server
# 重启设备
adb reboot
# 重启到恢复模式
adb reboot recovery
# 无线连接设备
adb connect 192.168.1.100:5555
# 断开无线连接
adb disconnect 192.168.1.100:5555
应用安装与卸载
# 安装应用
adb install app-debug.apk
# 覆盖安装(保留数据)
adb install -r update.apk
# 安装到SD卡
adb install -s large_app.apk
# 卸载应用
adb uninstall com.example.myapp
# 卸载但保留数据
adb uninstall -k com.example.myapp
常用参数说明:
-r:保留数据和缓存文件,用于应用更新
-t:允许安装测试包
-d:允许降级安装(低版本覆盖高版本)
-g:为应用程序授予所有运行时的权限
应用运行控制
# 启动应用组件
adb shell am start -n com.example.myapp/.MainActivity
# 启动带参数的Activity
adb shell am start -n com.example.myapp/.DetailActivity -e "id" "123" -e "name" "test"
# 强制停止应用
adb shell am force-stop com.example.myapp
# 杀死应用进程
adb shell am kill com.example.myapp
# 清除应用数据和缓存
adb shell pm clear com.example.myapp
# 查看应用详细信息
adb shell dumpsys package com.example.myapp
文件传输
# 将文件从电脑复制到设备
adb push localfile.txt /sdcard/
# 将文件从设备复制到电脑
adb pull /sdcard/file.txt .
# 推送整个目录到设备
adb push C:MyData /sdcard/Backup/
# 从设备拉取整个文件夹
adb pull /sdcard/DCIM/Camera/ ./photos/
设备文件操作
# 进入设备的shell环境
adb shell
# 列出目录内容
adb shell ls -l /sdcard
# 在SD卡查找所有jpg文件
adb shell find /sdcard -name "*.jpg"
# 查看文件内容
adb shell cat /system/build.prop
# 删除文件
adb shell rm /sdcard/unwanted.jpg
# 创建新目录
adb shell mkdir /sdcard/MyNewFolder
日志查看
# 实时查看设备日志
adb logcat
# 按时间查看日志并保存到文件
adb logcat -v time > C:UsersadminDesktoplogcat001.txt
# 清除日志缓冲区
adb logcat -c
# 过滤包含特定内容的日志
adb logcat -b all | grep "AndroidRuntime"
# 查看最近100行日志
adb logcat -t 100
屏幕控制
# 截图保存到设备
adb shell screencap -p /sdcard/screenshot.png
# 截图并直接拉取到电脑
adb shell screencap -p /sdcard/223.png | adb pull /sdcard/223.png C:UsersadminDesktop
# 录制屏幕(默认3分钟,Ctrl+C停止)
adb shell screenrecord /sdcard/demo.mp4
# 录屏并拉取到电脑
adb shell screenrecord /sdcard/demo.mp4 && adb pull /sdcard/demo.mp4 ~/Desktop/
系统信息查询
# 查看CPU信息
adb shell cat /proc/cpuinfo
# 查看内存信息
adb shell cat /proc/meminfo
# 查看电池状态
adb shell dumpsys battery
# 查看内存使用情况
adb shell dumpsys meminfo
# 查看磁盘空间
adb shell df -h
# 查看进程信息
adb shell ps
adb shell top
模拟用户操作
# 模拟按键(4=返回键,26=电源键)
adb shell input keyevent 4
# 模拟点击屏幕坐标
adb shell input tap 500 800
# 模拟滑动操作
adb shell input swipe 900 1000 300 1000 500
# 模拟输入文本
adb shell input text "hello"
# 安装测试应用
adb install app-debug.apk
# 启动应用
adb shell am start -n com.example.myapp/.MainActivity
# 执行Monkey测试(随机生成100个事件)
adb shell monkey -p com.example.myapp -v 100
# 获取当前Activity(判断应用是否正常启动)
adb shell "dumpsys window | grep mCurrentFocus"
# 强制停止应用
adb shell am force-stop com.example.myapp
# 清除旧日志
adb logcat -c
# 开始抓取日志(按时间戳)
adb logcat -v time > app_log.txt
# 在另一个终端重现问题,然后Ctrl+C停止日志抓取
# 分析特定标签的日志
adb logcat -s YourAppTag
# 查看系统错误日志
adb logcat -b system
# 列出所有应用包名
adb shell pm list packages
# 只列第三方应用
adb shell pm list packages -3
# 批量卸载测试应用(结合grep过滤)
adb shell pm list packages | grep "test" | while read line; do
pkg=${line#*:}
adb uninstall $pkg
done
# 批量安装目录下所有APK
for apk in *.apk; do
adb install "$apk"
done
# 查看系统属性
adb shell getprop
# 监控内存变化(结合具体应用)
adb shell dumpsys meminfo com.example.myapp
# 查看CPU使用情况
adb shell top -n 1
# 监控电池状态和温度
adb shell dumpsys battery
# 查看网络连接状态
adb shell netstat
Android 11及以上版本提供了更便捷的无线调试方法:
在设备上开启"开发者选项"和"无线调试"选择"使用配对码配对设备"在电脑上执行:
adb pair IP:端口,然后输入配对码配对成功后,使用
adb connect IP:端口连接
这种方法无需初始USB连接,真正实现了无线调试。
当连接多个设备时,需要使用-s参数指定设备:
# 列出所有设备
adb devices
# 指定设备序列号执行命令
adb -s 设备序列号 install app.apk
# 为不同设备执行不同操作
for device in $(adb devices | grep -v List | awk '{print $1}'); do
echo "Processing device: $device"
adb -s $device install app.apk
done
ADB功能强大,但也需要注意安全:
调试授权机制:首次连接新设备时必须通过设备端确认,防止未授权计算机访问设备权限分级:普通ADB指令受限于设备用户权限,敏感操作(如修改系统文件)需root权限无线调试加密:Android 11+的无线调试采用配对码验证,避免局域网内的恶意连接生产环境谨慎使用:在生产环境或真实用户设备上谨慎使用ADB,避免数据泄露或系统不稳定ADB命令是Android开发者的瑞士军刀,熟练掌握它能极大提升开发、测试和调试效率。从基本的设备管理和应用安装,到高级的日志分析和性能监控,ADB几乎能完成所有与Android设备相关的任务。
刚开始学习时,可能会觉得命令太多难以记忆,建议从最常用的命令开始(如
adb devices、
adb install、
adb logcat),逐步扩展你的命令库。在实际项目中遇到问题时,思考一下"能不能用ADB解决",然后查阅相关资料,这样学习效果最佳。
ADB的深入学习没有终点,随着Android系统的更新,新的ADB功能和命令也在不断出现。保持好奇心和实践精神,你会发现ADB这个"超级英雄工具包"能帮你解决越来越多意想不到的问题。
现在,打开终端,输入
adb devices,开始你的ADB探索之旅吧!
本文仅涵盖了ADB命令的一部分功能,更多高级用法和技巧等待你在实际使用中探索。记住,最好的学习方式就是实践——动手试一试,让你的Android设备乖乖听话!