当前位置: 首页 > news >正文

使用 hionic 将 Web 应用部署到鸿蒙PC平台

从 0 到 1:使用 hionic 将 Web 应用部署到鸿蒙PC平台

本教程基于hionic CLI,以React + Capacitor为例,完整演示如何从零搭建一个鸿蒙原生应用,并涵盖 Mac 环境下常见踩坑与解决方案。


目录

  1. 环境准备
  2. 安装 hionic CLI
  3. 创建 Capacitor 项目
  4. 添加 OpenHarmony 平台
  5. 修复 OpenSSL 依赖(必读!)
  6. 前端构建
  7. 在 DevEco Studio 中打开与编译
  8. 完整构建 HAP 包
  9. 部署到设备 / 模拟器
  10. 常见问题

1. 环境准备

工具说明
Node.js推荐 v18+,通过 Homebrew 安装(见下文)
npm随 Node.js 一起安装
DevEco Studio鸿蒙官方 IDE,用于编译和签名 HAP 包
hdc鸿蒙设备连接工具,随 DevEco Studio 附送
OpenHarmony SDKDevEco 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-v

Homebrew 的 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 支持两种框架:cordovacapacitor。本教程以 Capacitor + React 为例。

# 语法:hionic start <框架> <项目目录> <包名> <应用名> [模板]hionic start capacitor MyApp com.nutpi.MyApp MyHarmonyApp react

执行过程说明:

  1. 创建 Vite + React 前端项目:内部调用npm create vite MyApp -- --template react
  2. 安装前端依赖:执行npm install
  3. 初始化 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.json

5. 修复 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 中:

  1. FileProject StructureSigning Configs
  2. 登录华为开发者账号,自动生成签名证书
  3. 或导入已有.p12/.cer/.p7b证书

编译构建

在 DevEco Studio 中点击BuildBuild 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_HOMEDEVECO_IDE_PATH环境变量):

# 配置环境变量exportDEVECO_SDK_HOME=/Applications/DevEco-Studio.app/Contents/sdkexportDEVECO_IDE_PATH=/Applications/DevEco-Studio.app# 构建hionic buildapp openharmony

9. 部署到设备 / 模拟器

启动模拟器

在 DevEco Studio 中:ToolsDevice Manager→ 创建并启动模拟器。

安装 HAP

# 连接设备hdc list targets# 安装 HAPhdcinstallopenharmony/entry/build/default/outputs/default/entry-default-signed.hap

一行命令部署(hionic)

hionic run openharmony

查看运行日志

hdc shell hilog|grepcapacitor

10. 常见问题

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.MyApp

Q3:编译报错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-openssl

Q4: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
http://www.cnnetsun.cn/news/2732198.html

相关文章:

  • 告别Vitis Classic!在Windows 10上从零配置Vitis HLS 2023.2新IDE(含OpenCV 4.4.0与Vitis Vision库避坑指南)
  • FastAPI 分层架构深度解析:从 Controller 到 Service 与 CRUD 层
  • 数智化浪潮下,国产 PLM 的突围之路 —— 璞华易研 PLM 的行业地位与价值实践
  • Luyten深度解析:基于Procyon的Java反编译GUI实战指南
  • 告别纸上谈兵:用Python模拟Torus与Mesh网络,直观对比延迟与负载平衡
  • DRIFT Search:动态推理检索技术,让RAG应用既见树木又见森林
  • 错过这轮整合,你的AI投入将归零:2024Q3前必须完成的6个智能成就校准动作
  • 基于ESP8266与MAX7219的物联网LED点阵屏远程控制系统
  • DIY门铃辅助开关:用低成本工程实践实现包容性设计
  • 【2026最新】Adobe Animate动画神器:2D动画轻松拿捏!
  • 虚幻引擎是什么?用来做什么?
  • 避坑指南:EISeg安装时遇到的cv2.dnn报错和模型闪退,我是这样解决的
  • 如何用Mousecape在5分钟内彻底改变你的macOS鼠标指针
  • 摩托罗拉GP300/GP88等老款对讲机写频工具包,含亚音、功率、信道等完整参数设置功能
  • 多模型 API 网关接入实践:统一 Base URL、API Key 管理与故障排查
  • 京东自动化脚本终极指南:零基础实现京豆自动获取的完整教程
  • 悬架调校入门:如何用四分之一车模型看懂CDC半主动悬架的“矛盾”与取舍
  • Exendin (9-39) ;DLSKQMEEEAVRLFIEWLKNGGSGGAPPPPS
  • ShawzinBot终极指南:3分钟掌握MIDI转游戏按键的简单方法
  • 四轮毂电机电动汽车状态软测量及操纵稳定性控制系统方案【附数据】
  • gorm自定义类型
  • 如何快速批量下载音乐同步歌词:面向音乐爱好者的完整指南
  • 如何快速掌握Python工业相机控制:PyPYLON新手完整教程
  • 流放之路2角色构建模拟器:从数据新手到理论大师的进化之路
  • 2026代理池动态调度机制适配指纹浏览器集群的搭建方案与故障全解
  • 9大网盘直链下载助手:告别限速,实现高速下载自由
  • 基于Arduino与LSM303的简易伺服罗盘:从传感器到执行器的嵌入式实践
  • 5步掌握SUSFS4KSU:内核级Root隐藏的终极实战方案
  • XTOOL朗仁发布自研X-ADK框架,重塑诊断标准
  • Betaflight Configurator:3步掌握无人机飞行控制配置的完整指南