鸿蒙开发核心概念与工程结构

HAP与HSP的作用与区别

HAP(Harmony Ability Package)

HAP是应用安装和运行的基本单元,分为两种类型:

  • entry:应用的主模块,作为应用的入口,提供基础功能,一个应用对同一设备类型必须有且只有一个entry类型的HAP

  • feature:应用的动态特性模块,作为能力扩展,可根据需求和设备类型选择性安装

配置示例(feature类型HAP):

{
  "module": {
    "name": "application",
    "type": "feature",
    "description": "$string:module_desc",
    "mainElement": "ApplicationAbility",
    "deviceTypes": ["phone"],
    "deliveryWithInstall": false,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "ApplicationAbility",
        "srcEntry": "./ets/applicationability/ApplicationAbility.ets",
        "description": "$string:ApplicationAbility_desc",
        "icon": "$media:layered_image",
        "label": "$string:ApplicationAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true
      }
    ]
  }
}

HSP(Harmony Shared Package)

HSP是动态共享包,分为应用内HSP和集成态HSP,主要优势:

  • 多个HAP/HSP共用代码和资源,提高复用性和可维护性

  • 编译打包时仅保留一份HSP代码和资源,有效控制应用包大小

  • 运行时按需加载,提升应用性能

HAP、HAR、HSP对比:

规格 HAP HAR HSP
支持声明UIAbility组件 √ × ×
支持声明pages页面 √ × √
包含资源文件与.so文件 √ √ √
可独立安装运行 √ × ×

鸿蒙工程目录结构

工程级目录

MyApplication/
├── AppScope/ # 应用全局资源和配置
├── entry/ # 主模块,编译生成HAP
├── oh_modules/ # 工程依赖包
├── build-profile.json5 # 工程级配置信息
├── hvigorfile.ts # 工程级编译构建脚本
└── oh-package.json5 # 工程级依赖配置

模块级目录(entry)

entry/
├── src/
│ └── main/
│ ├── ets/ # ArkTS源码目录
│ │ ├── entryability/ # 应用入口能力
│ │ └── pages/ # UI页面
│ ├── resources/ # 模块资源文件
│ └── module.json5 # 模块配置文件
├── build-profile.json5 # 模块级配置
└── hvigorfile.ts # 模块级构建脚本

关键目录说明

  • AppScope/resources:应用全局资源,包括字符串、颜色、图片等

  • entry/src/main/ets:存放ArkTS源码,按功能分为entryability和pages

  • resources:分为element(字符串、颜色等)和media(图片、音频等)

  • module.json5:模块配置文件,定义模块名称、类型、能力等

module.json5配置详解

核心配置项

{
  "module": {
    "name": "entry",                # 模块名称
    "type": "entry",                # 模块类型(entry/feature/har/shared)
    "description": "$string:module_desc",  # 模块描述
    "mainElement": "EntryAbility",  # 入口能力名称
    "deviceTypes": ["phone", "tablet"],  # 支持的设备类型
    "deliveryWithInstall": true,    # 是否随应用一起安装
    "installationFree": false,      # 是否支持免安装运行
    "pages": "$profile:main_pages", # 页面配置
    "abilities": [                  # 能力列表
      {
        "name": "EntryAbility",     # 能力名称
        "srcEntry": "./ets/entryability/EntryAbility.ets",  # 代码路径
        "icon": "$media:icon",      # 图标资源
        "label": "$string:EntryAbility_label",  # 标签
        "exported": true,           # 是否导出
        "skills": [                 # 技能配置
          {
            "entities": ["entity.system.home"],
            "actions": ["ohos.want.action.home"]
          }
        ]
      }
    ]
  }
}

配置项说明

  • deviceTypes:指定模块支持的设备类型,如phone、tablet、tv等

  • abilities:定义应用的能力,每个ability对应一个功能模块

  • skills:声明能力可以响应的动作,如启动应用、打开链接等

  • requestPermissions:申请的权限列表,如网络访问、位置信息等

模块化开发案例分析

案例1:多窗口笔记应用

// 笔记编辑模块1:NoteEditAbility.ets
@Entry
@Component
struct NoteEditor1 {
  @State text: string = "笔记内容1"

  build() {
    Column() {
      TextEditor({ text: this.text })
        .onChange((newText) => { this.text = newText })
      Button("发送到窗口2").onClick(() => {
        postMessage("NOTE_DATA", this.text) // 跨窗口通信
      })
    }
  }
}

// 笔记编辑模块2:NoteEditAbility2.ets
@Entry
@Component
struct NoteEditor2 {
  @State receivedText: string = ""

  onMessageReceived(type: string, data: string) {
    if (type === "NOTE_DATA") this.receivedText = data
  }
}

案例2:购物车按需加载

// 主工程(Entry HAP)
import { FeatureManager } from '@ohos.ability.featureAbility'

Button("联系客服")
  .onClick(async () => {
    try {
      await FeatureManager.installFeature("customer_service.hsp")
      startAbility({
        bundleName: "com.shop.app",
        abilityName: "CustomerServiceAbility"
      })
    } catch (error) {
      prompt.showToast("功能下载中,请稍后...")
    }
  })

模块化优势

  • 独立开发:不同团队可并行开发不同模块

  • 按需加载:非核心功能动态下载,减少初始安装包大小

  • 性能优化:HSP运行时复用,减少内存占用和加载时间

  • 多端适配:针对不同设备类型分发不同模块

2025年鸿蒙开发最新动态

HarmonyOS Next新特性

  • 模块化增强:HSP支持更多动态共享能力,优化跨应用资源共享

  • API更新:API 18新增多项能力,如应用上下文加密、进程名获取等

  • 开发工具:DevEco Studio 5.0提供更强大的模块化调试支持

  • 性能优化:启动速度提升30%,内存占用减少20%

开发趋势

  • 分布式应用:多设备协同能力增强,支持跨设备UI共享

  • 元服务:轻量级应用形态,支持免安装运行

  • AI集成:更紧密的AI能力集成,支持智能推荐、语音交互等

总结

鸿蒙开发的模块化设计是实现高效开发、多端部署的核心。通过合理使用HAP和HSP,开发者可以构建出体积小、性能优、易维护的应用。随着HarmonyOS Next的发布,模块化能力进一步增强,为开发者提供了更多灵活性和可能性。掌握HAP/HSP的使用和工程结构设计,将成为鸿蒙开发者的必备技能。

鸿蒙开发学习

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 13,933评论 0赞 6
  • 为了让我有一个更快速、更精彩、更辉煌的成长,我将开始这段刻骨铭心的自我蜕变之旅!从今天开始,我将每天坚持阅...
    李薇帆阅读 4,903评论 1赞 4
  • 似乎最近一直都在路上,每次出来走的时候感受都会很不一样。 1、感恩一直遇到好心人,很幸运。在路上总是...
    时间里的花Lily阅读 3,977评论 1赞 3
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 4,852评论 1赞 2
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 5,083评论 0赞 0

友情链接更多精彩内容