HarmonyOS Electron 调用 ETS 集成项目

本项目提供了在 HarmonyOS 平台上使用 Electron 调用 ETS (eTS) 代码的完整解决方案。通过 JS 绑定技术,实现 Electron 应用与 HarmonyOS 原生代码的互操作。

项目概述

本项目包含了将 Electron 应用集成到 HarmonyOS 平台的完整工具链和示例代码,主要用于在鸿蒙设备上运行 Electron 应用并调用 ETS 编写的原生功能。

项目结构

├── aki/                    # AKI JS 绑定库源码
│   ├── src/               # 核心源码
│   ├── include/           # 头文件
│   ├── example/           # 示例代码
│   └── doc/               # 文档
├── adapter/               # 原生适配器代码
│   ├── CMakeLists.txt     # 编译配置
│   ├── demo.cc           # 示例实现
│   └── build/            # 编译输出目录
├── addon/                 # Electron Node.js 插件
│   ├── CMakeLists.txt     # 编译配置
│   ├── hello.cc          # 插件实现
│   ├── package.json      # Node.js 配置
│   └── build/            # 编译输出目录
├── libaki_jsbind.so      # 编译后的 AKI 库
├── libshim.a             # 静态库文件
└── HarmonyOS Electron调用ets指导文档.md  # 详细指导文档

编译产物

  • libaki_jsbind.so - AKI JS 绑定动态库
  • libshim.a - 静态库文件
  • electron-addon.node - Electron 插件 (在 addon/build/Release/ 目录下)

快速开始

环境准备

  1. 安装 Electron 34 编译工具链
  2. 配置 HarmonyOS SDK 环境
  3. 安装必要的构建工具 (CMake, Node.js, npm 等)

编译步骤

详细的编译步骤请参考 [HarmonyOS Electron调用ets指导文档.md](./HarmonyOS Electron调用ets指导文档.md)

主要步骤包括:

  1. 编译 AKI 库

    cd aki
    mkdir build && cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release
    make
    
  2. 编译适配器

    cd adapter
    mkdir build && cd build
    cmake ..
    make
    
  3. 编译 Electron 插件

    cd addon
    npm install --verbose
    

HAP 包构建

参考指导文档第四部分,创建 HarmonyOS 应用工程并集成编译产物。

使用示例

JavaScript 调用示例

const addon = require('electron-addon.node');

// 调用原生方法
console.log('Hello from addon:', addon.hello());
console.log('Directory:', addon.getDir());

ETS 绑定示例

import { JsBindingTest } from 'library';

// 初始化绑定
JsBindingTest.init();
JsBindingTest.bind();

// 调用方法
const result = JsBindingTest.getUserDesktopDir();

重要说明

⚠️ 注意事项:

  • 所有路径配置需要根据实际环境修改
  • 请结合使用《Electron框架HarmonyOS开发指导》
  • 编译前请确保 Electron 工具链环境变量已正确配置
  • 证书问题可通过配置 ~/.npmrc 或设置 NODE_TLS_REJECT_UNAUTHORIZED=0 解决

文档参考

详细的开发指导请参考:

许可证

本项目遵循 Apache-2.0 许可证。

贡献

欢迎提交 Issue 和 Pull Request 来改进本项目。