普通视图

发现新文章,点击刷新页面。
昨天 — 2025年12月13日首页

🧩 一文搞懂 HarmonyOS 中的 HAP、HAR 和 HSP:它们到底是什么?怎么用?

作者 90后晨仔
2025年12月13日 17:49

Snip20251213_6.png

🌟 开头一句话总结

  • HAP 是你最终安装到手机上的“App 包”;
  • HAR 是可被多个 App 共享的“动态库”(像 npm 包);
  • HSP 是只能被一个 App 内部使用的“静态库”(像私有工具函数集合)。

📦 1. HAP:HarmonyOS Ability Package(能力包)

✅ 它是什么?

HAP 是 鸿蒙应用的安装单元。你可以把它理解为 Android 的 APK 或 iOS 的 IPA。

每个鸿蒙 App 至少包含一个 HAP,通常分为两种:

类型 说明
Entry HAP 主模块,用户点击图标启动的就是它(必须有)
Feature HAP 可选功能模块,按需下载(比如“直播”、“支付”等独立功能)

📁 文件结构示例:

MyApp/
├── entry/          ← Entry HAP
│   ├── src/main/
│   └── module.json5
├── feature_live/   ← Feature HAP(可选)
└── build-profile.json5

💡 关键点:

  • 用户安装的是 .hap 文件(实际是 ZIP 格式)。
  • 一个 App 可以有多个 HAP,但只有一个 Entry。
  • HAP 里包含代码、资源、配置、Ability(页面/服务)等。

🧱 2. HAR:HarmonyOS Archive(共享归档包)

✅ 它是什么?

HAR 是 可复用的共享库,类似 Web 开发中的 npm 包,或 Android 的 AAR。

  • 多个 App 或多个 HAP 都可以引用同一个 HAR
  • 编译后生成 .har 文件。
  • 支持包含 TS/JS 代码、C++ 原生代码、资源文件(图片、字符串等)

🛠️ 什么时候用 HAR?

  • 你有一套 UI 组件库(比如 Design System)要给多个项目用;
  • 封装了网络请求、日志、加密等通用逻辑;
  • 团队协作,需要模块解耦。

📁 创建方式(DevEco Studio):

新建模块 → 选择 “Shared Library” → 生成的就是 HAR。

⚠️ 注意限制:

  • HAR 不能包含 Ability(页面/服务) —— 它只是“工具箱”,不是“应用”。
  • 资源 ID 在不同 HAR 间可能冲突(建议加前缀)。

🔒 3. HSP:HarmonyOS Static Package(静态包)

✅ 它是什么?

HSP 是 仅限当前 App 内部使用的静态库,编译时会直接“合并”进主 HAP。

  • 不会被其他 App 引用;
  • 最终不会生成独立文件,而是“内联”到 HAP 中;
  • 更安全(代码不暴露)、更轻量(无运行时开销)。

🛠️ 什么时候用 HSP?

  • 工具函数、常量、私有业务逻辑,不想对外暴露;
  • 追求极致性能,避免 HAR 的动态加载开销;
  • 模块只在本 App 内使用,无需共享。

📁 创建方式:

新建模块 → 选择 “Static Library” → 生成 HSP。


🔁 对比总结表

特性 HAP HAR HSP
用途 应用安装包 共享库 静态私有库
能否被安装 ✅ 是 ❌ 否 ❌ 否
能否包含页面(Ability) ✅ 是 ❌ 否 ❌ 否
能否被多个 App 共用 ❌ 否 ✅ 是 ❌ 否
编译产物 .hap .har 无独立文件(内联)
创建模板 Empty Ability Shared Library Static Library

🎯 实际开发建议

  1. 主 App 功能 → 用 HAP(Entry + Feature);
  2. 跨项目复用组件/逻辑 → 用 HAR
  3. 仅本项目内部工具 → 用 HSP(更安全高效);
  4. 不要把业务页面放进 HAR/HSP —— 它们只能放“辅助代码”。

🧪 举个例子

假设你在开发一个电商 App:

  • entry → 主 HAP(首页、商品列表)
  • feature_cart → 购物车 HAP(按需加载)
  • common_ui.har → 通用按钮、弹窗组件(多个 App 共用)
  • utils.hsp → 本地加密、时间格式化(仅本 App 用)

这样结构清晰,复用性强,也便于团队分工!


✅ 结语

HAP、HAR、HSP 是鸿蒙模块化开发的三大基石。
理解它们的区别,能帮你写出更规范、可维护、高性能的 HarmonyOS 应用。

📌 记住口诀:
HAP 装得下,HAR 分享它,HSP 私藏吧!

昨天以前首页

鸿蒙开发必备:macOS 上 ohpm 的完整安装与配置指南(从报错到成功)

作者 90后晨仔
2025年12月9日 13:52

🚀 引言:为什么需要 ohpm?

在 iOS 开发中,我们用 CocoaPods 管理第三方库;在 Android 中,用 Gradle + Maven
而在 鸿蒙(HarmonyOS)生态中,华为官方提供了 ohpm(OpenHarmony Package Manager) —— 这是管理 HarmonyOS 第三方组件(如 Lottie 动画、网络库、UI 组件等)的标准工具

但许多 macOS 开发者在首次使用 ohpm 时,会遇到各种“命令未找到”、“node not found”等问题。本文将从零开始,带你一步步排查并成功配置 ohpm,确保你的 DevEco Studio 项目能顺利集成三方库。


🔧 第一步:确认 DevEco Studio 已正确安装

ohpm 是 DevEco Studio 自带的命令行工具,因此你必须先安装 DevEco Studio。

💡 安装完成后,应用通常位于 /Applications/DevEco-Studio.app(注意名称可能含连字符 -


🔍 第二步:定位 ohpm 的真实路径(关键!)

很多教程直接写死路径为 /Applications/DevEco Studio.app/...,但实际路径因版本和安装方式而异

✅ 正确做法:用 find 命令查找

find /Applications -name ohpm 2>/dev/null

典型输出:

/Applications/DevEco-Studio.app/Contents/tools/ohpm
/Applications/DevEco-Studio.app/Contents/tools/ohpm/bin/ohpm   ← 可执行文件在此!

⚠️ 注意:

  • 应用名可能是 DevEco-Studio.app(带连字符),不是 DevEco Studio.app
  • ohpm 可执行文件在 .../tools/ohpm/bin/ 目录下,不是 .../tools/bin/

📂 第三步:配置 shell 环境变量(zsh)

macOS Catalina(10.15)及以后默认使用 zsh,配置文件为 ~/.zshrc

1. 编辑 ~/.zshrc

nano ~/.zshrc

2. 添加以下内容(根据你的实际路径调整)

# Android SDK(某些混合项目需要,可选)
export ANDROID_HOME="$HOME/Library/Android/sdk"
export PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools"

# DevEco Studio 内置 Node.js(方案二备用,推荐用 Homebrew)
# export PATH="/Applications/DevEco-Studio.app/Contents/tools/nodejs/bin:$PATH"

# ohpm 可执行文件路径(关键!)
export PATH="$PATH:/Applications/DevEco-Studio.app/Contents/tools/ohpm/bin"

# Homebrew(确保 brew 命令可用)
eval "$(/opt/homebrew/bin/brew shellenv)"

# JetBrains VM options(DevEco Studio 自动添加,保留即可)
___MY_VMOPTIONS_SHELL_FILE="${HOME}/.jetbrains.vmoptions.sh"
if [ -f "${___MY_VMOPTIONS_SHELL_FILE}" ]; then
  . "${___MY_VMOPTIONS_SHELL_FILE}"
fi

🔥 重点替换:

  • DevEco-Studio.app 替换为你 find 命令查到的实际名称
  • 路径必须是 .../tools/ohpm/bin

3. 保存并重载

# 保存后退出 nano(Ctrl+O → Enter → Ctrl+X)
source ~/.zshrc

🐘 第四步:安装 Node.js(解决 "node: command not found")

当你运行 ohpm -v 时,如果看到:

ERROR: node: command not found
...
Failed to find the executable 'node' command

说明 系统缺少 Node.js。虽然 DevEco Studio 内置了 Node,但不建议依赖它

✅ 推荐方案:用 Homebrew 安装 Node.js

# 安装 Node.js(包含 npm)
brew install node

验证安装

node -v   # 输出如 v20.18.0
npm -v    # 输出如 10.8.2

✅ 优点:

  • 版本新、稳定
  • 所有终端和 GUI 应用都能使用
  • 符合华为官方推荐

❌ 不推荐方案:使用 DevEco 内置 Node

如果你坚持不用 Homebrew,可取消注释 .zshrc 中的这行:

export PATH="/Applications/DevEco-Studio.app/Contents/tools/nodejs/bin:$PATH"

但需注意版本锁定和兼容性风险。


🧪 第五步:验证 ohpm 是否工作

# 1. 检查路径
which ohpm
# 应输出:/Applications/DevEco-Studio.app/Contents/tools/ohpm/bin/ohpm

# 2. 查看版本
ohpm -v
# 成功输出:2.0.0(或其他版本号)

# 3. 测试安装一个库
ohpm install @ohos/lottie --save

如果看到 Install success,恭喜你!ohpm 已配置成功。


🖥 第六步:让 DevEco Studio GUI 也能识别环境变量

即使终端中 ohpmANDROID_HOME 生效了,从 Dock 启动的 DevEco Studio 仍可能报错 “ANDROID_HOME not set”

原因:

GUI 应用(如 DevEco Studio)不会读取 ~/.zshrc,只读取登录时加载的 ~/.zprofile

✅ 解决方案:

.zshrc 中的环境变量同步到 ~/.zprofile

# 复制配置
cp ~/.zshrc ~/.zprofile

# 或手动编辑
nano ~/.zprofile

然后 重启电脑,确保 launchd 加载新变量。

💡 重启后,DevEco Studio 就不会再提示环境变量缺失了!


🛠 常见错误与排查

错误现象 原因 解决方案
command not found: ohpm PATH 路径错误或未生效 find 确认路径,检查 .zshrc 是否 source
node: command not found 未安装 Node.js brew install node
DevEco Studio 报 “ANDROID_HOME not set” GUI 应用未继承变量 配置 ~/.zprofile 并重启电脑
ohpm install 卡住或超时 网络问题 设置国内源: ohpm config set registry https://ohpm.openharmony.cn/ohpm/

📚 官方资源


✅ 总结:成功配置 ohpm 的 Checklist

  • find /Applications -name ohpm 确认真实路径
  • ~/.zshrc 中正确设置 PATH(含 .../tools/ohpm/bin
  • 通过 brew install node 安装 Node.js
  • 运行 source ~/.zshrc 使配置生效
  • 验证 ohpm -v 输出版本号
  • 将环境变量同步到 ~/.zprofile重启电脑

🌟 结语

鸿蒙生态正在快速发展,而 ohpm 是连接你与丰富三方组件的桥梁。虽然初期配置稍显繁琐,但一旦打通,你就能像使用 CocoaPods 一样轻松集成动画、网络、工具类库。

希望这篇博客能帮助你少走弯路,快速进入 HarmonyOS 开发的正轨!

Happy Coding with HarmonyOS! 🍀
如果你成功了,欢迎在评论区分享你的经验;如果仍有问题,也请留言,我会尽力解答。


❌
❌