在 HarmonyOS 应用开发中,Stage 模型和 FA 模型是两种不同的架构模式,它们在 target 配置(如 source 源码集、deviceType 设备适配)上存在显著差异。以下是两者的对比分析:
1. Source 源码集差异
FA 模型
- 目录结构:
FA 模型的源码通常集中在src/main/js/或src/main/java/目录下,资源文件(如布局、图片)在resources目录中。 - 模块化:
代码按功能划分(如ability、pages),但缺乏明确的层级隔离,所有代码默认处于同一命名空间。 - 示例配置:
在config.json中通过sources字段指定入口文件(如"js": ["src/main/js/default"])。
Stage 模型
- 模块化设计:
采用更清晰的模块化结构,每个模块(如entry、feature)有独立的src/main/目录,包含ets(TypeScript)、resources等子目录。 - 源码隔离:
支持多模块协同开发,通过oh-package.json管理依赖,源码按模块物理隔离。 - 示例配置:
在module.json5中通过srcEntrance指定入口文件路径(如"./ets/Application/MyAbilityStage.ts")。
2. DeviceType 设备适配差异
FA 模型
-
配置方式:
在config.json的deviceTypes数组中声明支持的设备类型(如"phone"、"tablet")。 -
局限性:
设备适配逻辑通常通过条件资源(如resources-phone、resources-tablet)或代码中动态判断实现,缺乏统一规范。 -
示例代码:
{ "deviceTypes": ["phone", "tablet"] }
Stage 模型
-
动态适配:
在module.json5中通过abilities的supportDimensions和defaultDimension字段定义设备适配策略(如"screen"、"window")。 -
资源匹配:
支持更灵活的resources目录结构(如base、phone、car),结合resourceManagerAPI 动态加载资源。 -
示例代码:
json { "abilities": [{ "supportDimensions": ["screen", "window"], "defaultDimension": "screen" }] }
3. 关键差异总结
| 特性 | FA 模型 | Stage 模型 |
|---|---|---|
| 源码组织 | 扁平化结构,依赖 config.json | 模块化设计,依赖 module.json5 |
| 设备适配 | 静态声明 deviceTypes | 动态支持多维度(屏幕、窗口等) |
| 资源管理 | 条件资源目录(如 resources-phone) | 标准化 base/ + 设备类型目录 |
| 适用场景 | 轻量级应用,兼容旧版本 | 复杂应用,多设备协同,长生命周期 |
4. 迁移建议
-
从 FA 到 Stage:
- 重构目录结构,按模块拆分代码。
- 将
config.json配置迁移到module.json5,注意字段差异(如deviceTypes→supportDimensions)。 - 使用
ResourceManager替代静态资源路径。
-
工具支持:
利用 DevEco Studio 的 迁移向导 自动转换部分配置。
通过理解这些差异,开发者可以更高效地选择或迁移到适合的模型,尤其在多设备适配和大型项目开发中,Stage 模型的优势更为明显。