起航:5分钟搭建你的第一个“鸿蒙Electron”应用

前言:什么是“鸿蒙Electron”?
你可能听说过 Electron —— 它让前端开发者用 HTML/CSS/JS 轻松构建桌面应用(如 VS Code、钉钉)。
但你知道吗?在 HarmonyOS(鸿蒙) 中,我们也能实现类似的能力!
虽然华为没有官方推出“Harmony Electron”框架,但借助鸿蒙内置的 Web 组件 + ArkTS 原生桥接,我们可以快速构建一个轻量、安全、离线运行的混合应用——本文称之为 “鸿蒙Electron”应用(仅为类比,非官方命名)。
✅ 本文目标:5分钟内,手把手带你创建第一个可运行的“鸿蒙Electron”应用!
一、准备工作
1. 开发环境
- 安装 DevEco Studio 4.1+
- 创建 Empty Ability(Stage 模型) 项目,语言选择 ArkTS
2. 项目结构预览
我们将把 Web 页面放在 resources/rawfile/ 目录下,由 ArkTS 宿主加载。
MyFirstHarmonyElectron/
└── entry/
└── src/main/
├── ets/
│ └── MainView.ets ← ArkTS 宿主页面
└── resources/rawfile/
├── index.html ← Web 主页
└── app.js ← 前端逻辑
📌 提示:
rawfile是鸿蒙存放静态资源的专用目录,支持直接通过file://访问。
二、Step 1:编写 Web 前端页面
1. 创建 index.html
在 entry/src/main/resources/rawfile/ 下新建文件:
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>我的第一个鸿蒙Electron应用</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, sans-serif;
text-align: center;
padding: 40px;
background: #f0f9ff;
}
h1 { color: #007dff; }
button {
margin: 10px;
padding: 10px 20px;
font-size: 16px;
border: none;
border-radius: 8px;
background: #007dff;
color: white;
cursor: pointer;
}
#result {
margin-top: 20px;
padding: 15px;
background: white;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<h1>🚀 鸿蒙Electron 起航!</h1>
<p>点击按钮调用鸿蒙原生能力</p>
<button onclick="getDeviceInfo()">获取设备信息</button>
<button onclick="createFile()">创建本地文件</button>
<div id="result">等待操作...</div>
<script src="app.js"></script>
</body>
</html>
2. 创建 app.js
// app.js
// 全局桥接对象(由 ArkTS 注入)
const hwBridge = window.HarmonyBridge;
function setResult(text) {
document.getElementById('result').innerText = text;
}
function getDeviceInfo() {
if (!hwBridge?.getDeviceName) {
return setResult('❌ 原生服务未就绪');
}
const name = hwBridge.getDeviceName();
setResult(`📱 设备名称: ${name}`);
}
function createFile() {
if (!hwBridge?.saveTextFile) {
return setResult('❌ 文件服务不可用');
}
const success = hwBridge.saveTextFile('hello.txt', 'Hello from HarmonyElectron!');
setResult(success ? '✅ 文件已保存到沙箱目录' : '❌ 保存失败');
}
💡 此时 Web 部分已完成!接下来用 ArkTS 为其“赋能”。
三、Step 2:编写 ArkTS 宿主与原生服务
打开 MainView.ets(通常位于 entry/src/main/ets/),替换为以下代码:
// MainView.ets
import web_webview from '@ohos:web.webview';
import deviceInfo from '@ohos:deviceInfo';
import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';
@Entry
@Component
struct MainView {
private controller: web_webview.WebController = new web_webview.WebController();
private context: common.UIAbilityContext = getContext(this);
// 获取设备名称
getDeviceName(): string {
return deviceInfo.deviceName || 'Unknown Device';
}
// 保存文本文件到应用沙箱
saveTextFile(filename: string, content: string): boolean {
try {
const path = this.context.filesDir + '/' + filename;
fs.writeTextSync(path, content, { encoding: 'utf-8' });
console.info(`文件已保存: ${path}`);
return true;
} catch (err) {
console.error('保存失败:', err);
return false;
}
}
build() {
Column() {
Text('我的第一个“鸿蒙Electron”应用')
.fontSize(20)
.fontWeight(FontWeight.Bold)
.margin(10)
// 加载本地 Web 页面
Web({
src: 'file:///etc/entry/resources/rawfile/index.html',
controller: this.controller
})
.width('100%')
.height('90%')
.javaScriptAccess(true) // ⚠️ 必须开启!否则无法执行 JS
.onPageEnd(() => {
// 注册桥接对象:将 ArkTS 方法暴露给 Web
this.controller.registerJavaScriptProxy(
{
getDeviceName: () => this.getDeviceName(),
saveTextFile: (name: string, data: string) => this.saveTextFile(name, data)
},
'HarmonyBridge', // 对应 JS 中的 window.HarmonyBridge
['getDeviceName', 'saveTextFile'] // 可调用的方法列表
);
})
}
.width('100%')
.height('100%')
}
}
🔑 关键点:
javaScriptAccess(true):允许 Web 执行 JavaScript;registerJavaScriptProxy:建立 JS 与 ArkTS 的通信桥梁。
四、Step 3:运行
-
在 DevEco Studio 开发环境中,找到工具栏上的 ▶ Run 按钮(通常位于右上角),点击该按钮开始编译和运行当前项目;
-
系统会自动检测可用的运行设备:
- 如果配置了 HarmonyOS 模拟器,应用将在模拟器窗口中启动
- 如果通过 USB 连接了真机设备(需提前开启开发者模式并授权),应用将直接安装到设备运行
- 运行过程中可以在底部的 Run 窗口查看实时日志
-
应用启动后,找到界面上的测试按钮(通常标记为"Click Me"或类似文本),执行以下操作:
- 单次点击:观察界面元素的状态变化
- 多次快速点击:测试应用的响应性能
- 注意查看控制台输出的交互日志,验证业务逻辑是否正确执行
-
如需重新运行,可点击 🔄 Rerun 按钮快速重启应用,或者通过 🛑 Stop 按钮终止当前运行实例
✅ 验证文件是否创建:
在 DevEco 中打开 File Explorer,路径为/data/storage/el2/base/haps/.../files/,可看到hello.txt。
五、为什么这很重要?
| 能力 | 传统纯 Web | 本文“鸿蒙Electron” |
|---|---|---|
| 访问设备信息 | ❌ 不行 | ✅ 通过 ArkTS |
| 读写本地文件 | ❌ 受限 | ✅ 沙箱内自由操作 |
| 离线运行 | ⚠️ 需缓存 | ✅ 资源内嵌,完全离线 |
| 包体积 | 小 | 仅增加几 MB |
| 开发效率 | 高 | 同样高 + 获得原生能力 |
🌉 这就是“鸿蒙Electron”的价值:让 Web 应用突破浏览器限制,拥抱鸿蒙全场景生态!
六、下一步你可以做什么?
✅ 前端工程构建与部署
将 Vue/React 项目通过 Webpack/Vite 构建为静态资源(HTML/CSS/JS),按鸿蒙 rawfile 目录规范放置。通过 ResourceManager 加载,实现 Web 与原生混合开发。
示例步骤:
npm run build生成dist文件夹- 将静态资源拷贝至
entry/src/main/resources/rawfile/web - 使用
WebComponent组件加载本地 HTML 文件
✅ 原生能力深度封装
通过 @ohos 接口扩展 Web 应用功能:
- 摄像头:调用
CameraKit实现拍照/录像,支持 H265 编码 - 蓝牙:基于
BluetoothKit开发设备配对、数据传输功能 - 网络状态:通过
NetManager监听 4G/5G/Wi-Fi 切换,自动降级画质
✅ 分布式多设备协同
利用鸿蒙分布式软总线特性:
- 手机端填写表单后,自动同步至平板继续编辑
- 工业场景中,PDA 扫描的条码实时显示在车间大屏
- 教育场景支持学生平板与教师终端双向投屏
✅ 国产化场景落地
典型应用案例:
- 政企内网:适配银河麒麟+飞腾芯片,满足等保三级要求
- 工业终端:整合 MES 系统,支持离线工单缓存
- 教育平板:通过
DRM加密课件,防止内容泄露
兼容性说明:已适配 OpenHarmony 3.2+ 及 HarmonyOS 4.0 设备
结语
恭喜你!你已经成功搭建了第一个"鸿蒙Electron"应用——
这个看似简单的Hello World应用,却是连接Web技术与鸿蒙万物互联世界的第一座重要桥梁。它融合了Electron强大的跨平台能力和鸿蒙系统的分布式特性,为开发者开辟了全新的可能性。
通过这个示例应用,你不仅掌握了基础的开发流程,更验证了以下关键技术点:
- Electron应用成功在鸿蒙系统上运行
- 实现了Web与鸿蒙原生API的互操作性
- 验证了分布式能力的基本调用机制
这标志着你的开发之旅正式启航,接下来可以:
- 尝试调用更多鸿蒙分布式能力(如跨设备数据同步)
- 集成鸿蒙特有的硬件接口(如传感器、NFC等)
- 开发支持多设备协同的复杂应用
从这个小应用出发,未来你将能构建出连接手机、平板、智能家居等全场景设备的创新应用!
🚀 5分钟起航,未来无限可能。
更多推荐



所有评论(0)