wang cong 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
..
android-capacitor 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
public 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
src 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
.gitignore 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
README.md 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
capacitor.config.ts 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
package-lock.json 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
package.json 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
postcss.config.cjs 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
printer.html 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
tailwind.config.cjs 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица
tsconfig.json 054374a049 feat: initialize Mini7 Android Pad application преди 1 седмица

README.md

Mini7-One Android Pad

本目录是 Mini7-One 上位机的 Capacitor Android Pad 工程,直接复用桌面端 src/renderer 下的 React 页面、路由、国际化和样式。

架构

  • React 页面:继续使用桌面端 renderer,不复制页面代码。
  • 移动端适配:src/bridge.ts 提供兼容的 window.apiwindow.electron
  • Android 容器:android-capacitor
  • 仪器通信:Mini7Plugin.java 监听 UDP 9090,TCP 从 8001 开始占用可用端口,并向 React 发送设备事件。
  • 本地设置:业务设置写入 SQLite;仅登录记忆等临时设置使用 Capacitor Preferences。
  • 数据库:使用 @capacitor-community/sqlite,任务、用户、医生、项目参数、结果、设备档案和计时器均读写 Pad 本地数据库。

构建网页资源

cd mobile-app
npm install
npm run build:web
npm run build:web:oem
  • build:web:构建普通版网页资源。
  • build:web:oem:构建 OEM 版网页资源。

Android Studio 调试

普通版与 OEM 版由打开 Android Studio 前最后一次同步的网页资源决定。

在项目根目录 D:\workspace\Mini7-PC-eTrust-desktop 执行:

# 普通版
npm --prefix mobile-app run sync

# OEM 版
npm --prefix mobile-app run sync:oem

# 打开 Android Studio
npm --prefix mobile-app run open

如果终端当前位于 mobile-app\android-capacitor,应使用父目录作为 npm 项目:

# 普通版
npm --prefix .. run sync

# OEM 版
npm --prefix .. run sync:oem

不要在 android-capacitor 目录执行 npm --prefix mobile-app ...,否则 npm 会错误查找 android-capacitor\mobile-app\package.json

同步完成后,在 Android Studio 中选择 app、已连接的 Android Pad,然后点击 Run。Android Studio 会编译并安装最后同步的普通版或 OEM 版。两版使用同一个 Android 包名,安装时会互相覆盖。Pad 与仪器必须处于同一局域网。

构建 APK

cd mobile-app
npm run build:apk
npm run build:apk:oem

也可以在项目根目录执行:

npm run build:pad
npm run build:pad:oem

APK 输出到 mobile-app/dist

Mini7-One-Pad-1.6.21.1-standard-debug.apk
Mini7-One-Pad-1.6.21.1-oem-debug.apk

普通版与 OEM 版使用同一个 Android 包名,安装时会互相覆盖;OEM 标识在构建阶段写入网页资源,不依赖运行时设置。

首次构建会下载 Gradle 8.14.3、Android NDK 27.0.12077973 和 CMake 3.22.1,网络较慢时耗时较长。

当前迁移状态

已完成:

  • Capacitor Android 容器。
  • 现有 React renderer 完整构建。
  • window.api 移动端兼容层。
  • 默认管理员登录和设置持久化。
  • UDP/TCP 原生监听。
  • Mini7 帧校验、帧序号保留、设备信息及模块状态上报。
  • 扫码开始、采样数据、检测结果和报警帧的协议回复、幂等处理及 SQLite 落库。
  • 扫码项目参数校验、旧任务收尾、样本信息确认和检测参数下发。
  • 当前 WiFi 自动读取、周边 WiFi 扫描及 Android 运行时权限申请。
  • WiFi 参数通过已连接的 TCP 仪器下发,协议按仪器固件版本选择 64/96 字节格式。
  • 用户、医生、任务、采样、检测结果、报警历史、阈值结果、项目参数、设备档案、计时器和算法结果的 SQLite 接口。
  • 报告预览、Android 打印服务、CSV/JSON 导入导出。
  • Pad 内置 PCR 4.1 原生算法:C++/MINPACK 完成曲线拟合和指标计算,ONNX Runtime Android 完成 RF/LSTM 推理,无需 Windows pcr.exe 或网络服务。

Android 平台明确不提供:

  • Windows 安装包更新和串口固件升级;Pad 软件使用独立 APK 在线更新。
  • Electron 主进程日志上传;Pad 端需要独立日志采集格式后再接服务器接口。
  • Windows CH340 串口设置;Pad 当前通过局域网 TCP 与仪器通信,因此界面不显示串口设置入口。

未支持的 Android API 会返回明确错误,不再伪造空结果或成功状态。

Pad 软件在线更新

Pad 启动后默认检查以下地址:

普通版:http://onechip-mini7.com/mini7-one-mobile/standard/latest.json
OEM 版:http://onechip-mini7.com/mini7-one-mobile/oem/latest.json

生成普通版或 OEM 版更新文件:

cd mobile-app
npm run prepare:update
npm run prepare:update:oem

生成结果位于:

mobile-app/dist/update/standard/
mobile-app/dist/update/oem/

每个目录都包含 latest.json、APK 和 SHA256 文件。将目录内的全部文件上传到服务器对应目录,不要只上传 APK。

Windows Nginx 示例:

location ^~ /mini7-one-mobile/ {
    alias D:/mini7/mini7-one-mobile/;
    autoindex off;
    add_header Cache-Control "no-cache" always;
}

服务器目录结构:

D:/mini7/mini7-one-mobile/
├── standard/
│   ├── latest.json
│   ├── Mini7-One-Pad-1.6.21.2-standard.apk
│   └── Mini7-One-Pad-1.6.21.2-standard.apk.sha256
└── oem/
    ├── latest.json
    ├── Mini7-One-Pad-1.6.21.2-oem.apk
    └── Mini7-One-Pad-1.6.21.2-oem.apk.sha256

发布新版本时必须同时递增 android-capacitor/app/build.gradle 中的 versionCode,并修改 versionNamemobile-app/package.json 的显示版本。例如 1.6.21.2 使用 mobile-app/package.json1.6.21-2versionName "1.6.21.2" 和大于旧版的 versionCode 1062102。新旧 APK 必须使用相同的 applicationId 和签名证书。首次安装更新时,Android 会要求用户允许 Mini7-One 安装未知应用。

当前构建脚本生成 debug 签名 APK,适合连接的测试 Pad。正式发布前应配置固定的 release keystore;已经安装 debug 版的 Pad 不能直接覆盖为另一证书签名的 release 版,需要先卸载 debug 版再安装正式版。

第三方算法依赖

原生拟合使用 CMinpack(MINPACK 的 C/C++ 实现),其许可证随源码保存在 android-capacitor/app/src/main/cpp/third_party/cminpack/CopyrightMINPACK.txt。本产品包含由芝加哥大学作为阿贡国家实验室运营方开发的软件。