1、简介
adb全称(Android Debug Bridge),它是一个通用命令行工具,它可以做为Android与PC端连接的一个桥梁,所以adb又称为Android调试桥,用户可以通过adb在电脑上对Android设备进行全面操作,比如安装和调试应用,操作文件的传输等。
2、主要功能
- 在设备上运行shell
- 管理模拟器或设备的端口映射
- 在计算机与设备之间拷贝推送文件
- 安装,卸载apk,查看设备信息
3、运行架构
- adb client(客户端):client实际上就是shell控制台,通过Client发送命令给server。发送命令时,首先检测PC上有没有启动Server,如果没有Server,则自动启动一个Server,然后将命令发送到Server,并不关心命令发送过去以后会怎样。
- adb server(服务器):server是运行在主机上的一个后台进程,作用是检测USB端口何时连接或者移除设备,server还将adb client的请求通过USB或者TCP的发送发送到adbd上。
- adb demon(守护进程):运行在Android设备上的一个进程,作用是通过USB或者TCP连接到adb server,并且为运行在主机上的adb client提供一些服务。
4、工作原理
首先用户启动一个adb客户端时,此客户端先检查是否存在已运行的adb服务器进程。如果没有,它将启动一个服务器进程,当服务器进程启动时,adb服务器就会绑定本地的TCP端口5037并监听adb客户端发来的命令,使用的adb客户端都使用端口5037与adb服务器进行对话的。接着服务器将所有运行中的模拟器或设备实例进行连接。它通过扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备。一旦服务器找到了adb守护程序,将建立一个到该端口的连接。
客户端发送的命令分为三种:
- 不需要经过server处理就能成功的,如:adb version、adb help。
- 需要和server进行通讯,但不需要和demo通讯的命令,如:adb devices。
- 需要和demo进行处理的命令。
5、设备连接管理
5.1、查询已连接设备/模拟器
adb devices
输出状态:
- offline:表示设备未连接成功或无响应。
- device:设备已连接,
- no device:没有设备/模拟器连接
5.2、USB连接
- 保证android设备处于正常开机状态。
- android设备的开发者选项和USB调试模式已开启。
- 设备驱动状态正常。
- 通过USB连接好电脑和设备后使用adb devices确认状态
5.3、无线连接(需要借助USB)
- 将android设备与运行adb的电脑连接在同一个区域网。
- 让设备在5555端口监听TCP/IP连接:adb tcpip 5555
- 找到设备的IP地址
- 通过IP地址连接设备:adb connect ip:5555
- 确认连接状态
5.4、无线连接(不需要借助USB)
- 在android设备上安装一个终端模拟器。终端模拟器下载地址:https://jackpal.github.io/Android-Terminal-Emulator/
- 将android设备与运行adb的电脑连接在同一个区域网。
- 打开android设备上的终端模拟器,在里面依次输入命令:
su
setprop service.adb.tcp.port 5555
- 找到设备的IP地址
- 在电脑上通过adb和IP地址连接android设备:adb connect ip:5555
6、adb命令
6.1、adb服务命令
查看adb版本:adb version
以root权限运行adb服务:adb root
关闭adb服务:adb kill-server
开启adb服务:adb start-server
指定adb-server运行端口(默认端口5037):adb -P 端口 adb-server
6.2、应用管理命令
6.2.1、安装APK
adb install apk包名
常用参数:
参数 | 说明 |
---|---|
-r | 覆盖安装(保留数据) |
-d | 降级覆盖安装 |
-g | 赋予所有运行时权限 |
-l | 将应用安装到保护目录/mnt/asec |
-s | 将应用安装到sdcard目录 |
adb install安装原理过程:
- push apk文件到/data/local/tmp
- 调用pm install安装
- 删除/data/local/tmp下的对应apk
6.2.2、卸载apk
adb uninstall apk包名
常用参数:
参数 | 说明 |
---|---|
-k | 卸载应用时保留数据和缓存目录 |
6.2.3、清除应用数据和缓存
adb shell pm clear apk包名
6.2.4、查看设备中已安装apk包
adb shell pm list apk包
常用参数:
参数 | 说明 |
---|---|
-f | 查看关联文件 |
-3 | 查看第三方应用 |
-s | 查看系统应用 |
-d | 查看disabled package |
-e | 查看enable package |
-i | 查看package对应的安装者 |
-u | 查看被卸载过的package |
6.2.5、查看应用包详细信息
adb shell dumpsys package apk包名
6.2.6、获取当前正在运行的activity(活动)
adb shell dumpsys activity | grep "mFoc"
adb shell dumpsys window | findstr mCurrentFocus
6.2.7、查看正在运行的services
adb shell dumpsys activity services
6.2.7、强制暂停应用
adb shell am force-stop packagename
6.3、文件管理命令
6.3.1、导出设备文件到电脑
adb pull <设备文件路径> [电脑存储路径]
6.3.2、导入电脑文件到设备
adb push <电脑文件路径> [设备存储路径]
6.4、日志管理命令
Android系统的日志分为两部分:底层的Linux内核日志输出到/proc/kmsg, Android日志输出到/dev/log。Android的Log等级通常有六类,按照日志级别由低到高分别是:Verbose、Debug、Info、Warning、Error、Assert。
6.4.1、查看日志
adb logcat
常用参数:
参数 | 日志格式 |
---|---|
-v | brief |
-v | process |
-v | tag |
-v | raw |
-v | time |
-v | threadtime |
-v | long |
6.4.2、清空日志
adb logcat -c
6.4.3、查看内核日志
adb shell dmesg
6.4.4、收集日志数据,用于后续分析
adb bugreport
6.5、查看设备系统信息命令
6.5.1、查看android系统版本
adb shell getprop ro.build.version.release
6.5.2、查看设备内存占用
adb shell dumpsys meminfo apk包
6.5.3、查看设备CPU
adb shell dumpsys cpuinfo
6.5.4、查看gpu绘制分析
adb shell dumpsys gfxinfo apk包
6.5.5、查看设备进程
adb shell ps
6.5.6、查看实时资源占用
adb shell top
6.5.7、查看设备电池信息
adb shell dumpsys battery
6.5.8、查看电源管理信息
adb shell dumpsys pwer
获取屏幕锁屏数据:
adb shell dumpsys power | grep "mScreenOffTimeoutSetting"
adb shell dumpsys power | findstr "mScreenOffTimeoutSetting"(windows)
6.5.9、查看设备型号
adb shell getprop ro.product.model
6.5.10、查看屏幕分辨率
adb shell wm size
6.5.11、查看屏幕密度
adb shell wm density
6.5.12、查看显示屏参数
adb shell dumpsys window displays
6.5.13、查看android版本
adb shell getprop ro.build.version.release
6.5.14、查看android_id
adb shell settings get secure android_id
6.5.15、获取android系统各个分区相关信息
adb shell df
6.5.16、获取android系统当前状态相关信息
adb shell dumpystate
6.5.17、获取设备序列号
adb get-serialno
6.5.18、查看模拟器/设备当前状态
adb get-state
6.5.19、查看系统通知
adb shell dumpsys notification
6.5.20、查看无线网信息
adb shell dumpsys WiFi | more
6.5.21、查看电话相关信息
adb shell dumpsys telephony.registry
相关内容含义:
名称 | 说明 |
---|---|
mCallState | 表示呼叫状态。0表示待机状态;1-表示来电未接听状态;2-表示电话占线。 |
mCallIncomingNumber | 表示最近一次来电的电话号码 |
mServiceState | 表示服务的状态;0-表示正常使用状态;1-表示电话没有连接到任何网络;2-表示电话只能拨打紧急呼叫号码;3-表示电话已关机。 |
mSignalStrength | 表示信号强度信息。 |
mMessageWaiting | 表示是否在等待无线电消息。 |
mCallForwarding | 表示是否启用呼叫转移。 |
mDataActivity | 表示无线数据通信情况。 0-表示没有通话; 1-表示正在接收IP PPP信号; 2-表示正在发生IP PPP信号; 3-表示正在发送和接收IP PPP信号。 |
mDataConnectionState | 表示无线数据连接情况; 0-表示无数据连接; 1-正在创建数据连接; 2-表示已连接; 3-表示挂起状态,已创建好连接,但是IP数据通信暂时无法使用。 |
mDataConnectionPossible | 表示是否有数据连接。 |
mDataConnectionReason | 表示数据连接的原因。 |
mDataConnectionLinkProperties | 表示数据连接的链路属性。 |
mDataConnectionNetworkCapabilities | 表示数据链路连接的能力。 |
mCellLocation | 表示基站相关信息。 |
6.5.22、获取手机运营商信息
adb shell getprop gsm.operator.alpha
6.5.23、获取手机网络类型信息
adb shell getprop gsm.network.type
6.6、自动化工具input命令
adb shell input <参数>
参数 | 说明 |
---|---|
tap x y | 点击屏幕 |
keyevent 3 | HOME键 |
keyevent 4 | 返回键 |
keyevent 5 | 打开拨号应用 |
keyevent 24 | 增加音量 |
keyevent 25 | 降低音量 |
keyevent 26 | 电源键 |
keyevent 27 | 拍照(需要在相机应用里) |
keyevent 64 | 打开浏览器 |
keyevent 82 | 菜单键 |
keyevent 85 | 播放/暂停键 |
keyevent 86 | 停止播放 |
keyevent 87 | 播放下一首 |
keyevent 88 | 播放上一首 |
keyevent 122 | 移动光标到行首或列表顶部 |
keyevent 123 | 移动光标到行末或列表底部 |
keyevent 126 | 恢复播放 |
keyevent 127 | 暂停播放 |
keyevent 164 | 静音 |
keyevent 176 | 打开系统设置 |
keyevent 187 | 切换应用 |
keyevent 207 | 打开联系人 |
keyevent 208 | 打开日历 |
keyevent 209 | 打开音乐 |
keyevent 210 | 打开计算器 |
keyevent 220 | 降低屏幕亮度 |
keyevent 221 | 提高屏幕亮度 |
keyevent 223 | 系统休眠 |
keyevent 224 | 点亮屏幕 |
keyevent 231 | 打开语音助手 |
text |
输入文本 |