首页/新闻资讯/正文详情

Airtest Android 设备连接与自动化实战指南:连接方式、特殊参数与手势录屏全解析

发布时间:2026/9/25 14:06:02 来源:云帆数科 栏目:资讯中心
Airtest Android 设备连接与自动化实战指南:连接方式、特殊参数与手势录屏全解析
测试质量保障计算机视觉【免费下载链接】AirtestUI Automation Framework for Games and Apps项目地址https://gitcode.com/gh_mirrors/ai/Airtest点击查看免费下载本指南面向希望将 Android 真机或模拟器接入 Airtest 自动化框架的开发者完整覆盖从 ADB 设备连通性验证、Android://连接串的编写与解析、模拟器与特殊设备参数调优到代码级接口调用、自定义多指手势与运行中录屏的实战方法。读完本文你可以独立完成 Android 设备的接入、调试与复杂手势脚本的编写。Android 手机连接的基本流程不借助 AirtestIDE、纯代码/命令行使用 Airtest 连接 Android 手机时需要依次完成以下三步在手机上打开开发者选项并允许USB 调试部分机型需连续点击“关于手机”中的版本号数次才能开启开发者选项。使用 USB 连接手机后通过adb devices命令确认设备已被识别参见下文 使用 ADB 验证手机连接。在代码和命令行中用手机序列号serialno连接手机参见下文 在代码中使用手机。如果使用 AirtestIDE 进行连接界面操作流程可参考官方 IDE 文档本文不再赘述。使用 ADB 验证手机连接adb是 Google 官方的 Android 命令行调试工具用于与设备进行通信。Airtest 已在仓库的airtest/core/android/static/adb目录下按平台预置了adb可执行文件无需额外下载即可直接使用。从源码airtest/core/android/constant.py可以看到各平台默认路径的映射平台预置 adb 路径Windowsairtest/core/android/static/adb/windows/adb.exemacOS (Darwin)airtest/core/android/static/adb/mac/adbLinuxairtest/core/android/static/adb/linux/adbLinux ARMairtest/core/android/static/adb/linux_arm/adb以 Windows 为例进入airtest\airtest\core\android\static\adb\windows目录可在资源管理器中shift右键打开命令行终端执行adb devicesE:\airtest\airtest\core\android\static\adb\windowsadb devices List of devices attached c2b1c2a7 device eba17551 device 127.0.0.1:10033 devicemacOS 下则进入airtest/core/android/static/adb/mac目录后执行./adb devices如果提示adb没有执行权限可以先运行chmod x adb赋予可执行权限仓库源码 airtest/utils/snippet.py 中的make_file_executable也实现了同样的自动授权逻辑。输出解读与常见处理上例中当前连接了 3 台 Android 设备状态均为device说明设备正常在线如果设备状态是UNAUTHORIZED请在手机弹出的“允许 USB 调试”对话框中点击确定如果完全看不到设备名可能需要先在 PC 上安装对应手机厂商的官方驱动。手机连接出现问题时怎么办不同手机厂商与机型差异较大连接过程中可能遇到各种问题如驱动缺失、调试授权、端口占用等官方整理了一份 Android 连接常见问题Android connection FAQ清单建议优先查阅该文档对照排查。在代码中使用手机确认手机连接成功后可以在adb devices的输出中看到设备的序列号。例如 adb devices List of devices attached c2b1c2a7 device上例中的c2b1c2a7就是手机的设备序列号serialno。Airtest 用如下格式字符串定义一个 Android 设备Android://adbhost:adbport/serialno其中各字段含义如下字段含义默认值adbhostadb Server 所在主机的 IPlocalhost/127.0.0.1adbportadb Server 的端口5037serialnoAndroid 手机的序列号无留空则自动选择第一台设备从源码airtest/utils/snippet.py可以确认该 URI 的解析逻辑urlparse取出 scheme 作为平台、netloc 中的 host:port 作为host参数、path 部分作为uuidquery 部分则通过parse_qsl转换为连接参数。因此Android://串本质上是把平台、序列号和额外参数编码在了一个 URL 里。几个典型示例# 什么都不填默认使用当前连接的第一台手机 Android:/// # 使用默认端口连接序列号为 c2b1c2a7 的本机手机 Android://127.0.0.1:5037/c2b1c2a7 # 通过本机 ADB 连接远程设备注意 10.254.60.1:5555 实际是序列号 Android://127.0.0.1:5037/10.254.60.1:5555通过Android:///字符串连接手机在命令行运行脚本时可以用--device Android:///指定脚本运行的目标设备。注意--device参数支持多次追加源码 airtest/cli/parser.py 中定义为actionappend因此可同时指定多台设备airtest run untitled.air --device Android:/// 手机序列号 --log log/在代码中连接手机则使用connect_device接口from airtest.core.api import * connect_device(Android:///手机序列号)connect_device的内部实现airtest/core/api.py是先调用parse_device_uri解析 URI再通过init_device创建设备实例并注册为当前设备返回设备对象。命令行与代码两种方式二选一即可满足日常连接需求。一些特殊参数部分特殊设备如某些模拟器连接后可能出现黑屏此时可以追加cap_methodJAVACAP参数强制将截屏方式切换为JAVACAP# 连接模拟器并勾选“Use Javacap”模式 Android://127.0.0.1:5037/127.0.0.1:7555?cap_methodJAVACAP此外还有两个常用参数ori_methodADBORI指定设备屏幕的旋转方式touch_methodADBTOUCH指定使用 ADB 指令模拟点击。这三类方法在源码中都有明确枚举定义airtest/core/android/constant.py截屏方式包含MINICAP、ADBCAP、JAVACAP点击方式包含MINITOUCH、MAXTOUCH、ADBTOUCH旋转方式包含ADBORI、MINICAPORI。默认情况下无需手动指定这些参数只有当某些特殊 Android 设备如特定型号的平板无法用默认参数连接时才需要追加# 勾选所有选项连接设备用 连接多个参数串 Android://127.0.0.1:5037/79d03fa?cap_methodJAVACAPori_methodADBORItouch_methodADBTOUCH注意命令行中若出现^|等特殊字符可能需要转义才能生效。例如连接串中需要书写时Windows 下要改写成^^用^转义macOS 下要加\转义# Windows 下直接写 --device Android://127.0.0.1:5037/79d03fa?cap_methodJAVACAPori_methodADBORI 不可用 --device Android://127.0.0.1:5037/79d03fa?cap_methodJAVACAP^^ori_methodADBORI # Windows 命令行加 ^ 转义 --device Android://127.0.0.1:5037/79d03fa?cap_methodJAVACAP\\ori_methodADBORI # MAC 命令行加 \ 转义Android 接口调用airtest.core.api中定义的所有跨平台接口都可以在 Android 平台上直接调用例如from airtest.core.api import * touch((100, 200)) # 启动一个应用 start_app(org.cocos2d.blackjack) # 传入一个按键响应 keyevent(BACK)Android 设备接口除了airtest.core.api提供的跨平台接口外Android 设备对象还内置了很多平台专属接口可以参考airtest.core.android.Android模块的文档。典型的调用方式如下dev device() # 获取当前设备的 Android 对象 print(dev.get_display_info()) # 查看当前设备的显示信息 print(dev.list_app()) # 打印当前已安装的应用列表device()返回的是当前激活设备源码 airtest/core/api.py 中直接返回G.DEVICE配合多设备时还可以用set_current(idx)切换当前设备支持设备索引或序列号见 airtest/core/api.py。ADB 指令调用借助 Android 设备接口可以这样调用 adb 指令# 在当前设备上执行指令 adb shell ls print(shell(ls)) # 对特定设备执行 adb 指令 dev connect_device(Android:///device1) dev.shell(ls) # 切换到某台设备后执行 adb 指令 set_current(0) shell(ls)Android 常见问题模拟器连接模拟器的连接方式与真机类似需要按以下步骤操作在模拟器中打开开发者选项并勾选允许 USB 调试部分模拟器可能需要多次点击“设置 - 关于手机”才能打开开发者选项使用 ADB 连接模拟器对应端口例如执行adb connect 127.0.0.1:62001其中7555原文如此实际以各模拟器厂商端口为准是模拟器对应的端口号不同品牌模拟器各不相同使用代码Android://127.0.0.1:5037/127.0.0.1:62001?cap_methodJAVACAP连接对应模拟器。需要重点注意大多数模拟器无法使用默认参数连接必须指定cap_methodJAVACAP各品牌模拟器对应的端口号可参考官方 Android 模拟器连接文档。连续滑动Airtest 提供了一些滑动接口便于实现更复杂的操作dev device() # 获取当前设备 dev.pinch() # 双指捏合或分离 dev.swipe_along([(100, 300), (300, 300), (100, 500), (300, 600)]) # 沿一系列坐标连续滑动 dev.two_finger_swipe((100, 100), (200, 200)) # 双指一起滑动其中swipe_along可以沿一系列坐标点连续滑过是最常用的接口。这些接口的实现位于 airtest/core/android/touch_methods/base_touch.pyswipe_along会把每段坐标依次拆成若干MoveEvent后统一交给perform执行two_finger_swipe会根据offset偏移量计算第二根手指的坐标并夹在屏幕宽高范围内同时驱动contact0与contact1两根手指pinch则默认以屏幕中心为基准按percent比例计算双指起始/结束位置实现捏合与张开。自定义滑动在airtest.core.android.touch_methods.base_touchbase_touch.py中定义了四类动作事件DownEvent(坐标, contact0, pressure50)手指按下UpEvent(contact0)手指抬起MoveEvent(坐标, contact0, pressure50)滑动到某个坐标SleepEvent等待秒。在上述四类动作中contact参数默认是 0表示第一根手指传入 1 就可以定义第二根手指的动作从而实现双指复杂操作。pressure50定义了按下时的压力默认值为 50。以touch接口为例它实际上就是由[DownEvent, SleepEvent, UpEvent]组合而成的源码见 base_touch.py理论上你可以自由组合这些事件定制出非常复杂的点击与滑动操作。例如一个双指点击屏幕的示例from airtest.core.android.touch_methods.base_touch import * # 双指点击 multitouch_event [ DownEvent((100, 100), 0), DownEvent((200, 200), 1), # 第二根手指 SleepEvent(1), UpEvent(0), UpEvent(1)] device().touch_proxy.perform(multitouch_event)上面的示例中先在 (100, 100) 处按下第一根手指在 (200, 200) 处按下第二根手指等待 1 秒后分别抬起。再加入MoveEvent可以实现更多样的操作例如一个普通的swipeswipe_event [DownEvent((500, 500)), SleepEvent(0.1)] for i in range(5): swipe_event.append(MoveEvent((500 100*i, 500 100*i))) swipe_event.append(SleepEvent(0.2)) swipe_event.append(UpEvent()) dev.touch_proxy.perform(swipe_event)基于此还可以进一步实现更复杂的操作比如“长按 2 秒 - 滑动到某个位置”from airtest.core.android.touch_methods.base_touch import * dev device() # 长按删除应用 longtouch_event [ DownEvent([908, 892]), # 要删除应用的坐标 SleepEvent(2), MoveEvent([165, 285]), # 删除应用的垃圾桶坐标 UpEvent(0)] dev.touch_proxy.perform(longtouch_event)perform的执行逻辑base_touch.py会遍历事件列表SleepEvent直接time.sleep其余事件则通过getcmd()生成 minitouch/maxtouch 协议命令字符串如d 0 x y 50、m 0 x y 50、u 0再经transform_xy做坐标变换后发送给设备端。这也解释了为什么自定义手势仅在 minitouch / maxtouch 模式下有效。更多示例可以参考仓库中的 playground/android_motionevents.py其中包含双指点击、双指滑动、横屏坐标转换通过dev.touch_proxy.ori_transformer转换坐标以及长按拖动删除应用等完整可运行样例。调试小技巧可以打开手机的设置 - 开发者选项 - 显示触摸位置用来调试模拟输入是否按预期落点。运行脚本的同时录屏Android 手机支持在运行脚本的同时录制屏幕。在运行脚本的命令行中加上--recording参数即可airtest run D:\test\Airtest_example.air --device android:/// --log logs/ --recording运行结束后在指定的 log 目录中即可找到录制的 mp4 文件。录屏文件的命名规则源码见 airtest/cli/runner.py只传--recording参数时默认使用recording_手机序列号.mp4命名录屏文件指定文件名--recording test.mp4且连接了不止一台手机时命名为手机序列号_test.mp4指定文件名--recording test.mp4且只有一台手机时命名为test.mp4注意传入的文件名必须以 mp4 结尾默认录屏文件最长 1800 秒如果需要录更长时间需要在代码中手动调用录屏接口。在代码中调用录屏接口可以控制录屏的清晰度和时长。接口文档参见airtest.core.android.Android.start_recording。例如录制一段 30 秒、最低清晰度并导出到当前目录test.mp4的视频from airtest.core.api import connect_device, sleep dev connect_device(Android:///) # 以最低画质录制屏幕 dev.start_recording(bit_rate_level1) sleep(30) dev.stop_recording(outputtest.mp4)bit_rate_level用于控制录屏分辨率取值范围是 1-5bit_rate_level5分辨率最高但会占用更多硬盘空间。其底层实现airtest/core/android/android.py在 yosemite 模式下会把bit_rate_level换算为屏幕宽 × 屏幕高 × level的码率超过 5 会自动截断为 5并通过设备端 Yosemite 服务录制。也可以设置参数max_time30让录屏在 30 秒后自动停止dev device() dev.start_recording(max_time30, bit_rate_level5) dev.stop_recording(outputtest_30s.mp4)max_time的默认值是 1800 秒即最长录屏半小时可以修改该值获得更长的录屏dev device() dev.start_recording(max_time3600, bit_rate_level5) dev.stop_recording(outputtest_hour.mp4)此外start_recording还支持modeffmpeg画质略低但文件更小、兼容性更好、fps建议 1-10、orientation1 竖屏 / 2 横屏 / 0 自动旋转与max_sizeffmpeg 模式下限制视频最大宽高以降低系统负载等参数可按需查阅 airtest/core/android/android.py 中的完整签名与示例。更多参考Android 手机自动化测试教程官方教程第一部分Android 连接常见问题Android connection FAQ。赞分享测试质量保障计算机视觉【免费下载链接】AirtestUI Automation Framework for Games and Apps项目地址https://gitcode.com/gh_mirrors/ai/Airtest点击查看免费下载相关推荐Airtest项目Android设备连接与操作完全指南Airtest项目Android设备连接与操作完全指南 前言 Airtest作为一款优秀的自动化测试框架在移动端测试领域有着广泛的应用。本文将全面介绍如何在A测试质量保障计算机视觉escrcpy 连接指南scrcpy 设备选择、TCP/IP 无线连接与自动启动全解escrcpy 连接指南scrcpy 设备选择、TCP/IP 无线连接与自动启动全解 scrcpy 通过 adb 与 Android 设备通信连接是镜像与控桌面应用移动开发ToolJet 连接与查询 PostgreSQL 数据源完全指南手动连接、连接串、参数化 SQL 与 GUI 批量更新ToolJet 连接与查询 PostgreSQL 数据源完全指南手动连接、连接串、参数化 SQL 与 GUI 批量更新 本篇技术指南以 ToolJet Pos低代码后端前端AI 应用MCP 服务上一篇抖音直播数据零代码抓取3分钟学会用DouyinLiveWebFetcher获取实时弹幕下一篇微信网页版免安装终极指南3分钟解锁公司电脑限制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

黄白助手 第 083 个开关:启用关键词屏蔽的位置、验证方法与风险边界
黄白助手 第 083 个开关:启用关键词屏蔽的位置、验证方法与风险边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》… · 2026/9/25 14:05:50

黄白助手 第 082 个开关:启用新群自动备注进群时间的位置、验证方法与风险边界
黄白助手 第 082 个开关:启用新群自动备注进群时间的位置、验证方法与风险边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》… · 2026/9/25 14:05:38

排序算法工程选型指南:从理论复杂度到线上故障实战
排序算法工程选型指南:从理论复杂度到线上故障实战

1. 这不是“背公式”的考试题,而是写代码时真正卡住你的那堵墙你有没有过这样的经历:在LeetCode刷到第73题,看到“数组排序”四个字,手指已经条件反射敲出arr.sort(),但面试官突然抬头问:“如果不用内置函数… · 2026/9/25 14:05:38

表格基础模型上下文选择实战:长度、采样与列顺序调优指南
表格基础模型上下文选择实战:长度、采样与列顺序调优指南

1. 表格基础模型的上下文选择为什么成了新痛点表格基础模型(Tabular Foundation Model)这两年在arXiv上的热度肉眼可见地往上走。从早期的TabPFN到后来的TabDPT、Mitra、CARTE,再到各类针对时序表格、多表关联、异构schema的变体,… · 2026/9/25 16:59:18

具身智能遇上大模型:从任务规划到动作执行的端到端链路实战
具身智能遇上大模型:从任务规划到动作执行的端到端链路实战

简介:这份PDF文档聚焦大模型与具身智能的交叉领域,面向人工智能、机器人方向的研究者与学习者,系统梳理了智能机器人的发展脉络与核心技术框架。内容从周穆王时期偃师造人的古代记载、阿基塔斯蒸汽飞鸟、达芬奇人形机器人草图,一路… · 2026/9/25 16:59:12

Atlas 300V 24G上跑通YOLO:AI推理加速卡部署全攻略
Atlas 300V 24G上跑通YOLO:AI推理加速卡部署全攻略

拿到Atlas 300V 24G这块卡的时候,我的第一反应和很多人一样:这玩意到底算不算“运算加速卡”?它和游戏显卡、工作站显卡有什么区别?拿它跑YOLO到底行不行?这三个问题如果不搞清楚,后面的部署过程会走很多弯… · 2026/9/25 16:59:12

FLoRIST:联邦LoRA微调下行通信的三层压缩方案
FLoRIST:联邦LoRA微调下行通信的三层压缩方案

FLoRIST 是我最近在 MLSys2026 预印本目录里刷到的一个方案,标题指向很清楚:联邦学习 LoRA 微调这条赛道上,把服务端发给客户端的下行通信压缩下来。联邦学习本身是数据不动、模型或模型增量在客户端与服务端之间搬动;LoRA 是低秩… · 2026/9/25 16:59:05

Codex Router进阶配置清单:curate-models、API Key池与自定义端点的10种用法
Codex Router进阶配置清单:curate-models、API Key池与自定义端点的10种用法

Codex Router进阶配置清单:curate-models、API Key池与自定义端点的10种用法 【免费下载链接】codex-router External-model router for Codex with guided Kimi OAuth/API, DeepSeek, safe migration, and rollback. 项目地址: https://gitcode.com/gh_mirrors/c… · 2026/9/25 16:58:53

ORDL医疗数据解析实战:从黑匣子到CDR的逆向工程
ORDL医疗数据解析实战:从黑匣子到CDR的逆向工程

简介:本资源是一份面向机器学习与信号处理方向研究者及MATLAB开发者的在线词典学习(ORDL)算法实践代码包,聚焦大规模流式数据下的稀疏表示建模问题,适用于文本分类、图像去噪、高维信号压缩等典型场景。压缩包为RAR格式… · 2026/9/25 16:58:22

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码