Harmony OS5 对比Stage与FA模型下target的差异,如source源码集、deviceType设备适配

95 阅读2分钟

在 HarmonyOS 应用开发中,​​Stage 模型​​和 ​​FA 模型​​是两种不同的架构模式,它们在 target 配置(如 source 源码集、deviceType 设备适配)上存在显著差异。以下是两者的对比分析:


1. ​​Source 源码集差异​

​FA 模型​

  • ​目录结构​​:
    FA 模型的源码通常集中在 src/main/js/ 或 src/main/java/ 目录下,资源文件(如布局、图片)在 resources 目录中。
  • ​模块化​​:
    代码按功能划分(如 abilitypages),但缺乏明确的层级隔离,所有代码默认处于同一命名空间。
  • ​示例配置​​:
    在 config.json 中通过 sources 字段指定入口文件(如 "js": ["src/main/js/default"])。

​Stage 模型​

  • ​模块化设计​​:
    采用更清晰的模块化结构,每个模块(如 entryfeature)有独立的 src/main/ 目录,包含 ets(TypeScript)、resources 等子目录。
  • ​源码隔离​​:
    支持多模块协同开发,通过 oh-package.json 管理依赖,源码按模块物理隔离。
  • ​示例配置​​:
    在 module.json5 中通过 srcEntrance 指定入口文件路径(如 "./ets/Application/MyAbilityStage.ts")。

2. ​​DeviceType 设备适配差异​

​FA 模型​

  • ​配置方式​​:
    在 config.json 的 deviceTypes 数组中声明支持的设备类型(如 "phone""tablet")。

  • ​局限性​​:
    设备适配逻辑通常通过条件资源(如 resources-phoneresources-tablet)或代码中动态判断实现,缺乏统一规范。

  • ​示例代码​​:

    {
      "deviceTypes": ["phone", "tablet"]
    }
    

​Stage 模型​

  • ​动态适配​​:
    在 module.json5 中通过 abilities 的 supportDimensions 和 defaultDimension 字段定义设备适配策略(如 "screen""window")。

  • ​资源匹配​​:
    支持更灵活的 resources 目录结构(如 basephonecar),结合 resourceManager API 动态加载资源。

  • ​示例代码​​:

    json
    {
      "abilities": [{
        "supportDimensions": ["screen", "window"],
        "defaultDimension": "screen"
      }]
    }
    

3. ​​关键差异总结​

​特性​​FA 模型​​Stage 模型​
​源码组织​扁平化结构,依赖 config.json模块化设计,依赖 module.json5
​设备适配​静态声明 deviceTypes动态支持多维度(屏幕、窗口等)
​资源管理​条件资源目录(如 resources-phone标准化 base/ + 设备类型目录
​适用场景​轻量级应用,兼容旧版本复杂应用,多设备协同,长生命周期

4. ​​迁移建议​

  • ​从 FA 到 Stage​​:

    1. 重构目录结构,按模块拆分代码。
    2. 将 config.json 配置迁移到 module.json5,注意字段差异(如 deviceTypes → supportDimensions)。
    3. 使用 ResourceManager 替代静态资源路径。
  • ​工具支持​​:
    利用 DevEco Studio 的 ​​迁移向导​​ 自动转换部分配置。

通过理解这些差异,开发者可以更高效地选择或迁移到适合的模型,尤其在多设备适配和大型项目开发中,Stage 模型的优势更为明显。