ADB
工作原理
当启动某个
adb
客户端时,该客户端会先检查是否有adb
服务器正在运行,如果没有
则启动服务器进程
。服务器会在启动后与本地TCP端口5037
绑定,并监听adb
客户端 发出的命令。服务器会与所有
正在运行
的设备建立连接,通过扫描5555 - 5585
之间(该范围提供16个模拟器
使用) 的奇数号端口
查找模拟器,服务器一旦发现adb
守护程序,便会与对应的端口建立连接
。
Client
本质上就是shell
,用来发送命令
给Server
,默认5037 端口.
ADB Server
:运行在PC
上的后台程序,目的是检测USB接口
何时连接
或者移除设备
.ADB Daemon
: 程序adbd
作为一个后台进程
在Android 设备或模拟器系统中运行。其目的是连接ADB服务器
,为运行在主机上的客户端提供一些服务.
命令详解
基础命令
adb version # 查看adb的版本adb help # 查看adb支持的所有命令adb devices # 查看当前连接的设备,已连接的设备会显示adb get-serialno # 获取设备号adb root # 获取 Android管理员 root 用户权限adb shell # 登录设备shell ,该命令将登录设备的shell,登录shell后,可以使用cd ls rm等linux命令
建立连接
adb -d # 如果同时连接了 usb 又开了模拟器,连接当前唯一通过usb连接的安卓设备
adb -e shell # 指定当前连接此电脑的唯一的一个模拟器
adb -s <设备号> shell # 当电脑插入多台 手机或模拟器时,指定一个设备号进行连接
exit # 退出
adb kill-server # 杀死当前adb服务,如果连不上设备时,杀掉重启
adb start-server # 杀掉后重启# 5037 :adb 默认端口,如果该端口被占用,
adb -p 6666 start-server # 指定一个adb shell的端口
packages
adb shell pm list packages #列出当前设备/手机 ,所有的报名adb shell pm list packages -f # 显示包和包相关联的文件(安装路径)adb shell pm list packages -d # 显示禁用的包名
adb shell pm list packages -e # 显示当前启用的包名
adb shell pm list packages -s # 显示系统应用包名
adb shell pm list packages -3 # 显示已安装第三方的包名
adb shell pm list packages xxxx # 加需要过滤的包名,如:xxx = taobao
apk
操作
# 安装应用程序 apk 到手机当中
adb install <文件路径.apk> # 将本地的apk软件安装到设备(手机上) 如手机外部安装需要密码,需输入密码adb install -r <文件路径.apk> # 覆盖安装# 允许 降级覆盖安装
adb install -d <文件路径.apk>
# 授权/获取权限,安装软件时把所有权限都打开
adb install -g <文件路径.apk>
# 卸载apl
adb uninstall <包名>
# 如果获取包名 可以通过 adb shell pm list packages
adb shell pm uninstall -k <包名> # 虽然把此应用卸载,当仍然保留此应用的数据和婚车
adb shell am force-stop <包名> # 强制退出该应用/app
文件操作指令
# 将本地PC的文件或文件夹 复制到 手机设备
adb push <本地路径\文件或文件夹> <手机路径>
adb push G:\music\ /storage/emulated/0/Music/QQMusic# 把设备(手机)的文件或文件夹复制到本地
adb pull <手机路径\文件或文件夹> <pc机路径>adb pull /storage/emulated/0/Music/QQMusic G:\music\adb pull /data/user_de/0/com.android.shell/files/bugreports/bugreport-meizu_21_CN-UKQ1.230917.001-2024-12-31-18-54-35.zip G:\music\
数据备份与恢复
adb backup -all
日志操作
系统操作指令
adb shell getprop ro.product.model # 获取设备型号
adb shell getprop ro.build.version.release # 获取Android系统版本
adb get-serialno # 获取设备的序列号
adb shell wm size #获取设备屏幕分辨率adb shell screencap -p /storage/emulated/0/Music/1.png # 屏幕截图
# Android 5之后 可以字节使用adb exec-out 命令将文件保存到PC
adb exec-out screencap -p > D:\test.png # 获取前台应用程序包名 ??? 暂时 没有获取 到
adb shell dumpsys activity | find "mResumedActivity" # 获取手机内存信息
adb shell cat /proc/meminfo# 获取手机存储信息
adb shell df
打开浏览器
# 使用系统浏览器 打开网页
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com
模拟键盘
adb shell input keyevent 3 # 按下HOME 键
adb shell input keyevent 4 # 按下返回键adb shell input keyevent 26 # 按下电源键
adb shell input keyevent 82 # 按下菜单键adb shell input keyevent 223 # 熄灭屏幕
adb shell input keyevent 224 # 点亮屏幕adb shell input keyevent 67 # 删除
文本框输入
adb shell input text "yu"
点击
adb shell input tap 458 573 # 根据坐标点击
滑动
adb shell input swipe 550 1200 550 375 # 滑动解锁
adb shell input swipe 700 200 100 200 # 左翻页
adb shell input swipe 100 200 1000 200 # 右翻页
录制屏幕
adb shell screenrecord /sdcard/filename22.mp4
adb pull /sdcard/filename22.mp4
adb shell rm /sdcard/filename22.mp4adb shell screenrecord --time-limit 10 /sdcard/demo.mp4
adb shell screenrecord --size 1280*720 /sdcard/demo.mp4
adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4
联网
adb shell svc wifi enable # 打开WIFI
adb shell svc wifi disable # 关闭 WIFI# 查看连结果的WIFI密码
adb shell cat /data/misc/wifi/*.conf# 开启飞行模式
adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true# 关闭飞行模型adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false
svc 命令
# 控制USB插入时 屏幕常亮
svc power stayon [true|false|usb|ac]
# 关闭 或开启数据连接
svc data [enable|disable]# 关闭 与 打开 WIFI
svc wifi [enable|disable]
# 打开 与 关闭 nfc
svc nfc [enable|disable]
# 打开与关闭蓝牙设备
svc bluetooth [enable|disable]
# 控制 开关机
# 重启
svc power reboot
# 关机
svc power shutdown
# 设置挂起
svc power forcesuspend
重启指令
重启设备
:adb reboot
- 重启到
Recovery
模式 :adb reboot recovery
- 重启到
Bootloader
模式 :adb reboot bootloader
参考资料
解析
adb shell svc
源码