MaaFramework控制单元深度剖析:ADB、Win32、PlayCover全解析
MaaFramework控制单元深度剖析:ADB、Win32、PlayCover全解析
【免费下载链接】MaaFramework基于图像识别的自动化黑盒测试框架 | An automation black-box testing framework based on image recognition项目地址: https://gitcode.com/gh_mirrors/ma/MaaFramework
MaaFramework作为基于图像识别的自动化黑盒测试框架,其核心功能之一就是通过多种控制单元实现对不同平台的自动化操作。本文将深入解析MaaFramework中最重要的三个控制单元:ADB控制单元、Win32控制单元和PlayCover控制单元,帮助开发者全面理解其架构设计和技术实现。
🔍 控制单元架构设计概览
MaaFramework的控制单元系统采用统一的接口设计,所有控制单元都继承自ControlUnitAPI基类。这个设计模式确保了不同平台控制单元之间的接口一致性,同时允许每个平台实现特定的功能优化。
核心接口设计
在include/MaaControlUnit/ControlUnitAPI.h中定义了控制单元的核心接口:
class ControlUnitAPI { public: virtual bool connect() = 0; virtual bool connected() const = 0; virtual bool request_uuid(std::string& uuid) = 0; virtual MaaControllerFeature get_features() const = 0; virtual bool screencap(cv::Mat& image) = 0; virtual bool click(int x, int y) = 0; virtual bool swipe(int x1, int y1, int x2, int y2, int duration) = 0; // ... 其他标准操作接口 };📱 ADB控制单元:移动设备自动化利器
ADB控制单元是MaaFramework中最常用的控制单元之一,专门用于Android设备自动化控制。
核心实现架构
ADB控制单元的实现位于source/MaaAdbControlUnit/目录下,采用分层架构设计:
- Manager层(
AdbControlUnitMgr) - 统一管理ADB连接和设备状态 - 输入子系统(
Input/) - 支持多种输入方式 - 截图子系统(
Screencap/) - 支持多种截图方法 - 模拟器扩展(
EmulatorExtras/) - 针对特定模拟器的优化
输入方式对比
MaaFramework提供了多种ADB输入方式,各有优劣:
| 输入方式 | 速度 | 兼容性 | 特点 |
|---|---|---|---|
| AdbShell | 慢 | 高 | 最基础的ADB shell命令方式 |
| MinitouchAndAdbKey | 快 | 中 | 触摸使用minitouch,按键仍用ADB |
| Maatouch | 快 | 中 | 优化的触摸输入方案 |
| EmulatorExtras | 快 | 低 | 针对特定模拟器的优化 |
截图方式选择
截图方式的选择直接影响自动化性能:
| 截图方式 | 速度 | 兼容性 | 编码质量 |
|---|---|---|---|
| EncodeToFileAndPull | 慢 | 高 | 无损 |
| Encode | 慢 | 高 | 无损 |
| RawWithGzip | 中 | 高 | 无损 |
| RawByNetcat | 快 | 低 | 无损 |
| MinicapDirect | 快 | 低 | 有损 |
| MinicapStream | 极快 | 低 | 有损 |
| EmulatorExtras | 极快 | 低 | 无损 |
实际使用示例
在sample/cpp/main.cpp中可以看到ADB控制器的创建和使用:
auto controller_handle = MaaAdbControllerCreate( MaaToolkitAdbDeviceGetAdbPath(device_handle), MaaToolkitAdbDeviceGetAddress(device_handle), MaaToolkitAdbDeviceGetScreencapMethods(device_handle), MaaToolkitAdbDeviceGetInputMethods(device_handle), MaaToolkitAdbDeviceGetConfig(device_handle), agent_path.c_str());🖥️ Win32控制单元:Windows桌面自动化
Win32控制单元专门用于Windows桌面应用程序的自动化控制,支持多种截图和输入方式。
输入方式深度解析
Win32控制单元提供了多种输入方式以适应不同的应用程序需求:
| 输入方式 | 兼容性 | 需管理员权限 | 抢占鼠标 | 支持后台 |
|---|---|---|---|---|
| Seize | 高 | 否 | 是 | 否 |
| SendMessage | 中 | 可能 | 否 | 是 |
| PostMessage | 中 | 可能 | 否 | 是 |
| SendMessageWithCursorPos | 中 | 可能 | 短暂 | 是 |
| PostMessageWithCursorPos | 中 | 可能 | 短暂 | 是 |
截图技术实现
Win32截图子系统位于source/MaaWin32ControlUnit/Screencap/目录,包含多种实现:
- GDI截图- 传统的Windows图形设备接口方式
- FramePool- Windows 10 1903+ 的高性能截图方式
- DXGI桌面复制- 基于DirectX图形接口的截图
- PrintWindow- 窗口内容复制方式
鼠标锁定跟随模式
Win32控制单元独有的高级功能:鼠标锁定跟随模式。这个功能专门为TPS/FPS等需要鼠标锁定的游戏设计:
// 开启鼠标锁定跟随模式 bool enabled = true; MaaControllerSetOption(ctrl, MaaCtrlOption_MouseLockFollow, &enabled, sizeof(bool));开启后,窗口会始终跟随鼠标移动,同时通过RawInput对冲阻止游戏感知硬件鼠标位移。配合MaaControllerPostRelativeMove可在此模式下注入视角旋转。
🍎 PlayCover控制单元:macOS上的iOS应用自动化
PlayCover控制单元是MaaFramework在macOS平台上控制iOS应用的独特解决方案。
技术架构
PlayCover控制单元的实现位于source/MaaPlayCoverControlUnit/目录:
- API层(
API/) - 提供外部接口 - 客户端层(
Client/) - 与PlayTools通信 - 管理器层(
Manager/) - 控制单元管理
使用前提条件
使用PlayCover控制单元需要满足以下条件:
- 安装fork版PlayCover
- 目标iOS应用需要在PlayCover中启用MaaTools功能
- 配置正确的PlayCover地址和应用UUID
API接口设计
PlayCover控制单元的API设计简洁明了:
MAA_CONTROL_UNIT_API MaaControlUnitHandle MaaPlayCoverControlUnitCreate( const char* address, const char* uuid);🔧 控制单元选择指南
场景化选择建议
- Android设备/模拟器→ 选择ADB控制单元
- Windows桌面应用→ 选择Win32控制单元
- macOS上的iOS应用→ 选择PlayCover控制单元
- 原生macOS应用→ 选择MacOS控制单元
- 游戏手柄控制→ 选择Gamepad控制单元
性能优化建议
- ADB控制单元:优先使用
Maatouch输入和RawWithGzip截图组合 - Win32控制单元:前台应用使用
DXGI_DesktopDup_Window,后台应用使用FramePool - 输入方式选择:根据应用特性选择最兼容的方式
🚀 实际应用案例
跨平台自动化测试
MaaFramework的控制单元设计使得跨平台自动化测试成为可能。开发者可以使用相同的测试逻辑,只需切换不同的控制单元即可在不同平台上运行。
游戏自动化
通过Win32控制单元的鼠标锁定跟随模式,可以实现FPS/TPS游戏的视角控制,结合图像识别技术,可以构建复杂的游戏自动化脚本。
移动应用测试
ADB控制单元支持多种截图和输入方式,可以适应不同Android设备和模拟器的特性,提供稳定的自动化测试环境。
📊 性能对比分析
| 控制单元 | 平台支持 | 输入方式多样性 | 截图性能 | 特殊功能 |
|---|---|---|---|---|
| ADB | Android | 4种 | 中等 | 模拟器优化 |
| Win32 | Windows | 8种 | 高 | 鼠标锁定跟随 |
| PlayCover | macOS(iOS) | 1种 | 中等 | iOS应用支持 |
| MacOS | macOS | 2种 | 高 | 原生支持 |
| Gamepad | Windows | 手柄模拟 | - | 手柄输入 |
🎯 总结与展望
MaaFramework的控制单元系统展示了优秀的架构设计和平台适配能力。通过统一的接口设计和平台特定的优化实现,为开发者提供了强大而灵活的自动化控制能力。
未来,随着更多平台和控制方式的加入,MaaFramework的控制单元生态系统将更加完善,为自动化测试和机器人流程自动化提供更强大的支持。
对于想要深入了解控制单元实现的开发者,建议阅读以下源码文件:
source/MaaAdbControlUnit/Manager/AdbControlUnitMgr.h- ADB控制单元管理器source/MaaWin32ControlUnit/Manager/Win32ControlUnitMgr.h- Win32控制单元管理器source/MaaPlayCoverControlUnit/Manager/PlayCoverControlUnitMgr.h- PlayCover控制单元管理器
【免费下载链接】MaaFramework基于图像识别的自动化黑盒测试框架 | An automation black-box testing framework based on image recognition项目地址: https://gitcode.com/gh_mirrors/ma/MaaFramework
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
