跳到主要内容

插件编译打包

1. 服务入口

  • Web 页面:http://虚拟机ip:8008/
  • 健康检查:http://虚拟机ip:8008/api/health

2. 使用前准备

打开编译打包平台后,页面顶部包含三个页签:

  • 客户端插件:用于 HMI/客户端插件编译打包。
  • 控制器插件:用于控制器插件编译打包。
  • 设置:用于清理编译中间文件、上传临时文件和已生成包。

页面右上角支持中英文切换,切换后页面标题、按钮、提示信息等会同步更新。

页面总览

插件编译平台首页

3. 客户端插件编译打包

客户端插件页签用于打包 HMI/客户端插件,支持 aarch64window64 两种平台:

  • 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 客户端插件的场景。

操作步骤:

  1. 切换到“客户端插件”页签。
  2. 目标架构选择 aarch64
  3. 在“源码”区域选择“本地上传 zip”或“服务器本机路径”。
  4. 若选择 zip,上传包含 Qt 客户端插件工程的源码包。
  5. 若选择服务器本机路径,填写虚拟机上的源码绝对路径。
  6. 填写插件元数据。
  7. 点击“开始编译与打包”。

aarch64 源码输入

这里以服务内 /home/rokae/rokae/xplugin/electricclawplugin/electricclawplugin-hmi 为例。

客户端插件aarch64源码输入

3.3 window64 DLL 打包

适用于 Windows 客户端插件已经在 Windows 环境中编译完成,只需要平台统一打包的场景。

操作步骤:

  1. 切换到“客户端插件”页签。
  2. 目标架构选择 window64
  3. 上传插件 DLL 文件。
  4. 上传依赖文件 xplugin.dll
  5. 填写插件元数据。
  6. 点击“开始编译与打包”。

注意事项:

  • xplugin.dll 文件名必须为 xplugin.dll
  • 仅选择 window64 时,插件名默认从上传的插件 DLL 文件名读取。
  • 仅选择 window64 时,页面不会要求填写源码输入。

window64 DLL 输入

客户端插件window64 DLL输入

3.4 aarch64 + window64 组合打包

当需要同时发布 Linux 客户端插件和 Windows 客户端插件时,可同时勾选 aarch64window64

操作步骤:

  1. 目标架构同时选择 aarch64window64
  2. 提供 aarch64 源码(zip 或服务器本机路径)。
  3. 上传 Windows 插件 DLL。
  4. 上传 xplugin.dll
  5. 填写插件元数据并提交任务。

双平台组合打包

客户端插件双平台组合打包

3.5 客户端插件元数据

客户端插件的元数据字段如下:

  • depend:依赖的客户端插件列表,可为空。
  • ctrlDepend:依赖的控制器插件列表,可为空。
  • 启用:设置插件安装时是否默认启用。
  • min_hmi_version:插件要求的最小 HMI 版本。
  • custom_hmi_version:指定 HMI 版本约束,可为空。
  • versionauthordescribe:用于插件信息展示。

客户端插件的 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. 控制器插件编译打包

控制器插件页签用于编译和打包控制器插件,支持 x86aarch64 两种架构:

  • x86:编译 x86_64 控制器插件。
  • aarch64:编译 aarch64 控制器插件。
  • x86 + aarch64:同时编译两个架构,并打进同一个控制器插件包。

4.1 控制器插件工程结构要求

推荐源码结构(zip 或服务器本机路径最常见):

  • 压缩包内包含 controller/ 目录。
  • controller/CMakeLists.txt 为工程根。
  • 构建后能够产出目标插件动态库(默认匹配 **/*.so)。

后端会优先以 controller/ 作为 CMake 源目录;若不存在,再自动探测可用的 CMakeLists.txt

控制器插件页面

控制器插件编译页面

4.2 选择源码方式

A. 本地上传 zip

适合临时打包、单次验证。

操作要点:

  1. 在“源码”区域选择“本地上传 zip”。
  2. 选择源码 zip 文件。
  3. 选择目标架构。
  4. 填写插件元数据并提交。

B. 服务器本机路径

适合服务器上已有源码,不希望重复上传。

操作要点:

  1. 在“源码”区域选择“服务器本机路径”。
  2. 填写服务器上的绝对路径,例如 /home/rokae/rokae/xplugin/controller
  3. 选择目标架构。
  4. 填写插件元数据并提交。

注意:这里填写的是服务所在服务器路径,不是当前浏览器所在电脑路径。

控制器插件源码输入

控制器插件源码输入 控制器插件服务器本机路径

4.3 控制器插件元数据

关键字段说明:

  • depend:依赖插件列表,可为空。
  • 启用:设置插件安装时是否默认启用。
  • min_controller_version:插件运行要求的最小控制器版本。
  • must_controller_version:指定控制器版本约束,可为空。
  • versionauthordescription:用于插件信息展示。

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_64
  • aarch64 保持 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. 清理缓存

可在设置页签里清理缓存

清理缓存

清理缓存