插件编译打包
1. 服务入口
- Web 页面:
http://虚拟机ip:8008/ - 健康检查:
http://虚拟机ip:8008/api/health
2. 使用前准备
打开编译打包平台后,页面顶部包含三个页签:
客户端插件:用于 HMI/客户端插件编译打包。控制器插件:用于控制器插件编译打包。设置:用于清理编译中间文件、上传临时文件和已生成包。
页面右上角支持中英文切换,切换后页面标题、按钮、提示信息等会同步更新。
页面总览

3. 客户端插件编译打包
客户端插件页签用于打包 HMI/客户端插件,支持 aarch64 和 window64 两种平台:
aarch64:上传或指定客户端插件源码,由虚拟机内 Qt 5.12.11 与 GCC 7.4.1 交叉编译生成.so。window64:不编译源码,直接上传 Windows 侧已编译好的插件.dll和依赖xplugin.dll,由平台组包。aarch64 + window64:同时生成 Linux 客户端插件和 Windows 客户端插件,并打进同一个客户端插件包。
3.1 客户端插件源码要求
选择 aarch64 时,需要提供客户端插件源码,源码可通过两种方式提交:
- 上传
zip源码包 - 填写服务器本机源码路径
源码工程要求:
- 工程中应包含 Qt
.pro文件,平台会优先查找.pro文件进行 qmake 编译。 .pro文件中需要定义PLUGIN_NAME,平台会自动读取该值作为客户端插件名。- 源码中需要包含
lib/aarch64/xplugin.so,打包时会随插件一起放入客户端插件目录。 - 若未找到
.pro文件,平台会尝试查找CMakeLists.txt并按 CMake 工程处理。
仅选择
window64时,不需要上传源码,也不需要填写服务器本机源码路径。
客户端插件页面

3.2 aarch64 源码编译
适用于需要在虚拟机内交叉编译 Linux 客户端插件的场景。
操作步骤:
- 切换到“客户端插件”页签。
- 目标架构选择
aarch64。 - 在“源码”区域选择“本地上传 zip”或“服务器本机路径”。
- 若选择 zip,上传包含 Qt 客户端插件工程的源码包。
- 若选择服务器本机路径,填写虚拟机上的源码绝对路径。
- 填写插件元数据。
- 点击“开始编译与打包”。
aarch64 源码输入
这里以服务内 /home/rokae/rokae/xplugin/electricclawplugin/electricclawplugin-hmi 为例。

3.3 window64 DLL 打包
适用于 Windows 客户端插件已经在 Windows 环境中编译完成,只需要平台统一打包的场景。
操作步骤:
- 切换到“客户端插件”页签。
- 目标架构选择
window64。 - 上传插件 DLL 文件。
- 上传依赖文件
xplugin.dll。 - 填写插件元数据。
- 点击“开始编译与打包”。
注意事项:
xplugin.dll文件名必须为xplugin.dll。- 仅选择
window64时,插件名默认从上传的插件 DLL 文件名读取。 - 仅选择
window64时,页面不会要求填写源码输入。
window64 DLL 输入

3.4 aarch64 + window64 组合打包
当需要同时发布 Linux 客户端插件和 Windows 客户端插件时,可同时勾选 aarch64 与 window64。
操作步骤:
- 目标架构同时选择
aarch64和window64。 - 提供 aarch64 源码(zip 或服务器本机路径)。
- 上传 Windows 插件 DLL。
- 上传
xplugin.dll。 - 填写插件元数据并提交任务。
双平台组合打包

3.5 客户端插件元数据
客户端插件的元数据字段如下:
depend:依赖的客户端插件列表,可为空。ctrlDepend:依赖的控制器插件列表,可为空。启用:设置插件安装时是否默认启用。min_hmi_version:插件要求的最小 HMI 版本。custom_hmi_version:指定 HMI 版本约束,可为空。version、author、describe:用于插件信息展示。
客户端插件的 name 通常由工程 .pro 文件中的 PLUGIN_NAME 自动读取;仅选择 window64 时,默认从上传的插件 DLL 文件名读取。
3.6 提交任务并下载
提交任务后,页面会显示任务 ID、任务状态和构建日志:
pending:已入队running:构建中succeeded:成功,可下载failed:失败,查看日志尾部定位问题
任务成功后点击“下载”获取客户端插件包。
客户端插件下载文件名为:
<plugin_name>.zip
该压缩包内包含:
<plugin_name>.zip
└─ client.zip
客户端插件任务状态

3.7 客户端插件产物结构
仅 aarch64
<plugin_name>.zip
└─ client.zip
└─ <plugin_name>/
├─ <plugin_name>.so
├─ <plugin_name>.lic
├─ <plugin_name>.json
└─ xplugin.so
仅 window64
<plugin_name>.zip
└─ client.zip
└─ <plugin_name>/
├─ <plugin_name>.dll
├─ <plugin_name>.lic
├─ <plugin_name>.json
└─ xplugin.dll
aarch64 + window64
<plugin_name>.zip
└─ client.zip
├─ aarch64/
│ └─ <plugin_name>/
│ ├─ <plugin_name>.so
│ ├─ <plugin_name>.lic
│ ├─ <plugin_name>.json
│ └─ xplugin.so
└─ win/
└─ <plugin_name>/
├─ <plugin_name>.dll
├─ <plugin_name>.lic
├─ <plugin_name>.json
└─ xplugin.dll
4. 控制器插件编译打包
控制器插件页签用于编译和打包控制器插件,支持 x86 和 aarch64 两种架构:
x86:编译 x86_64 控制器插件。aarch64:编译 aarch64 控制器插件。x86 + aarch64:同时编译两个架构,并打进同一个控制器插件包。
4.1 控制器插件工程结构要求
推荐源码结构(zip 或服务器本机路径最常见):
- 压缩包内包含
controller/目录。 controller/CMakeLists.txt为工程根。- 构建后能够产出目标插件动态库(默认匹配
**/*.so)。
后端会优先以 controller/ 作为 CMake 源目录;若不存在,再自动探测可用的 CMakeLists.txt。
控制器插件页面

4.2 选择源码方式
A. 本地上传 zip
适合临时打包、单次验证。
操作要点:
- 在“源码”区域选择“本地上传 zip”。
- 选择源码 zip 文件。
- 选择目标架构。
- 填写插件元数据并提交。
B. 服务器本机路径
适合服务器上已有源码,不希望重复上传。
操作要点:
- 在“源码”区域选择“服务器本机路径”。
- 填写服务器上的绝对路径,例如
/home/rokae/rokae/xplugin/controller。 - 选择目标架构。
- 填写插件元数据并提交。
注意:这里填写的是服务所在服务器路径,不是当前浏览器所在电脑路径。
控制器插件源码输入

4.3 控制器插件元数据
关键字段说明:
depend:依赖插件列表,可为空。启用:设置插件安装时是否默认启用。min_controller_version:插件运行要求的最小控制器版本。must_controller_version:指定控制器版本约束,可为空。version、author、description:用于插件信息展示。
4.4 提交任务并下载
提交后,页面会轮询任务状态:
pending:已入队running:构建中succeeded:成功,可下载failed:失败,查看日志尾部定位问题
成功后点击“下载”即可获取 plugin_bundle.zip。
控制器插件任务状态

4.5 控制器插件产物结构
实际下载文件是最外层 <plugin_key>.zip,其中固定包含 controller.zip。继续解压 controller.zip 后,才是插件目录结构。
单架构目录(示例:仅选择 x86)
<plugin_key>.zip
└─ controller.zip
└─ <plugin_key>/
├─ <plugin_key>.so
├─ <plugin_key>.lic
└─ <plugin_key>.json
多架构目录(示例:选择 x86 + aarch64)
x86会显示为x86_64aarch64保持aarch64
<plugin_key>.zip
└─ controller.zip
├─ x86_64/
│ └─ <plugin_key>/
│ ├─ <plugin_key>.so
│ ├─ <plugin_key>.lic
│ └─ <plugin_key>.json
└─ aarch64/
└─ <plugin_key>/
├─ <plugin_key>.so
├─ <plugin_key>.lic
└─ <plugin_key>.json
5. 插件安装
详情见 HMI插件->安装与使用
6. 清理缓存
可在设置页签里清理缓存
清理缓存
