|
|
|
|
| 组件 | 要求 |
|---|---|
| 运行时 | .NET 10.0 或更高版本 |
| 资源 | 基于 MaaFramework 的资源项目 |
| 系统 | Windows 10+、Linux (X11/Wayland)、macOS 10.15+ |
MaaFramework 项目模板已内置 MFAAvalonia,创建项目时自动配置完成。
📦 点击展开安装步骤
-
下载发行版
从 Releases 下载最新版本并解压
-
复制资源文件
maafw/assets/resource/* → MFAAvalonia/resource/ maafw/assets/interface.json → MFAAvalonia/ -
配置 interface.json
根据下方配置说明修改
interface.json文件
controller 为对象数组,用于声明控制器预设与类型配置:
| 字段 | 类型 | 说明 |
|---|---|---|
name |
string | 唯一名称标识符,用作控制器 ID |
label |
string | 显示名称,支持国际化(以 $ 开头)。未设置时显示 name |
description |
string | 详细描述,支持文件路径、URL 或直接文本,内容支持 Markdown,支持国际化 |
icon |
string | 图标路径(相对项目根目录),支持国际化 |
type |
'Adb' | 'Win32' | 'PlayCover' |
控制器类型 |
display_short_side |
number | 默认缩放分辨率短边长度,默认 720。与 display_long_side / display_raw 互斥 |
display_long_side |
number | 默认缩放分辨率长边长度。与 display_short_side / display_raw 互斥 |
display_raw |
boolean | 是否使用原始分辨率截图。与缩放分辨率设置互斥 |
adb |
object | Adb 控制器配置(V2 中 input/screencap 由框架自动检测) |
win32 |
object | Win32 控制器配置 |
playcover |
object | PlayCover 控制器配置(仅 macOS) |
win32 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
class_regex |
string | 可选。窗口类名正则 |
window_regex |
string | 可选。窗口标题正则 |
mouse |
string | 可选。鼠标控制方式 |
keyboard |
string | 可选。键盘控制方式 |
screencap |
string | 可选。截图方式 |
playcover 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
uuid |
string | 可选。目标应用 Bundle Identifier,默认 maa.playcover |
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name |
string | - | 任务显示名称 |
entry |
string | - | 任务入口接口 |
default_check |
boolean | false |
是否默认选中 |
description |
string | null |
任务说明文档(支持富文本) |
repeatable |
boolean | false |
是否可重复执行 |
repeat_count |
number | 1 |
默认重复次数 |
任务文档 (doc) 支持以下格式:
- Markdown - 支持大部分标准语法
- HTML - 支持部分标签
- 自定义标记 - 扩展样式支持
| 标记 | 效果 | 示例 |
|---|---|---|
[color:颜色]...[/color] |
文字颜色 | [color:red]红色文字[/color] |
[b]...[/b] |
粗体 | [b]粗体文字[/b] |
[i]...[/i] |
斜体 | [i]斜体文字[/i] |
[u]...[/u] |
下划线 | [u]下划线文字[/u] |
[s]...[/s] |
[s]删除线文字[/s] |
focus 用于在任务执行过程中输出关键提示、Toast 或日志。支持 旧协议 与 新协议,写在任务节点中:
- 旧协议:字段
start / succeeded / failed / toast / aborted - 新协议:以 消息类型 为键,值为字符串或字符串数组
消息类型使用 MaaFramework 的节点事件常量,例如:
- 识别阶段:
Node.Recognition.Starting/Node.Recognition.Succeeded/Node.Recognition.Failed - 动作阶段:
Node.Action.Starting/Node.Action.Succeeded/Node.Action.Failed
新协议会按消息类型匹配并渲染到日志。
旧协议示例:
{
"focus": {
"start": ["[color:cyan]开始执行[/color]"],
"succeeded": ["[color:green]任务完成[/color]"],
"failed": ["[color:red]任务失败[/color]"],
"toast": ["提示标题", "提示内容"],
"aborted": true
}
}旧协议字段说明:
toast:数组长度 >= 1 时弹出 Toast;第 1 项为标题,第 2 项为内容(可省略)aborted:为true时在Starting阶段触发中止回调(用于中断任务)
新协议示例:
{
"focus": {
"Node.Action.Starting": "开始:{name}",
"Node.Action.Succeeded": "完成: {name}",
"Node.Action.Failed": "失败ID:{action_id}"
}
}占位符与变量:
{key}会从details中替换对应字段- 旧协议中的日志/Toast 支持计数变量,如
{count}、{++count}、{count++}、{count+1}
Tip
Advanced 字段已基本被InterfaceV2 的 input 类型替代,不建议使用
在 interface.json 同级目录创建 lang 文件夹,添加语言文件:
lang/
├── zh-cn.json # 简体中文
├── zh-tw.json # 繁体中文
└── en-us.json # English
同时需要在 interface.json 中新增多语言字段(路径相对于 interface.json):
{
"languages": {
"zh-cn": "lang/zh-cn.json",
"zh-tw": "lang/zh-tw.json",
"en-us": "lang/en-us.json"
}
}任务名称和文档可使用 key 引用,MFAAvalonia 会根据语言设置自动加载对应翻译。
将 .md 文件放入 resource/announcement/ 目录即可作为公告显示。资源更新时会自动下载 Changelog 作为公告。
# 使用指定配置文件启动
MFAAvalonia -c 配置名称将 logo.ico 放置在程序根目录的 Assets 文件夹里即可替换窗口图标。
本项目基于 GPL-3.0 License 开源。
| 项目 | 描述 |
|---|---|
| SukiUI | Avalonia 桌面 UI 库 |
| MaaFramework | 图像识别自动化框架 |
| MaaFramework.Binding.CSharp | MaaFramework 的 C# 封装 |
| Mirror酱 | 资源更新服务 |
| Serilog | 结构化日志库 |
| Newtonsoft.Json | 高性能 JSON 序列化库 |
| AvaloniaExtensions.Axaml | Avalonia 语法糖扩展 |
| CalcBindingAva | XAML 计算绑定扩展 |
感谢所有为 MFAAvalonia 做出贡献的开发者们!


{ // 项目基本信息 "name": "项目名称", "version": "1.0.0", "url": "https://github.com/{用户名}/{仓库名}", "custom_title": "自定义窗口标题", // Mirror酱更新配置 "mirrorchyan_rid": "项目ID", "mirrorchyan_multiplatform": false, // 资源配置 "resource": [ { "name": "官服", "path": "{PROJECT_DIR}/resource/base" }, { "name": "Bilibili服", "path": [ "{PROJECT_DIR}/resource/base", "{PROJECT_DIR}/resource/bilibili" ] } ], // 任务配置 "task": [ { "name": "任务名称", "entry": "任务入口", "default_check": true, "description": "任务说明文档", "repeatable": true, "repeat_count": 1 } ] }