ADB是什么
adb(全称Android Debug Bridge):Android调试桥梁。用来协助相关人员更快更好的调试apk,adb具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能。
Mac安装adb 1、安装homebrew:ruby -e "$(curl -fsSL raw.githubusercontent.com/Homebrew/in…)"
2、安装adb:brew install android-platform-tools --cask
3、运行adb: adb devices
ADB架构
ADB是一个C/S架构的应用程序,由三部分组成:
- 运行在pc端的adb client:
命令行程序"adb"用于从shell或脚本中运行adb命令。首先,"adb"程序尝试定位主机上的ADB服务器,如果找不到adb服务器,"adb"程序自动启动一个ADB服务器。接下来,当设备的adbd和pc端的ADB server建立连接后,adb client就可以向ADB server发送服务请求; - 运行在pc端的adb server:
ADB Server是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADB Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上; - 运行在设备端的常驻进程adb demon(adbd):
程序"adbd"作为一个后台进程在Android设备或者模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务;
ADB基本用法
adb能做什么? 答案是所有能对手机的操作都能用adb实现。
adb命令的基本语法如下: adb [-d|-e|-s ]
单一设备/模拟器连接
如果只有一个设备/模拟器连接时,可以省略掉[-d|-e|-s ] 这一部分,直接使用adb
多个设备/模拟器连接
如果有多个设备/模拟器连接,则需要为命令指定目标设备,下表是指定目标设备的命令选项:
| 参数 | 含义 |
|---|---|
| -d | 指定当前唯一通过USB连接的Android设备为命令目标 |
| -e | 指定当前唯一运行的模拟器为命令目标 |
| -s | 指定相应设备序列号的设备/模拟器为命令目标 |
adb shell
Android的内核本身就是Linux,所以Android本身也支持Linux命令。 在手机中执行Shell命令,每次都加上adb shell来进行命令的发送和执行。
Android性能统计dumpsys
| 用途 | 命令 | |
|---|---|---|
| 获取所有的dumpsys子命令 | dumpsys | grep -i DUMP |
| 获取当前activity | adb shell dumpsys activity top | |
| 获取activities的记录,可以获取到appium依赖的原始activity | dumpsys activity activities | |
| 获取特定包基本信息 | adb shell dumpsys package XXX | |
| 获取系统通知 | adb shell dumpsys notification | |
| 获取内存信息 | adb shell dumpsys meminfo com.android.settings | |
| 获取cpu信息 | adb shell dumpsys cpuinfo | |
| 获取gpu绘制分析 | adb shell dumpsys gfxinfo com.android.settings | |
| 获取短信 | adb shell dumpsys activity broadcasts | grep senderName= |
uiautomator
- adb shell uiautomator runtest ...
- adb shell uiautomator dump
adb常用命令
| 用途 | 命令 |
|---|---|
| 查看adb的版本信息 | adb version |
| 启动adb服务 | adb start-server |
| 停止adb服务 | adb kill-server |
| 查询已连接的设备/模拟器列表 | adb devices |
| 指定adb server的网络端口 | adb -P start-server,adb的默认端口为:5037 |
| 以root权限运行adbd | adb root |
Activity Manager
| 用途 | 命令(am是activity manager的缩写) |
|---|---|
| 获得应用的启动时间 | adb shell am start -W<package_name>/.<activity_class_name> |
| 启动activity | adb shell am start -n<package_name>/.<activity_class_name> |
| 杀掉APP | adb shell am force-stop <package_name> |
| 启动时要执行的动作 | adb shell am -a <ACTION> |
eg:
adb shell am start -a android.intent.action.VIEW -d url 跳转至指定url
adb shell am start -a android.intent.action.CALL -d tel:10086 拨打电话10086
Process status
| 用途 | 命令(ps是process status的缩写) |
|---|---|
| 查看进程的状态(grep筛选某个进程) | adb shell ps|grep XXX |
dump
| 用途 | 命令 | |
|---|---|---|
| 查看版本号 | adb shell dumpsys package com.youxiang.soyoungapp | findstr versionName |
| 获取系统数据 | adb shell dumpsys |
Package Manager
| 用途 | 命令 |
|---|---|
| 安装应用 | adb install |
| 直接安装应用 | adb install test.apk |
| 覆盖安装 | adb install -r test.apk |
| 卸载应用 | adb uninstall |
| 直接卸载 | adb uninstall test.apk |
| 保留数据卸载 | adb uninstall -k test.apk |
| 打印apk路径 | adb shell pm path |
| 清除应用缓存 | adb shell pm clear |
| 查看设备安装列表 | adb shell pm list packages |
File Manager
| 用途 | 命令 |
|---|---|
| 从Android设备下载文件到pc | adb pull [local] adb pull /sdcard/test.png c:\user |
| 把pc文件放到Android设备 | adb push |
| 列出目录内容 | adb shell ls [option] |
| 进入文件夹 | adb shell cd |
| 删除文件或目录 | adb shell rm [options] |
| 创建文件夹 | adb shell mkdir[options] |
| 复制文件 | adb shell cp [options] |
| 移动或者更名文件 | adb shell mv [options] |
| 让Android脱离USB线的TCP连接方式 | adb tcpip |
| 连接开启了TCP连接方式的手机 | adb connect |
| Android日志查看 | adb logcat |
| 收集日志数据,用于后续的分析,比如耗电量 | adb bugreport |
Logcat
| 用途 | 命令 |
|---|---|
| 打印日志文件 | adb logcat [options] [filter-specs] |
Screenshot
| 用途 | 命令 |
|---|---|
| 截图保存为test.png | adb shell screencap /sdcard/test.png |
| 录屏保存为test.mp4 | adb shell screencord /sdcard/test.mp4 |
设备管理连接
USB 连接
通过 USB 连接来正常使用 adb 需要以下步骤:
- 确认硬件状态正常(包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好)。
- Android 设备的开发者选项和 USB 调试模式已开启(可以在「设置」-「开发者选项」-「USB调试」打开USB调试)。
- 确认设备驱动状态正常(安装ADB驱动程序)。
- 通过 USB 线连接好电脑和设备后确认状态。
- 通过 adb devices 命令查看设备连接情况。
WLAN 连接(需要 USB 线)
借助 USB 通过 WiFi 连接来正常使用 adb 需要以下步骤:
- 将 Android 设备与要运行 adb 的电脑连接到同一个 WiFi。
- 将设备与电脑通过 USB 线连接(可通过 adb devices 命令查看设备连接情况)。
- 通过 adb tcpip 5555 命令让设备在 5555 端口监听 TCP/IP 连接。
- 断开 USB 连接。
- 找到设备的 IP 地址(可以在「设置」-「关于手机」-「状态信息」-「IP地址」查看 IP 地址)。
- 通过 adb connect 命令使用 IP 地址将 Android 设备与电脑连接。
- 通过 adb devices 命令查看设备连接情况。
- 使用完毕后可通过 adb disconnect 命令断开无线连接。
WLAN 连接(无需借助 USB 线)
注:需要 root 权限。不借助 USB 通过 WiFi 连接来正常使用 adb 需要以下步骤:
- 在 Android 设备上安装一个终端模拟器(可通过Terminal Emulator for Android Downloads下载)。
- 将 Android 设备与要运行 adb 的电脑连接到同一个 WiFi。
- 打开 Android 设备上的终端模拟器,在里面依次运行命令:
su
setprop service.adb.tcp.port 5555
- 找到设备的 IP 地址(可以在「设置」-「关于手机」-「状态信息」-「IP地址」查看 IP 地址)。
- 通过 adb connect 命令使用 IP 地址将 Android 设备与电脑连接。
- 通过 adb devices 命令查看设备连接情况。
WiFi 连接转为 USB 连接
通过adb usb命令以USB模式重新启动ADB:
adb usb