Files
curios/docs/harmony-connector.md
T

84 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Harmony Connector
插件 ID:`dev.trove.harmony-connector`。版本:`0.1.0`。
面向 HarmonyOS 6 的 USB 文件传输插件,提供设备选择、存储与目录浏览、分页、名称筛选、新建目录,以及单文件发送/接收、字节进度与取消。使用 libmtp 1.1.23 和 libusb 1.0.30,无需手机开发者模式、HDC、ADB 或 Homebrew 运行依赖。
## 安装与使用
在 Trove 添加 Git 软件源:
- 仓库地址:`https://git.render.ink/trove/curios.git`
- 唯一 ID:`trove-official`(仓库 `source/index.json` 顶层 `id`)。
- 显示名称:可以自定义,例如「Trove 官方软件源」。
刷新源后安装 **Harmony Connector**。私有仓库使用本机 Git 凭据。当前发布的是 Apple Silicon (`aarch64-apple-darwin`) 包,部署目标为 macOS 13 及以上;Intel 需要在对应 Mac 上构建并追加该架构产物,未发布未经验证的 Intel 包。
1. 解锁手机,用支持数据传输的 USB 线连接 Mac。
2. 在手机 USB 选项中选择「传输文件」,允许访问。
3. 扫描、选择设备并连接,打开目标文件夹。
4. 点击「发送文件」从 Mac 选择一个文件;点击文件旁的「接收」选择 Mac 接收文件夹。
本插件只访问手机通过 MTP 开放的存储。目录来自设备对象 ID,不映射为 Android 路径。HarmonyOS 6 在文件传输模式下允许导出图库内容,导入图库需要图片传输模式;本版未实现 PTP 图库导入。[华为 HarmonyOS 6 官方说明](https://consumer.huawei.com/cn/support/content/zh-cn16090699/)
没有发现设备时,检查数据线和 USB 模式、保持手机解锁,退出占用手机的其他传输应用后重试。取消或 USB 操作失败会释放会话,请重新连接。取消是协作式的,需要等待手机或 USB 超时返回,不保证立即完成。
## 文件保护与边界
- 一次传输一个普通文件;目录请先压缩。不提供删除手机内容的操作。
- 拒绝同名覆盖。接收使用目标目录内的隐藏临时文件,校验长度并同步后通过原子无覆盖操作保存。发送会校验目标名称、存储空间和传输后设备报告的长度。
- 长度校验不是内容哈希验证。实际设备验收需回传文件并比较 SHA-256。
- 接收失败或正常取消会清理本次临时文件。手机端可能保留未完成的上传对象,需要在手机上检查处理。
- 不在传输过程中关闭插件。强制结束进程、USB 长时间阻塞或断电时可能留下 `.harmony-*.part`;正常退出请求最多等待约 3.5 秒,再由底座回收进程。重新启动不会扫描或删除用户目录里的历史临时文件。
- 目前不提供无线、批量/递归目录传输、断点续传或图库导入。跨存储、机型文件权限与大文件限制以实际设备为准。
## 构建、验证与发布
要求 macOS、Xcode Command Line Tools、Rust/Cargo、Node.js、pnpm、make、pkg-config。源码归档及哈希固定在 `vendor/harmony-connector/`。构建不需要另装 libmtp。
```sh
pnpm install --frozen-lockfile
export TROVE_BIN=/absolute/path/to/app/target/debug/trove
pnpm run harmony:test
pnpm run harmony:pack
pnpm run release:prepare --entries dist/harmony-release.json
```
以上命令只构建 Harmony Connector,发布时保留生产索引中其他插件和历史版本。索引和不可变 `.curio` 包必须同一提交推送,不能覆盖已发布的同版本同架构文件。
推送后验证真实 Git 软件源:
```sh
TROVE_APP_DIR=/absolute/path/to/app \
pnpm run verify --remote-source https://git.render.ink/trove/curios.git \
--source-id trove-official --source-kind git
```
界面测试使用独立的显式模拟设备,预览脚本和数据不进入安装包:
```sh
pnpm run harmony:build
node tools/preview-harmony.mjs
# 打开 http://127.0.0.1:18770
```
## 代码与接口
| 位置 | 职责 |
| --- | --- |
| `curios/harmony-connector/ui/` | 独立界面,通过版本化 Trove SDK 调用 Host 文件选择器与 `@self` |
| `native/src/connector.rs` | 会话串行化、文件校验、后台传输任务、取消及完成状态 |
| `native/src/mtp.rs`、`mtp_bridge.c` | libmtp 所有权、结构转换、文件描述符传输 |
| `native/src/wire.rs` | Trove Wire v1 认证握手、请求分发与退出 |
| `build.mjs`、`legal/` | 固定依赖构建、动态库路径修正、签名与第三方声明 |
`@self` 接口:`info`、`devices`、`connect({id})`、`disconnect`、`list({storage,parent,offset?})`、`mkdir({storage,parent,name})`、`transfer(...)`、`transferStatus`、`cancelTransfer({id})`。根目录为 `0xffffffff`;目录响应每页最多 500 个条目,传输异步返回任务 ID,界面轮询实际进度。后端同一时刻仅执行一个 USB 操作;进度查询和取消不等待 USB 锁。重新连接后必须重新获取对象列表。
## 验证记录与真机验收
开发机的原生 USB 扫描正常返回空设备列表。完成的自动测试包含 10 项传输行为测试、2 项界面数据测试,以及 Trove 的握手、并发响应、退出协议测试;传输行为测试使用独立内存设备并实际读写临时目录。浏览器中验证模拟设备选择、导航、中文目录、筛选、不可信文件名显示、进度、完成和取消状态。
**这些结果不能代替 HarmonyOS 6 真机兼容性验收。** 当前未记录任何机型的真实 USB 往返或吞吐量。连接实际手机后,按[调研文档验收清单](research/harmony-connector.md#验收与尚未证明的部分)补充完整机型/系统版本、空文件/中文/二进制/大文件往返 SHA-256、图库导出、取消、拔线、重新连接及退出的结果。
调研依据与备选 HDC 方案见[技术调研](research/harmony-connector.md)。依赖构建与替换说明见[第三方声明](../curios/harmony-connector/legal/THIRD-PARTY.md)。