Files
LanMountainDesktop/docs/02-AirApp开发/README.md

53 lines
2.8 KiB
Markdown
Raw Normal View History

2026-08-11 23:03:55 +08:00
# AirApp 运行时与窗口轻应用
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
## AirApp 是统一扩展系统
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
AirApp轻应用是阑山桌面的统一扩展系统。开发者通过 `LanMountainDesktop.AirAppSdk` 可以开发两种形态的轻应用:
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
- **桌面组件**:放置到桌面网格,主进程内渲染(`AddAirAppComponent<TControl>`)。
- **窗口轻应用**:独立窗口应用,由 `AirAppHost` 进程隔离承载(`AddAirAppWindow<TWindow>`)。
## 运行时拓扑
2026-06-08 03:54:33 +08:00
```
2026-08-11 23:03:55 +08:00
主 Host 内置桌面组件 / 第三方 AirApp 桌面组件
↓ 组件内调用 OpenWindowAsync(windowId)
Host 内 AirAppLauncherService
2026-08-11 23:03:55 +08:00
↓ AirAppOpenRequest含 --app-package 包目录IPC
独立 LanMountainDesktop.AirAppRuntime
↓ 启动或激活
2026-08-11 23:03:55 +08:00
独立 LanMountainDesktop.AirAppHost 进程(--app-package --target-entry-id
↓ 按 appId 加载第三方 AirApp 程序集,解析 [AirAppEntrance]
AirAppWindowLoader → 创建 IAirAppWindow → 内容嵌入 FAAppWindow 外壳
2026-06-08 03:54:33 +08:00
```
2026-08-11 23:03:55 +08:00
## 各进程职责
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
| 进程/模块 | 职责 |
|----------|------|
| `LanMountainDesktop` Host | 扫描/加载 AirApp`airapp.json` + `[AirAppEntrance]`ALC 隔离);渲染桌面组件;组装 `AirAppOpenRequest` 并调用 Runtime IPC |
| `LanMountainDesktop.Launcher` | OOBE、Splash、版本选择、预启动 Runtime、启动 Host |
| `LanMountainDesktop.AirAppRuntime` | 生命周期与控制 IPC、实例去重、启动/激活/关闭 AirAppHost转发 `--app-package` |
| `LanMountainDesktop.AirAppHost` | 内置 3 个窗口world-clock/whiteboard/rss-reader+ 按 `--app-package` 加载第三方 AirApp 窗口 |
| `LanMountainDesktop.AirAppSdk` | 统一 SDK`IAirApp`/`AirAppBase`/`IAirAppWidget`/`IAirAppWindow`/`airapp.json` |
| `LanMountainDesktop.AirAppTemplate` | `dotnet new lmd-airapp` 模板(组件 + 窗口 + 设置示例) |
| `LanMountainDesktop.AirAppDevServer` | 开发者工具:监视项目 → `dotnet build``.laapp` → 打包/预览 |
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
## 窗口轻应用开发
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
1.`dotnet new lmd-airapp` 创建 AirApp 工程。
2.`AirApp.Initialize``AddAirAppWindow<MyWindow>("my-window", "My Window")`
3. 组件内通过 `AirAppComponentContext.OpenWindowAsync("my-window")` 打开窗口。
4. `dotnet build` 生成 `.laapp`,安装到 `Extensions/AirApps`
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
第三方 AirApp 窗口由 `AirAppHost` 进程承载:`AirAppWindowLoader` 读取包目录的 `airapp.json`,用 `AirAppLoader` 加载入口程序集,按 `--target-entry-id` 解析 `AirAppWindowRegistration`,把 `IAirAppWindow.Content` 嵌入 FAAppWindow 外壳。
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
## 内置窗口链路(回归保障)
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
`world-clock``whiteboard``rss-reader` 三个内置窗口保持原有路径(不携带 `--app-package`),行为不变。
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
## 相关文档
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
- [AirApp 开发指南](../01-AirApp开发/)
- [AirApp SDK V1 迁移指南](../AIRAPP_SDK_V1_MIGRATION.md)