Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MKLab Logo

MKLab

面向 HarmonyOS 2in1 设备的原生数值计算与科学绘图环境

GitHub · GNU Octave · Qt for HarmonyOS

MKLab 是一个运行在 HarmonyOS 6.1 及以上 2in1 设备上的数值计算与科学绘图应用。项目以 GNU Octave 为数值计算核心,结合 Qt 6 Widgets、Desktop OpenGL 和 QScintilla,提供接近 MATLAB 工作流的桌面式开发体验。

应用介绍

MKLab 面向需要在 HarmonyOS 设备上进行数值分析、脚本编程和科学绘图的用户。应用保留 Octave 的矩阵计算、脚本和函数生态,同时针对 HarmonyOS 的应用沙箱、文件权限、窗口系统和代码签名模型进行了适配。

核心功能

能力 说明
数值计算 基于 GNU Octave,支持矩阵运算、线性代数、统计计算和数值分析
脚本编辑 QScintilla 编辑器,支持 .m 脚本、语法高亮和编辑操作
交互命令 内嵌命令窗口,支持历史命令、补全、错误恢复和 clc
工作区管理 文件系统、工作区变量、编辑器文件和命令历史集中管理
科学绘图 Qt/OpenGL figure,支持二维、三维绘图、中文文本和交互旋转
文件访问 支持 Documents 目录授权和文件夹 URI 持久化
外观体验 Fusion、Fusion Dark 和跟随系统主题,支持中英文界面
HarmonyOS 集成 原生 HAP、分层图标、权限申请、剪贴板和 2in1 窗口适配

当前验证状态

  • HarmonyOS 2in1 原生 Qt GUI 已完成构建、签名和安装验证;
  • 命令窗口可执行交互命令,错误命令不会导致应用退出;
  • Documents 文件访问、文件夹授权持久化和剪贴板读取已验证;
  • Qt/OpenGL figure、中文绘图文本、点击交互和 Rotate 已验证;
  • 构建目标为 arm64-v8a,应用面向 2in1 设备。

开发环境

项目 版本或要求
宿主系统 Ubuntu 24.04
HarmonyOS Command Line Tools 26.0.0.621
HarmonyOS SDK API 26
应用兼容版本 API 23,对应 HarmonyOS 6.1
LLVM / flang 22.1.8
Qt Qt 6.12.0-beta2,Desktop OpenGL target
Octave GNU Octave 11.3.0
目标三元组 aarch64-unknown-linux-ohos
应用 ABI arm64-v8a
设备类型 2in1

默认 HarmonyOS 工具链目录为 ~/Environments/HWCmd,SDK 路径由 scripts/env.sh 设置为 $HWCMD/sdk/default/openharmony

宿主依赖

sudo apt update
sudo apt install -y \
  build-essential autoconf automake autoconf-archive libtool libtool-bin \
  bison flex gperf texinfo gawk cmake ninja-build pkg-config \
  xz-utils unzip zip rsync patchelf libquadmath0 default-jdk \
  curl git python3 python3-venv

环境准备完成后运行:

bash build-tools/check-environment.sh

打包时需要 CJK 字体。可以使用系统中的 Droid Sans Fallback,也可以显式指定:

export MKLAB_CJK_FONT=/absolute/path/to/DroidSansFallbackFull.ttf

项目结构

MKLab/
├── app/                  HarmonyOS 入口、权限、图标和 CMake 工程
├── assets/               Logo、UI 图标、Qt 翻译和第三方许可证
├── build-tools/          公共构建入口、环境检查和发布脚本
├── patches/              Qt、Octave、GLU 的 HarmonyOS 兼容补丁
├── scripts/              具体构建脚本、编译器包装器和配置模板
├── tests/                Fortran、OpenBLAS/LAPACK 阶段测试
├── vcpkg-triplets/       HarmonyOS arm64 自定义 vcpkg triplet
└── build/                本地生成目录,不提交 Git

build/ 是本地构建工作区,包含下载的上游源码、编译目录、安装前缀、日志、生成的 DevEco 工程和 HAP,不进入公开仓库。

上游源码准备

MKLab 不分发体积较大的上游源码、SDK 或 LLVM 发布包。首次构建前,需要准备:

build/src/octave-11.3.0
build/src/qt5
build/src/llvm-project-22.1.8.src
build/toolchain/LLVM-22.1.8-Linux-X64
build/vcpkg/vcpkg
内容 来源或版本
GNU Octave 11.3.0
Qt super-repo Qt 6.12.0-beta2
LLVM/flang LLVM 22.1.8
vcpkg microsoft/vcpkg
OpenBLAS 0.3.34

Qt 和 Octave 的 HarmonyOS 改动由 patches/ 中的补丁提供。不要把打过补丁的上游源码目录提交到项目中。

构建流程

一键构建

在项目根目录执行:

bash build-tools/check-environment.sh
bash build-tools/build-all.sh

完整构建会依次构建数值库、Octave、Qt、绘图库、GUI 和 HarmonyOS HAP。

分阶段构建

阶段 内容 主要入口
0 检查宿主工具、SDK、flang 和构建准备状态 build-tools/check-environment.sh
1 构建 flang runtime scripts/build-flang-rt.sh
2 构建 OpenBLAS、vcpkg C/C++ 依赖、ARPACK-NG 和 qrupdate-ng build-openblas.shbuild-deps-vcpkg.shbuild-fortran-deps.sh
3 构建 octave-cli 和 Octave 数值核心 scripts/build-octave-cli.sh all
4 构建 Qt host/target 并修复 Qt SONAME scripts/build-qt.sh allfix-qt-soname.sh
5 构建 GLU、QScintilla 和 Octave Qt GUI scripts/build-glu.shbuild-qscintilla.shbuild-octave-gui.sh all
6 生成入口 .so、DevEco 工程、HAP 并静态验收 scripts/build-hap.sh all

需要单独重跑阶段时:

bash build-tools/build-all.sh stage 2
bash build-tools/build-all.sh stage 5
bash build-tools/build-all.sh package
bash build-tools/build-all.sh verify

手动使用交叉编译环境时:

source scripts/env.sh
mklab_status
ohos_arm64

关键构建约束

  • flang runtime 与 flang 编译器必须保持 LLVM 22.1.8 版本一致;
  • OpenBLAS 必须使用带真实 Fortran LAPACK 的版本,不能被 vcpkg 的 NOFORTRAN 同名库覆盖;
  • Qt target 必须使用 Desktop OpenGL,Octave 的固定功能绘图器依赖 OpenGL 1.x 接口;
  • Qt SONAME 应在链接阶段生成,打包阶段不要用 patchelf 改写 Qt/Octave 的大型动态表;
  • .oct 模块必须位于受 HarmonyOS 签名覆盖的 native 库目录;
  • 构建脚本默认只生成 arm64-v8a,不包含 x86 或 x86_64 产物。

打包、签名与安装

生成 HAP:

bash build-tools/build-all.sh package

产物通常位于:

build/octave-harmonyos-app/entry/build/default/outputs/default/
├── entry-default-unsigned.hap
└── entry-default-signed.hap

没有 DevEco signingConfigs 时只会生成 unsigned HAP;配置调试或发布签名后才会生成 signed HAP。签名材料只保留在本机,不提交 Git。

使用 Windows DevEco Studio 时,将 build/octave-harmonyos-app/ 复制到 Windows,打开工程根目录而不是只打开 entry/,确认 bundleName、API、ABI 和签名配置后执行 Build/Sign。

静态验收:

bash build-tools/build-all.sh verify \
  build/octave-harmonyos-app/entry/build/default/outputs/default/entry-default-signed.hap

测试与验收

bash tests/phase1/run.sh   # Fortran 工具链和数值验证
bash tests/phase2/run.sh   # OpenBLAS/LAPACK 数值验证

真机回归至少覆盖:

  • 应用启动、退出和再次启动;
  • 命令窗口交互、历史命令、补全、错误命令恢复和 clc
  • .m 文件打开、编辑、保存和运行;
  • Documents 权限申请、文件夹 URI 持久化和文件浏览;
  • 浅色、深色和跟随系统主题切换;
  • 二维 plot、三维 plot、中文文本、figure 点击和 Rotate;
  • 剪贴板复制与粘贴。

已知限制

  • 当前使用 API 26 SDK 构建,应用兼容版本为 API 23;正式发布前需要在目标 HarmonyOS 6.1 设备上逐机型验证;
  • 普通应用沙箱不提供 Octave 所需的通用 PTY 和任意外部进程环境,system() 等功能受 HarmonyOS 平台限制;
  • mkoctfile 和运行期编译型 pkg install 会生成 native 代码,不属于当前代码签名模型支持的路径;
  • 当前未集成 gl2ps,OpenGL figure 的打印和矢量导出能力受限;
  • SPQR、curl 和完整 terminfo 尚未集成。

许可证与第三方声明

MKLab 使用 GNU Octave 作为数值计算核心。Octave、Qt、OpenBLAS、GLU、QScintilla、Oxygen 图标、JetBrains 图标以及 Qt 翻译资源分别遵循其各自的许可证和归属要求。

项目内的第三方许可证文件位于 assets/ 及生成 HAP 的许可证资源目录中。公开发布前,请根据实际分发内容补充项目许可证,并保留所有上游版权声明、许可证文本和源码获取方式。

贡献

贡献构建或移植改动前,请阅读 CONTRIBUTING.md。提交前运行:

bash -n build-tools/*.sh
git diff --check
bash build-tools/check-environment.sh

项目地址:github.com/HanversionOvO/MKLab

About

Calculating tools for HarmonyOS 2in1 or tablet devices

Resources

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages