使用 hionic 将 Web 应用部署到鸿蒙PC平台
从 0 到 1:使用 hionic 将 Web 应用部署到鸿蒙PC平台
本教程基于hionic CLI,以React + Capacitor为例,完整演示如何从零搭建一个鸿蒙原生应用,并涵盖 Mac 环境下常见踩坑与解决方案。
目录
- 环境准备
- 安装 hionic CLI
- 创建 Capacitor 项目
- 添加 OpenHarmony 平台
- 修复 OpenSSL 依赖(必读!)
- 前端构建
- 在 DevEco Studio 中打开与编译
- 完整构建 HAP 包
- 部署到设备 / 模拟器
- 常见问题
1. 环境准备
| 工具 | 说明 |
|---|---|
| Node.js | 推荐 v18+,通过 Homebrew 安装(见下文) |
| npm | 随 Node.js 一起安装 |
| DevEco Studio | 鸿蒙官方 IDE,用于编译和签名 HAP 包 |
| hdc | 鸿蒙设备连接工具,随 DevEco Studio 附送 |
| OpenHarmony SDK | DevEco Studio 中配置 |
⚠️ 重点:Node.js 安装方式
不要使用 DevEco Studio 内嵌的 Node.js(路径包含/Applications/DevEco-Studio.app/),因为该目录是只读的,npm install -g会报EPERM错误:
npmERR!Error: EPERM: operation not permitted,mkdir'/Applications/DevEco-Studio.app/.../node_modules/hionic'正确的做法:通过 Homebrew 安装独立的 Node.js:
# 安装 Homebrew 的 Node.jsbrewinstallnode# 验证whichnode# 应输出 /opt/homebrew/bin/nodenode-v# 应输出 v18+ 或 v20+ / v26+npm-vHomebrew 的 Node.js 安装在
/opt/homebrew下,用户有完整写入权限。
2. 安装 hionic CLI
hionic 是基于 Ionic CLI 二次开发的命令行工具,支持将 Web 项目(Capacitor / Cordova)添加 OpenHarmony 平台支持。
npminstall-ghionic安装后验证:
hionic-v# 输出:hionic 2.1.15(或更高版本)说明:
hionic的官方仓库在 atomgit.com/CPF-Ionic/capacitor-cli,更多使用说明可参考该仓库的 README。
3. 创建 Capacitor 项目
hionic 支持两种框架:cordova和capacitor。本教程以 Capacitor + React 为例。
# 语法:hionic start <框架> <项目目录> <包名> <应用名> [模板]hionic start capacitor MyApp com.nutpi.MyApp MyHarmonyApp react执行过程说明:
- 创建 Vite + React 前端项目:内部调用
npm create vite MyApp -- --template react - 安装前端依赖:执行
npm install - 初始化 Capacitor:执行
npx cap init MyHarmonyApp com.nutpi.MyApp
⚠️ 踩坑:npx cap init 失败
在某些环境中,hionic start执行到npx cap init时会报错:
npm error could not determine executable to run原因:@capacitor/cli尚未安装,npx找不到可执行文件。
解决方法:手动安装 Capacitor CLI 和 Core,然后重新初始化:
cdMyAppnpminstall@capacitor/core @capacitor/cli npx cap init MyHarmonyApp com.nutpi.MyApp成功后会在项目根目录生成capacitor.config.json。
4. 添加 OpenHarmony 平台
cdMyApp hionic platformaddopenharmony执行成功后,你会看到:
detect result: Capacitor confidence: 70% Certificate: 1. Found Capacitor packages: @capacitor/cli, @capacitor/core 2. Found Capacitor config file: capacitor.config.json 3. Capacitor CLI available Using hionic openharmony platform support Project created successfully此时项目根目录下会生成openharmony/目录,这就是鸿蒙原生工程。
项目目录结构
MyApp/ ├── openharmony/ # OpenHarmony 原生工程目录 │ ├── entry/ # 应用主模块 │ ├── capacitor/ # Capacitor 适配层(C++ + ArkTS) │ ├── AppScope/ # 应用级配置 │ └── build-profile.json5 # 构建配置 ├── src/ # React 前端源码 ├── dist/ # 前端构建输出 ├── capacitor.config.json # Capacitor 配置 ├── index.html # 应用入口 ├── vite.config.js └── package.json5. 修复 OpenSSL 依赖(必读!)
问题现象
此时如果直接编译,会报如下错误:
ninja: error: '.../openharmony/capacitor/libs/arm64-v8a/libssl.so.3', needed by '.../libcapacitor.so', missing and no known rule to make it ninja: error: '.../openharmony/capacitor/libs/x86_64/libssl.so.3', needed by '.../libcapacitor.so', missing and no known rule to make it原因分析
Capacitor 适配层的 C++ 代码(HTTP/HTTPS 通信、WebSocket 等)依赖OpenSSL,CMakeLists.txt 中声明了链接:
set(OPENSSL_LIB_PATH ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}) target_link_libraries(capacitor PUBLIC ... ${OPENSSL_LIB_PATH}/libssl.so.3 ${OPENSSL_LIB_PATH}/libcrypto.so.3 )但openharmony/capacitor/libs/目录为空,缺少预编译的 OpenSSL 动态库。
解决方案
官方提供了预编译好的 OpenSSL 3.5 库,仓库地址:atomgit.com/li_in/openharmony-capacitor-openssl3.5
# 克隆 OpenSSL 预编译库gitclone--depth1https://gitcode.com/li_in/openharmony-capacitor-openssl3.5.git /tmp/ohos-openssl# 复制 .so 库文件到 capacitor 的 libs 目录cp-r/tmp/ohos-openssl/libs /Users/nutpi/Desktop/study/cordova/MyApp/openharmony/capacitor/libs# 复制 OpenSSL 头文件到 cpp 目录cp-r/tmp/ohos-openssl/openssl /Users/nutpi/Desktop/study/cordova/MyApp/openharmony/capacitor/src/main/cpp/openssl# 清理临时文件rm-rf/tmp/ohos-openssl复制后的目录结构应如下:
openharmony/capacitor/ ├── libs/ │ ├── arm64-v8a/ │ │ ├── libssl.so.3 │ │ ├── libcrypto.so.3 │ │ └── ... │ └── x86_64/ │ ├── libssl.so.3 │ ├── libcrypto.so.3 │ └── ... └── src/main/cpp/ └── openssl/ ├── arm64-v8a/include/openssl/ # arm64 头文件 └── x86_64/include/openssl/ # x86 头文件说明:该仓库提供了
arm64-v8a(真机/模拟器)和x86_64(模拟器)两个架构的预编译库,覆盖开发和部署两种场景。
6. 前端构建
Capacitor 项目需要先将 Web 资源构建为静态文件,才能集成到原生包中。
# 构建前端(Vite 打包到 dist/)hionic buildui该命令等同于直接执行npm run build,将 React 源码构建到dist/目录。
7. 在 DevEco Studio 中打开与编译
方式一:命令行打开
hionicopenopenharmony方式二:手动打开
直接用 DevEco Studio 打开MyApp/openharmony/目录。
配置签名
在 DevEco Studio 中:
File→Project Structure→Signing Configs- 登录华为开发者账号,自动生成签名证书
- 或导入已有
.p12/.cer/.p7b证书
编译构建
在 DevEco Studio 中点击Build→Build HAP(s),或使用命令行:
# 使用 DevEco 内嵌的 Node.js 运行 hvigor/Applications/DevEco-Studio.app/Contents/tools/node/bin/node\/Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw.js\--modemodule\-pmodule=entry@default\-pproduct=default\-prequiredDeviceType=phone\assembleHap\--analyze=normal--parallel--incremental--daemon构建成功后输出:
> hvigor BUILD SUCCESSFUL in 10 s 778 ms生成的 HAP 包位于:
openharmony/entry/build/default/outputs/default/ ├── entry-default-signed.hap # 已签名,可直接安装 └── entry-default-unsigned.hap # 未签名8. 完整构建 HAP 包
hionic 也封装了完整的构建命令(需先配置DEVECO_SDK_HOME和DEVECO_IDE_PATH环境变量):
# 配置环境变量exportDEVECO_SDK_HOME=/Applications/DevEco-Studio.app/Contents/sdkexportDEVECO_IDE_PATH=/Applications/DevEco-Studio.app# 构建hionic buildapp openharmony9. 部署到设备 / 模拟器
启动模拟器
在 DevEco Studio 中:Tools→Device Manager→ 创建并启动模拟器。
安装 HAP
# 连接设备hdc list targets# 安装 HAPhdcinstallopenharmony/entry/build/default/outputs/default/entry-default-signed.hap一行命令部署(hionic)
hionic run openharmony查看运行日志
hdc shell hilog|grepcapacitor10. 常见问题
Q1:npm install -g hionic报 EPERM
原因:使用了 DevEco Studio 内嵌的 Node.js,全局安装目录只读。
解决:通过 Homebrew 重新安装 Node.js,确保which node指向/opt/homebrew/bin/node。
Q2:hionic start执行到npx cap init失败
原因:@capacitor/cli尚未安装,npx找不到可执行文件。
解决:
npminstall@capacitor/core @capacitor/cli npx cap init MyHarmonyApp com.nutpi.MyAppQ3:编译报错libssl.so.3 missing
原因:OpenSSL 预编译库未集成。
解决:
gitclone--depth1https://gitcode.com/li_in/openharmony-capacitor-openssl3.5.git /tmp/ohos-opensslcp-r/tmp/ohos-openssl/libs openharmony/capacitor/libscp-r/tmp/ohos-openssl/openssl openharmony/capacitor/src/main/cpp/opensslrm-rf/tmp/ohos-opensslQ4:page_text_font_size资源冲突
Warning: 'page_text_font_size' conflict, first declared at .../entry/.../float.json but declared again at .../capacitor/.../float.json这是警告而非错误,不影响构建。两个模块都定义了同名资源,entry模块的声明优先级更高。如需消除警告,可以删除capacitor模块中重复的float.json配置。
Q5:报错FetchPackageInfo: "@ohos/hypium" failed
解决:将openharmony/capacitor/oh-package.json5中的devDependencies内容删除后重试。
总结
通过本教程,你完成了从零到一将 React Web 应用部署到鸿蒙平台的完整流程:
Web 应用 (React) │ ▼ Capacitor 封装 (跨平台桥接层) │ ▼ hionic CLI 添加 OpenHarmony 平台 │ ▼ OpenSSL 预编译库集成 ← 关键步骤,容易遗漏 │ ▼ DevEco Studio 编译 → HAP 包 │ ▼ 安装到鸿蒙设备 / 模拟器 ✅hionic 工具链的核心价值在于:一次开发,多端部署——同一份 React/Vue/Angular 代码,可以同时构建 Android、iOS 和 OpenHarmony 三平台的原生应用。
项目地址:https://gitcode.com/jianguoxu/hionic
参考资源
- hionic CLI 仓库:https://gitcode.com/CPF-Ionic/capacitor-cli
- OpenSSL 预编译库:https://gitcode.com/li_in/openharmony-capacitor-openssl3.5
- Capacitor 官方文档:https://capacitorjs.com/docs
- OpenHarmony 开发文档:https://developer.harmonyos.com
