欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

adb介绍与常用命令

程序员文章站 2022-07-12 17:23:26
...

参考官方文档
adb一种客户端-服务器程序,包括三个组件

  • 客户端:用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令来从命令行终端调用客户端。
  • 守护进程:在设备上运行命令。守护进程在每个设备上作为后台进程运行。
  • 服务器:管理客户端和守护进程之间的通信。服务器在开发机器上作为后台进程运行。
    工作原理
    当您启动某个 adb 客户端时,客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它将启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。

然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护进程 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推

如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。

服务器与所有设备均建立连接后,您便可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此您可以从任意客户端(或从某个脚本)控制任意设备。
连接设备

  • 在设备上启用adb调试
  • 通过WLAN连接到设备
设置目标设备以监听端口 5555 上的 TCP/IP 连接
adb tcpip 5555
通过 IP 地址连接到设备
adb connect device_ip_address

查询设备

生成已连接设备的列表
adb devices -l

***+状态+设备详细信息
状态

  • offline:设备未连接到 adb 或没有响应。
  • device:设备现已连接到 adb 服务器。请注意,此状态并不表示 Android 系统已完全启动并可正常运行,因为在设备连接到 adb 时系统仍在启动。不过,在启动后,这是设备的正常运行状态。
  • no device:未连接任何设备。
    adb介绍与常用命令
    模拟器未列出
    adb devices 命令的极端命令序列会导致正在运行的模拟器不显示在 adb devices 输出中(即使在您的桌面上可以看到该模拟器)。当满足以下所有条件时,就会发生这种情况:
  1. adb 服务器未在运行,且
  2. 您在使用 emulator 命令时,将 -port 或 -ports 选项的端口值设为 5554 到 5584 之间的奇数,且
  3. 您选择的奇数号端口处于空闲状态,因此可以与指定端口号的端口建立连接,或者该端口处于繁忙状态,模拟器切换到符合第 2 条中要求的另一个端口,且
  4. 启动模拟器后才启动 adb 服务器。
    要避免出现这种情况,一种方法是让模拟器自行选择端口,并且每次运行的模拟器数量不要超过 16 个。另一种方法是始终先启动 adb 服务器,然后再使用 emulator 命令
停止adb服务器
adb kill-server
获取avd名称列表
emulator -list-avds
从命令行启动模拟器
emulator -avd avd_name
adb devices

avd是什么?Android设备管理器创建和配置运行在Android模拟器中的Android虚拟设备,每个AVD都是一个模拟器配置,模拟一个Android物理设备。
emulator命令位于android_sdk/tools目录下
adb介绍与常用命令
emulator command参考文档

将命令发送至特定设备
如果有多个设备正在运行,则当您发出 adb 命令时,必须指定目标设备。为此,请使用 devices 命令获取目标设备的***。获得***后,请结合使用 -s 选项与 adb 命令来指定***。如果您要发出很多 adb 命令,可以将 $ANDROID_SERIAL 环境变量设为包含***。如果您同时使用 -s 和 $ANDROID_SERIAL,则 -s 会替换 $ANDROID_SERIAL。

adb devices
adb -s emulator -5555 install helloWorld.apk

如果有多个可用设备,但只有一个是模拟器,请使用 -e 选项将命令发送至该模拟器。同样,如果有多个设备,但只连接了一个硬件设备,请使用 -d 选项将命令发送至该硬件设备。

设置端口转发

forward命令设置任意端口转发,将对特定主机端口上的请求转发到设备上的其他端口。
adb forward tcp:6100 tcp:7100

将文件复制到设备/从设备复制文件

要从设备复制文件或目录及其子目录,local是本地机器
adb pull remote local
要将文件或目录及其子目录复制到设备,remote是远程设备
adb push local remote

发出adb命令
发出shell命令

adb [-d |-e | -s serial_number] shell shell_command
adb [-d | -e | -s serial_number] shell

要退出交互式 shell,请按 Ctrl + D 键或输入 exit。
adb shell 本身就是一个Linux的shell,可以调用Android内置命令

echo $PATH
ls /system/bin/

adb介绍与常用命令

adb logcat
logcat命令行工具参考文章
Logcat 是一个命令行工具,用于转储系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从您的应用中使用 Log 类写入的消息。

要使用 adb 查看日志输出,请转到您的 SDK platform-tools/ 目录并执行以下命令:
adb logcat

dumpsys命令
dumpsys参考文章
dumpsys比top命令更精确详细

Android的所有服务
dumpsys -l

meminfo

统计内存数据
dumpsys meminfo com.xueqiu.android

查看是否有内存泄露,思路:进入一个界面,再返回上级界面,监控Dalvik Heap的Private Dirty指标是否正常的回落到原来的值
adb介绍与常用命令
cpuinfo

dumpsys cpuinfo

adb介绍与常用命令
测试界面性能–gfxinfo、framestates
如果指定 gfxinfo 服务,输出中会包含录制阶段所发生的动画帧的相关性能信息。还可以包含 framestats 选项,以提供有关最近发生的帧的更加详细的帧时间信息。

dumpsys gfxinfo com.xueqiu.android

检查网络诊断–netstats
检查电池诊断–batterystats

uiautomator–自动化
uiautomator参考文章

执行自动化
adb shell uiautomator runtest
针对当前的ui布局,创建xml配置文件
adb shell uiautomator dump
adb shell "uiautomator dump --compressed && cat /storage/emulated/legacy/window_dump.xml"

uiautomatorviewer 工具提供了一个方便的 GUI,用于扫描和分析当前显示在 Android 设备上的界面组件。您可以使用此工具来检查布局层次结构并查看设备前台可见的界面组件的属性。利用此信息,您可以使用 UI Automator 创建更精细的测试。例如,通过创建与特定可见属性匹配的界面选择器来做到这一点。

uiautomatorviewer 工具位于 /tools/bin 目录中。
可以实现控件定位。

input

输入
text <string> (Default: touchscreen)
keyevent [--longpress] <key code number or name> ... (Default: keyboard)
点击
tap <x> <y> (Default: touchscreen)
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
滚动
press (Default: trackball)
roll <dx> <dy> (Default: trackball)
相关标签: Linux脚本自动化