本文详细解读基于 Electron 开发的本地时钟应用的技术实现、架构设计和核心功能,包含鸿蒙PC系统适配改造方案,实现一套代码跨多端运行。
在这里插入图片描述

项目概述

这是一个基于 Electron 框架开发的本地时钟桌面应用,提供实时的时间显示、日期显示和星期显示功能,具有现代化的用户界面和流畅的动画效果。通过鸿蒙适配改造后,可同时运行于 Windows、macOS、Linux 和 鸿蒙PC系统。

主要功能特点

  • 实时时间显示:精确到秒级的时间更新

  • 完整日期展示:显示年、月、日信息

  • 星期信息:以中文形式展示星期几

  • 响应式设计:适配不同窗口尺寸和设备类型

  • 平滑动画:页面加载动画和数字变化效果

  • 深色主题:现代化的深色 UI 设计

  • 跨平台运行:支持 Windows/macOS/Linux/鸿蒙PC

技术架构

技术栈

  • 核心框架:Electron 34.0.0+

  • 前端技术:HTML5/CSS3/JavaScript

  • 运行环境:Node.js 18.x+

  • 鸿蒙开发工具:DevEco Studio 5.0+、鸿蒙SDK(API 20+)

  • 构建工具:npm/yarn

项目结构

基础 Electron 结构


04-digital-clock/
├── main.js            # Electron 主进程文件
├── package.json       # 项目配置和依赖管理
├── README.md          # 项目说明文档
└── src/               # 渲染进程源代码
    ├── index.html     # 主页面结构
    ├── preload.js     # 预加载脚本
    ├── renderer.js    # 渲染进程业务逻辑
    └── style.css      # 页面样式

鸿蒙适配后结构(需整合到 Electron 鸿蒙项目模板中):


ohos_hap/
├── electron/
│   ├── libs/
│   │   └── arm64-v8a/  # 鸿蒙核心库文件
│   │       ├── libelectron.so
│   │       ├── libadapter.so
│   │       ├── libffmpeg.so
│   │       └── libc++_shared.so
├── web_engine/
│   └── src/
│       └── main/
│           └── resources/
│               └── resfile/
│                   └── resources/
│                       └── app/  # 放置时钟应用代码
│                           ├── main.js
│                           ├── package.json
│                           └── src/
└── module.json5        # 鸿蒙应用配置文件

核心代码解析

1. 主进程实现(main.js)- 支持鸿蒙适配


const { app, BrowserWindow } = require('electron')
const path = require('path')

// 鸿蒙平台兼容性处理
function handleHarmonyCompatibility() {
  if (process.platform === 'ohos') {
    // 禁用硬件加速解决鸿蒙渲染问题
    app.disableHardwareAcceleration();
    console.log('Running on HarmonyOS, hardware acceleration disabled');
  }
}

function createWindow() {
  handleHarmonyCompatibility();
  
  // 创建浏览器窗口
  const mainWindow = new BrowserWindow({
    width: 600,
    height: 400,
    title: '本地时钟',
    resizable: true,
    autoHideMenuBar: true,
    webPreferences: {
      preload: path.join(__dirname, 'src', 'preload.js'),
      nodeIntegration: true,  // 鸿蒙环境需要开启
      contextIsolation: false // 鸿蒙环境需要关闭
    }
  })
  
  // 加载应用的 index.html
  mainWindow.loadFile(path.join(__dirname, 'src', 'index.html'));
  
  // 开发环境下打开调试工具
  if (process.env.NODE_ENV === 'development') {
    mainWindow.webContents.openDevTools();
  }
}

// Electron 应用准备就绪时创建窗口
app.whenReady().then(() => {
  createWindow()
  
  // 在 macOS 和鸿蒙上,点击 dock 图标重新创建窗口
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 关闭所有窗口时退出应用
app.on('window-all-closed', () => {
  // 鸿蒙系统process.platform返回'ohos'
  if (process.platform !== 'darwin' && process.platform !== 'ohos') {
    app.quit()
  }
})

2. 预加载脚本(preload.js)- 鸿蒙扩展


const { contextBridge, ipcRenderer } = require('electron');
const os = require('os');

// 通过contextBridge向渲染进程暴露受保护的方法
contextBridge.exposeInMainWorld('electronAPI', {
  // 平台信息检测
  platform: {
    type: process.platform,
    osType: os.type(),
    isHarmonyOS: process.platform === 'ohos'
  },
  
  // 时钟应用扩展API(预留)
  setAlarm: (time, message) => ipcRenderer.invoke('set-alarm', time, message)
});

3. 鸿蒙应用配置(module.json5)


{
  "module": {
    "name": "clockentry",
    "type": "entry",
    "description": "$string:module_desc",
    "versionCode": 1,
    "versionName": "1.0.0",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "tablet",
      "2in1"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "reqSysCapabilities": [
      "SystemCapability.WebEngine.Core"
    ]
  }
}

4. 包配置文件(package.json)- 鸿蒙扩展


{
  "name": "electron-clock-harmonyos",
  "version": "1.0.0",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "build:harmony": "node build-harmony.js"
  },
  "dependencies": {
    "electron": "^34.0.0"
  },
  "harmony": {
    "bundleName": "com.example.electronclock",
    "vendor": "example",
    "versionCode": 1,
    "versionName": "1.0.0"
  }
}

鸿蒙PC适配改造指南

详细操作指南请看这篇文章:
Electron 鸿蒙pc开发环境搭建完整保姆级教程(window)

1. 环境准备

  • 系统要求:Windows 10/11、8GB RAM以上、20GB可用空间

  • 工具安装
    DevEco Studio 5.0+(安装鸿蒙SDK API 20+)

  • Node.js 18.x+

2. 获取Electron鸿蒙编译产物

  1. 登录Electron 鸿蒙官方仓库

  2. 下载Electron 34+版本的Release包(.zip格式)

  3. 解压到项目目录,确认electron/libs/arm64-v8a/下包含核心.so库

3. 部署应用代码

将时钟应用代码按以下目录结构放置:
在这里插入图片描述


web_engine/src/main/resources/resfile/resources/app/
├── main.js
├── package.json
└── src/
    ├── index.html
    ├── preload.js
    ├── renderer.js
    └── style.css

4. 配置与运行

  1. 打开项目:在DevEco Studio中打开ohos_hap目录

  2. 配置签名
    进入File → Project Structure → Signing Configs

  3. 自动生成调试签名或导入已有签名

  4. 连接设备
    启用鸿蒙设备开发者模式和USB调试

  5. 通过USB Type-C连接电脑

  6. 编译运行:点击Run按钮或按Shift+F10

5. 验证检查项

  • ✅ 应用窗口正常显示时钟界面

  • ✅ 时间更新正常(每秒刷新)

  • ✅ 窗口大小可调整,响应式布局生效

  • ✅ 控制台无"SysCap不匹配"或"找不到.so文件"错误

  • ✅ 动画效果正常播放

跨平台兼容性

平台 适配策略 特殊处理
Windows 标准Electron运行 无特殊配置
macOS 标准Electron运行 保留dock图标激活逻辑
Linux 标准Electron运行 确保系统依赖库完整
鸿蒙PC 通过Electron鸿蒙适配层 禁用硬件加速,使用特定目录结构

鸿蒙开发调试技巧

1. 日志查看

在DevEco Studio的Log面板中过滤"Electron"关键词,查看应用运行日志和错误信息。

2. 常见问题解决

  • "SysCap不匹配"错误:检查module.json5中的reqSysCapabilities,只保留必要系统能力

  • "找不到.so文件"错误:确认arm64-v8a目录下四个核心库文件完整

  • 窗口不显示:在main.js中添加app.disableHardwareAcceleration()

  • 动画卡顿:简化CSS动画效果,减少重绘频率

鸿蒙扩展功能建议

  • 鸿蒙通知集成:调用鸿蒙通知API实现闹钟提醒功能

  • 系统主题同步:适配鸿蒙系统深色/浅色主题自动切换

  • 控制中心小组件:开发鸿蒙桌面小组件显示时间

  • 多设备协同:通过鸿蒙分布式能力实现多设备时间同步

总结

本项目通过Electron框架实现了跨平台时钟应用,并成功适配鸿蒙PC系统。改造过程中保持了原有应用的全部功能,同时通过鸿蒙特有的适配层实现了在鸿蒙PC上的稳定运行。

关键技术要点包括:

  • 通过条件判断实现多平台兼容性处理

  • 遵循鸿蒙应用目录结构和配置规范

  • 合理使用Electron鸿蒙适配层提供的原生能力

  • 针对鸿蒙系统特点进行渲染优化

该方案为Web开发者提供了快速进入鸿蒙生态的途径,同时保留了Electron跨平台开发的优势,实现"一套代码,多端运行"的目标。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐