在 Linux 上使用 Docker 和 Java 开发酷 Q 插件
Posted on Mon 30 April 2018 in misc
最近出于一些奇怪的原因,我需要写个 QQ 机器人。
酷 Q 是个比较常见且好用的机器人框架,但很可惜是 Windows only 的。虽然有官方支持的(使用 Wine 的) Linux Docker 镜像,但为了开发插件,还要设立交叉编译开发环境,十分麻烦。在论坛上发现酷 Q 有 Java 插件,就可以借助 JVM 使用各种原生的工具开发插件,然后扔进 Docker 里的 Wine 的 JRE 去运行。
获取 Docker 镜像和 Java 插件
首先要获取 CoolQ 的 Docker 镜像,并启动一次。这是为了建立基本的酷 Q 目录结构:
coolq/ ├── app │ ├── com.coxxs.music.cpk │ ├── com.coxxs.start │ │ └── start.cfg │ ├── com.coxxs.start.cpk │ ├── com.coxxs.status.cpk │ └── moe.min.qa.cpk ├── bin │ ├── CQP.dll │ ├── gzip.dll │ ├── htmlayout.dll │ ├── libeay32.dll │ ├── libiconv.dll │ ├── sqlite3.dll │ └── zlib1.dll ├── conf └── CQA.exe
然后下载 酷 Q Java SDK 并按提示放入 coolq/app/ 目录中,启动酷 Q 并在插件管理器中启用 Java 插件。插件会提示找不到 JRE,暂时忽略。
下载 Windows JRE
然后,到 http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html 获取32 位的 Windows JRE 压缩包,如 jre-8u202-windows-i586.tar.gz。这里使用压缩包是为了避免额外的安装步骤。
然后将 tar 包解压至 coolq 目录下,解压之后应该有 jre1.8.0_202/bin 等目录。
编辑 coolq/data/app/com.sobte.cqp.jcq/conf/setting.ini 文件,修改 JrePath 指定 JRE 路径(Docker 中的根目录对应 wine 中的 Z:\):
[JavaVM]
JrePath=Z:\home\user\coolq\jre1.8.0_202\
然后重启酷 Q,此时插件应该能找到 JRE。
做插件
参考论坛提供的 Demo 写插件。需要注意 json 文件中的 appid 字段,和 appInfo() 的返回格式。
然后编译构建,将 jar 包和 json 按正确的名称复制到 coolq/app/com.sobte.cqp.jcq/app/ 下,重启酷 Q 就会生效。
使用 maven-assembly-plugin 可以将依赖打进最终生成的 jar 包中。
stdout(竟然)是可用的,可以简单的使用 println() 输出调试信息。但输出的中文会乱码,原因是 Java 在 Windows 上的输出并不是 UTF-8 编码的。参考 https://stackoverflow.com/a/29231668 修改 System.out 的编码后解决。