Files
MaaAssistantArknights/src/Java/Readme.md
MistEO c4d361a363 feat: 重构主页日志侧边栏整体布局和样式 (#15211)
* feat: 重构主页日志侧边栏整体布局和样式

* feat: 优化一下Live

* refactor: 调整卡片布局

* revert: 回滚不知道干嘛的改动

* feat: 调整右上角悬浮窗布局

* chore: AI一直在改个啥

* Revert "chore: AI一直在改个啥"

This reverts commit b5ae565c34a2a187ae953cc385b0b85de83fc140.

* perf: 调整卡片分割逻辑,优化界面布局

* perf: 优化显示效果

* rft: 简化绑定

* chore: 调整界面布局

* feat: 任务报错更新缩略图

* feat: 肉鸽开始探索前分割卡片

* feat: 肉鸽结算更新缩略图

* feat: 肉鸽战斗成功/失败时更新缩略图

* feat: 事件选择更新图片

* fix: 在缩放时对 BGR 缓冲区长度或尺寸不匹配的情况进行防护

* chore: 添加日志,删除无用的 using

* style: 格式化代码

* fix: 避免在使用 PropertyDependsOn 的同时重复发送依赖属性通知。

* fix: 下载日志错位

* fix: 图片数量限制错误

* feat: 自定义最大缩略图数量

* fix: en 语言下背景图片选择按钮文字无法显示完全

* chore: 新用户标题栏默认不显示配置名称

* chore: 标题栏端口地址默认省略 127.0.0.1: 与 localhost:

* feat: 卡片背景色

* chore: 删除没用的 ColumnDefinitions

* feat: 就要四个字

---------

Co-authored-by: uye <99072975+ABA2396@users.noreply.github.com>
2026-01-02 23:40:26 +08:00

584 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Maa-HTTP 接口实现
基于 JNA (Java-Native-Access) 调用 Maa 核心的 HTTP + WebSocket 接口实现.
仅在 Windows 下进行过测试,未在 Linux 下测试过(相信强大的 Linux 用户自己可以解决问题!
## 接口实现情况
| 功能名称 | 接口路径(命令) | HTTP实现 | WebSocket实现 |
| :----------- | :------------- | :------- | :------------ |
| 获取版本号 | getVersion | Yes | Yes |
| 创建连接 | connect | Yes | Yes |
| 添加任务 | appendTask | Yes | Yes |
| 设定任务参数 | setTaskParams | Yes | Yes |
| 开始执行 | start | Yes | Yes |
| 停止执行 | stop | Yes | Yes |
| 销毁实例 | destroy | Yes | Yes |
| 列出实例连接 | listInstance | Yes | Yes |
| 消息回调通知 | callBack | No | Yes |
| 获取截图 | getImage | Yes | No |
## 环境依赖
1. JDK1.8 +
2. Maa v3.9.0-alpha +
## 如何编译
.\gradlew.bat jar
## 使用方法
1. 把他丢进 Maa 文件夹下,形成如下文件结构.备注: 启动脚本[Maa-HTTP-Server-startup.bat](Maa-HTTP-Server-startup.bat).
```text
MaaCoreArknights_v3.9.0-beta.8
│ MAA.exe
│ MaaCore.dll
│ ...
└───Java-HTTP
│ Maa-HTTP-0.0.1.jar
│ Maa-HTTP-Server-startup.bat
```
2. 双击Maa-HTTP-Server-startup.bat启动.
3. 默认端口号8848钛金端口,如需修改,请修改 Maa-HTTP-Server-startup.bat 中的-port=8848 .
4. 当你看到如下内容则启动成功.
```log
2022-05-31 22:20:03.000 [main] INFO Application - Autoreload is disabled because the development mode is off.
2022-05-31 22:20:03.407 [main] INFO Application - Application started in 0.458 seconds.
2022-05-31 22:20:03.407 [main] INFO Application - Application started: io.ktor.server.application.Application@fac80
2022-05-31 22:20:03.717 [DefaultDispatcher-worker-1] INFO Application - Responding at http://0.0.0.0:8848
```
## 接口文档
### HTTP 部分
提供了如下功能
| 功能名称 | 接口路径 |
| :----------- | :------------ |
| 获取版本号 | getVersion |
| 创建连接 | connect |
| 添加任务 | appendTask |
| 设定任务参数 | setTaskParams |
| 开始执行 | start |
| 停止执行 | stop |
| 销毁实例 | destroy |
| 列出连接 | listInstance |
| 获取截图 | getImage |
---
#### 接口名称 获取版本号
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/getVersion>
###### 2) 调用方式: HTTP get
###### 3) 请求参数: 无
###### 4) 返回结果示例
```json
{
"data": {
"version": "v3.9.0-beta"
},
"code": 0,
"message": "success"
}
```
---
##### 接口名称 创建连接
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/connect>
###### 2) 调用方式: HTTP post
###### 3) 请求参数
```json
{
"adbPath": "C:\\MaaCoreArknights3\\platform-tools\\adb.exe",
"host": "127.0.0.1:62001",
"detailJson": ""
}
```
###### Post 参数
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| ---------- | ------------------------------ | ------ | ---- | ---- |
| adbPath | ADB地址 | String | Y | - |
| host | 实例地址 | String | Y | - |
| detailJson | 有什么用我也不知道,反正就是有 | String | N | - |
###### 4) 请求返回结果
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"result": true
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | ------------------ | ------- | ---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
---
##### 接口名称 添加任务
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/appendTask>
###### 2) 调用方式: HTTP post
###### 3) 请求参数
```json
{
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"type": "Fight",
"params": {
"stage": "LastBattle"
}
}
```
###### Post 参数
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---- | ---- |
| id | 创建连接返回的实例ID | String | Y | - |
| type | 任务类型,此次示例为理智作战战斗,详情参考[集成文档](https://raw.githubusercontent.com/MaaAssistantArknights/MaaAssistantArknights/master/docs/集成文档.md) | String | Y | - |
| params | 任务参数 | Json | Y | - |
###### 4) 请求返回结果
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"taskId": 0
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | ---------------- | ------ | ---- |
| id | 实例ID | String | - |
| taskId | 任务ID,为0则失败 | Int | - |
---
##### 接口名称 设定任务参数
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/setTaskParams>
###### 2) 调用方式: HTTP post
###### 3) 请求参数
```json
{
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"type": "Fight",
"taskId": 0,
"params": {
"stage": "LastBattle"
}
}
```
###### Post 参数
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---- | ---- |
| id | 创建连接返回的实例ID | String | Y | - |
| taskId | 任务ID | Int | Y | - |
| type | 任务类型,此次示例为理智作战战斗,详情参考[集成文档](https://raw.githubusercontent.com/MaaAssistantArknights/MaaAssistantArknights/master/docs/集成文档.md) | String | Y | - |
| params | 任务参数 | Json | Y | - |
###### 4) 请求返回结果
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"result": false
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | ------------------ | ------- | ---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
##### 接口名称 开始执行
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/start>
###### 2) 调用方式: HTTP post
###### 3) 请求参数
```json
{
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3"
}
```
###### Post 参数
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| -------- | -------------------- | ------ | ---- | ---- |
| id | 创建连接返回的实例ID | String | Y | - |
###### 4) 请求返回结果
```json
{
"data": {
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3",
"result": true
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | ------------------ | ------- | ---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
##### 接口名称 停止执行,清空任务链
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/stop>
###### 2) 调用方式: HTTP post
###### 3) 请求参数
```json
{
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3"
}
```
###### Post 参数
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| -------- | -------------------- | ------ | ---- | ---- |
| id | 创建连接返回的实例ID | String | Y | - |
###### 4) 请求返回结果
```json
{
"data": {
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3",
"result": true
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | ------------------ | ------- | ---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
##### 接口名称 销毁实例
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/destroy>
###### 2) 调用方式: HTTP post
###### 3) 请求参数
```json
{
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3"
}
```
###### Post 参数
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| -------- | -------------------- | ------ | ---- | ---- |
| id | 创建连接返回的实例ID | String | Y | - |
###### 4) 请求返回结果
```json
{
"data": {
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3",
"result": true
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | ------------------ | ------- | ---- |
| id | 给连接实例创建的ID | String | - |
| result | 是否成功 | Boolean | - |
---
##### 接口名称 列出实例连接
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/listInstance>
###### 2) 调用方式: HTTP get
###### 3) 请求参数: 无
###### 4) 请求返回结果
```json
{
"data": {
"list": [
{
"id": "ccd76e0c367511158ca774ff951a22e8bb62f5d3",
"host": "127.0.0.1:62026",
"adbPath": "C:\\Users\\atmzx\\Desktop\\MaaCoreArknights3\\platform-tools\\adb.exe",
"uuid": "",
"status": 0
}
]
},
"code": 0,
"message": "success"
}
```
###### 5) 请求返回结果参数说明
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | ------------------- | ------ | ---- |
| id | 实例ID | String | - |
| host | 连接的Host | String | - |
| adbPath | 使用的Adb地址 | String | - |
| uuid | 设备备ID保留 | String | - |
| status | 0待机中,1任务执行中 | Int | - |
---
##### 接口名称 获取截图
###### 1) 请求地址
> <http://127.0.0.1:8848/API/V1/getImage>
###### 2) 调用方式: HTTP get
###### 3) 请求参数
###### Get参数
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| -------- | -------------------- | ------ | ---- | ---- |
| id | 创建连接返回的实例ID | String | Y | - |
###### 4) 请求返回结果: 图片内容, PNG 格式
### WebSocket 部分
请求地址(没错跟HTTP同样是8848钛金端口
> <ws://127.0.0.1:8848/API/V1>
提供了如下功能
| 功能名称 | 命令 |
| :----------- | :------------ |
| 获取版本号 | getVersion |
| 创建连接 | connect |
| 添加任务 | appendTask |
| 设定任务参数 | setTaskParams |
| 开始执行 | start |
| 停止执行 | stop |
| 销毁实例 | destroy |
| 列出实例连接 | listInstance |
| 消息回调通知 | callBack |
所有的的WebSocket接口跟HTTP接口请求响应参数均完全一致
---
##### 接口名称 获取版本号
```json
{
"command": "getVersion",
"msgId": 114514,
"data": {}
}
```
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| -------- | -------------------------------------------------------------- | ------ | ---- | ---- |
| command | 操作命令 | String | ,Y | - |
| msgId | 消息ID服务端收到此次请求会用同一个ID答复便于请求响应关联 | Int | Y | - |
| data | 请求参数请参考同名接口的HTTP接口文档与HTTP接口完全一致 | Json | Y | - |
###### 请求返回结果
```json
{
"data": {
"version": "v3.9.0-beta"
},
"command": "getVersion",
"msgId": 114514,
"code": 0,
"message": "success"
}
```
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | --------------------------------------------------------- | ------ | ---- |
| command | 操作命令,与请求一致 | String | - |
| msgId | 消息ID此次请求的消息ID为114514则响应也是114514 | Int | - |
| data | 响应内容,请参考同名接口的HTTP接口文档与HTTP接口完全一致 | Json | - |
---
##### 接口名称 创建连接
```json
{
"command": "connect",
"msgId": 114514,
"data": {
"adbPath": "C:\\Users\\atmzx\\Desktop\\MaaCoreArknights3\\platform-tools\\adb.exe",
"host": "127.0.0.1:62001"
}
}
```
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
| -------- | -------------------------------------------------------------- | ------ | ---- | ---- |
| command | 操作命令 | String | ,Y | - |
| msgId | 消息ID服务端收到此次请求会用同一个ID答复便于请求响应关联 | Int | Y | - |
| data | 请求参数请参考同名接口的HTTP文档与HTTP接口完全一致 | Json | Y | - |
###### 请求返回结果
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"result": true
},
"command": "connect",
"msgId": 114514,
"code": 0,
"message": "success"
}
```
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | --------------------------------------------------------- | ------ | ---- |
| command | 操作命令,与请求一致 | String | - |
| msgId | 消息ID此次请求的消息ID为114514则响应也是114514 | Int | - |
| data | 响应内容,请参考同名接口的HTTP接口文档与HTTP接口完全一致 | Json | - |
appendTask setTaskParams start stop等接口不再描述均可遵循以上规则参考HTTP接口文档实现。
---
##### 接口名称 回调消息
###### 返回结果示例
```json
{
"data": {
"id": "46b9d5cd60382f100b336b17d6817f8eda255f73",
"logId": 1,
"msg": 2,
"details": {
"uuid": "",
"details": {
"adb": "C:\\MaaCoreArknights3\\platform-tools\\adb.exe",
"address": "127.0.0.1:62001",
"config": "General",
"width": 1280,
"height": 720
},
"what": "ResolutionGot",
"why": ""
}
},
"command": "callBack",
"msgId": 0,
"code": 0,
"message": "success"
}
```
| 字段名称 | 字段说明 | 类型 | 备注 |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------ | ---- |
| command | 操作命令,callBack类型 | String | - |
| msgId | 消息IDcallBack 一律为0 | Int | - |
| data | 响应内容,详情参考[集成文档](https://raw.githubusercontent.com/MaaAssistantArknights/MaaAssistantArknights/master/docs/集成文档.md) | Json | - |