鸿蒙应用--hap应用部署包,har静态共享包,hsp动态共享包//对比:名称,用途,打包内容,依赖方式,代码隔离,版本管理

不同维度的对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在鸿蒙(HarmonyOS)开发中,HAPHARHSP 是三种关键的包格式,分别承担不同的角色和功能。以下是它们的详细对比与使用场景解析:


1. 核心概念

类型全称定位特点
HAPHarmonyOS Ability Package应用部署包(安装单元)直接运行在设备上,包含独立功能模块
HARHarmonyOS Archive静态共享包(开发期复用)编译时嵌入,代码/资源复制到依赖模块
HSPHarmonyOS Shared Package动态共享包(运行期复用)运行时动态加载,多模块共享同一份代码

2. 详细对比

(1) HAP(应用包)
  • 用途
    • 应用的最终安装包,包含 Ability、资源、库文件等。
    • 一个应用可由多个 HAP 组成(主模块 + 功能模块)。
  • 关键特性
    • 支持按需下载(如用户需要时再安装特定功能模块)。
    • 每个 HAP 可独立更新和维护。
  • 示例
    entry.hap    # 主模块(必须)
    camera.hap   # 相机功能模块(按需安装)
    
(2) HAR(静态共享包)
  • 用途
    • 封装公共代码(如工具类、自定义组件、资源文件),供其他模块复用。
    • 编译时将内容拷贝到依赖的 HAP/HSP 中。
  • 关键特性
    • 增加最终包体积(重复代码)。
    • 适合复用稳定、不频繁修改的代码。
  • 示例
    utils.har    # 包含日期处理、网络请求工具类
    
(3) HSP(动态共享包)
  • 用途
    • 提供运行时共享的代码/资源,多个模块共用同一份代码
    • 依赖方通过动态加载方式使用。
  • 关键特性
    • 减少包体积(避免重复代码)。
    • 支持跨应用共享(需签名一致)。
    • 适合高频变化的公共逻辑(如主题、多语言)。
  • 示例
    theme.hsp    # 动态主题包,多个 HAP 共用
    

3. 使用场景

(1) 选择 HAP 的场景
  • 需要独立安装的功能模块(如电商应用的商品详情模块)。
  • 按需加载场景(如游戏中的关卡资源包)。
(2) 选择 HAR 的场景
  • 公共工具类(如日志工具 LoggerUtil)。
  • 自定义 UI 组件库(如统一按钮样式 ButtonStyle)。
(3) 选择 HSP 的场景
  • 多应用共享的核心 SDK(如支付 SDK)。
  • 动态主题/皮肤切换功能。
  • 高频更新的业务逻辑(如 A/B 测试功能)。

4. 技术实现对比

维度HAPHARHSP
打包内容Ability、资源、依赖库代码、资源、不含 Ability代码、资源、不含 Ability
依赖方式独立安装编译时复制到依赖模块运行时动态加载
代码隔离独立沙箱环境代码与依赖模块合并独立 ClassLoader 加载
版本管理可独立更新需重新编译所有依赖模块可独立更新(需兼容性保证)

5. 开发示例

(1) 定义 HAR
  1. 创建 utils.har 包:
    // utils.har/src/main/ets/utils/Logger.ets
    export class Logger {
      static info(msg: string) {
        console.log(`[INFO] ${msg}`);
      }
    }
    
  2. 在 HAP 中引用:
    // entry/oh-package.json
    {
      "dependencies": {
        "utils": "file:../utils.har"
      }
    }
    
(2) 定义 HSP
  1. 创建 network.hsp
    // network.hsp/src/main/ets/network/ApiClient.ets
    export class ApiClient {
      static fetchData(url: string) { /* ... */ }
    }
    
  2. 在 HAP 中动态加载:
    // 加载 HSP
    let hspContext = context.createBundleContext("com.example.network");
    hspContext.loadHsp("network.hsp").then(() => {
      const ApiClient = require("network.hsp/ApiClient");
      ApiClient.fetchData("https://api.example.com");
    });
    

6. 选择建议

  • 代码复用性强且稳定HAR
  • 多模块共享且需减少体积HSP
  • 独立功能模块/按需安装HAP

通过合理组合 HAPHARHSP,可以构建高可维护、低冗余的鸿蒙应用架构。


在鸿蒙(HarmonyOS)生态中,HAR(HarmonyOS Archive)HSP(HarmonyOS Shared Package) 的命名直接体现了它们的功能特性和设计目标。以下是名称的由来及背后的逻辑:


1. HAR(HarmonyOS Archive)

(1) 名称解析
  • HarmonyOS:标识其为鸿蒙生态专用格式。
  • Archive(归档):源自软件工程中“静态归档文件”的概念,强调 代码/资源的静态集合,类似于 Java 的 JAR(Java Archive)或 C/C++ 的静态库(.a/.lib)。
(2) 命名的核心原因
  • 静态复用:HAR 的内容在 编译时被复制到依赖模块 中,形成代码的静态归档(类似“粘贴”),最终产物会包含重复代码。
  • 功能隐喻Archive 表示“封存”的代码包,开发者可通过引用 HAR 快速获取预定义的公共能力(如工具类、组件库)。
(3) 类比其他技术
鸿蒙 HAR其他技术类比共同点
静态共享代码/资源Java JAR 包编译时嵌入,无法运行时共享
无独立进程或动态加载C/C++ 静态库(.a/.lib)直接链接到可执行文件中

2. HSP(HarmonyOS Shared Package)

(1) 名称解析
  • HarmonyOS:标识其为鸿蒙生态专用格式。
  • Shared(共享):强调 代码/资源的动态共享,类似于动态链接库(如 Windows 的 DLL 或 Linux 的 .so)。
  • Package:表明其为可独立分发、动态加载的模块化单元。
(2) 命名的核心原因
  • 动态复用:HSP 在 运行时被动态加载,多个模块共享同一份代码,避免重复占用存储空间。
  • 跨应用/模块协作Shared 体现其支持跨模块、跨应用共享的特性(需签名一致),符合鸿蒙“超级终端”的分布式理念。
(3) 类比其他技术
鸿蒙 HSP其他技术类比共同点
动态共享代码/资源Android AAR(动态特性)运行时加载,按需使用
跨模块复用Windows DLL通过动态链接减少体积

3. 名称背后的设计哲学

(1) HAR:静态化与开发效率
  • 设计目标:快速复用稳定代码,减少重复开发。
  • 名称契合点Archive 隐含“稳定归档”,适合长期不变的公共代码(如日期处理工具)。
(2) HSP:动态化与资源优化
  • 设计目标:支持灵活扩展、减少冗余,适应多设备协同场景。
  • 名称契合点Shared 体现分布式能力,如手机、平板共享同一主题包(HSP)。

4. 命名与功能对应表

能力维度HAR(Archive)HSP(Shared Package)
复用时机编译时(代码复制)运行时(动态加载)
包体积影响增加(重复代码)减少(共享代码)
更新维护需重新编译所有依赖模块可独立更新(热修复支持)
跨应用支持不支持支持(需相同签名)

5. 实际应用示例

(1) HAR 场景
  • 名称体现:将通用组件库归档为 ui-components.har
    # 项目结构
    ├── app
    │   └── entry.hap   # 主模块(依赖 har)
    └── libraries
        └── ui-components.har  # 静态归档包
    
(2) HSP 场景
  • 名称体现:动态主题包 dark-theme.hsp,供所有 HAP 共享。
    // 动态加载 HSP
    const themeHsp = await context.loadHsp("dark-theme.hsp");
    const theme = themeHsp.getResourceManager().getColor("primary_color");
    

总结

  • HARArchive 强调静态归档、开发期复用,适合稳定代码。
  • HSPShared 突出动态共享、运行期协作,契合鸿蒙分布式架构。
  • 名称与功能的精准对应,降低了开发者的理解成本,体现了鸿蒙在工程规范性上的考量。
### 鸿蒙操作系统中的HARHSPHAP文件格式或组件类型的区别 #### HAP (Harmony Ability Package) HAP应用安装和运行的基本单元,由代码、资源、第三方库以及配置文件等组成。这种包主要用于构建独立的应用程序模块,并且分为两种类型:entry 和 feature。对于仅包含 `UIAbility` 组件而不需要使用 `ExtensionAbility` 组件的情况,建议通过单一的 entry 类型 HAP 来完成应用程序的开发工作[^3]。 ```json { "type": "entry", "name": "MainApp" } ``` #### HAR (Harmony Archive) 作为静态共享库的形式存在,HAR 主要用于提供给其他 HAP 使用的功能集合或是公共资源。它不会被直接部署到设备上执行,而是被打包依赖它的 HAP 中一同发布。因此,在实际操作过程中,开发者通常会先创建好所需的 HAR 文件再将其加入至目标项目的编译流程里去[^2]。 ```bash # 编译命令示例 hbuildc --target=har -o output_directory source_files... ``` #### HSP (Harmony Shared Package) 不同于上述两者的是,HSP 属于一种动态共享库形式的存在。它可以允许同一组织内的不同应用程序间实现代码级与资源配置上的共用;然而需要注意的是,这类包并不支持单独安装备份或者启动运作——它们总是伴随着某个具体的 HAP 而存在并发挥作用。另外值得注意的一点在于,为了确保兼容性和稳定性,HSP 的版本应当同所依附的那个 HAP 版本保持同步更新状态。除此之外,由于技术架构方面的原因,现阶段只有 Stage 模式的 API 可供选用,并且最低要求为 API Level 12以上[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值