ohos_electron_hap/README.md
Hermes Agent 6518ae4a73
Some checks are pending
HarmonyOS CI/CD Pipeline / build (push) Waiting to run
HarmonyOS CI/CD Pipeline / publish (push) Blocked by required conditions
docs: set Chinese as default language (README-CN.md -> README.md)
2026-06-09 22:23:18 +08:00

228 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HarmonyOS Electron HAP
[English](./README.md) | 简体中文
这是一个基于 HarmonyOS 平台的 Electron 应用程序包HAP项目支持在鸿蒙设备上运行 Electron 应用。
## 项目结构
```
ohos_electron_hap/
├── AppScope/ # 应用范围配置
├── chromium/ # Chromium 模块
├── electron/ # Electron 主模块
├── web_engine/ # Web 引擎组件
├── hvigor/ # 构建工具配置
├── build-profile.json5 # 项目构建配置
├── hvigorfile.ts # 构建脚本
└── oh-package.json5 # 项目依赖配置
```
## 快速开始
### 环境要求
- **DevEco Studio**: 4.0 或更高版本
- **HarmonyOS SDK**: API Level 10 或更高
- **Node.js**: 16.x 或更高版本
- **HDC工具**: 用于设备调试和安装
### 1. 准备资源文件
在开始构建之前,需要准备以下资源:
#### Electron 应用代码
将您的 Electron 应用代码(编译后的产物)放入:
```
web_engine/src/main/resources/resfile/resources/app/
```
### 2. 构建 HAP 包
#### 使用 DevEco Studio
1. 用 DevEco Studio 打开项目
2. 选择 **Build****Build Hap(s)/APP(s)****Build Hap(s)**
3. 或点击右上角的运行按钮启动应用
构建完成后,未签名的 HAP 包将保存在:
```
electron/build/default/outputs/default/electron-default-unsigned.hap
```
### 3. 应用签名
为了在设备上正常运行,需要对 HAP 包进行签名:
> 建议使用自动签名验证
1. 申请华为开发者证书
2. 在 DevEco Studio 中配置签名信息
3. 重新构建生成已签名的 HAP 包
详细签名流程请参考:[应用/服务签名-DevEco Studio](https://developer.huawei.com/)
### 4. 安装和运行
#### 通过 DevEco Studio
直接点击运行按钮安装到设备
#### 通过命令行
```bash
hdc app install <已签名hap包路径>
# 示例: hdc app install electron-default-signed.hap
```
## 应用定制
### 修改应用名称
编辑文件:`electron/src/main/resources/zh_CN/element/string.json`
```json
{
"string": [
{
"name": "EntryAbility_label",
"value": "您的应用名称"
}
]
}
```
### 替换应用图标
将新图标文件放入:`AppScope/resources/base/media/`
### 配置启动窗口大小
编辑 `electron/src/main/module.json5`,在 abilities 中添加 metadata
```json
"metadata": [
{
"name": "ohos.ability.window.height",
"value": "800"
},
{
"name": "ohos.ability.window.width",
"value": "800"
},
{
"name": "ohos.ability.window.left",
"value": "center"
},
{
"name": "ohos.ability.window.top",
"value": "center"
}
]
```
## 权限配置
应用权限在 `web_engine/src/main/module.json5` 文件的 `requestPermissions` 字段中配置。
### 基础权限(无需特殊申请)
- `ohos.permission.INTERNET` - 网络访问
- `ohos.permission.GET_NETWORK_INFO` - 获取网络信息
- `ohos.permission.RUNNING_LOCK` - 后台运行锁
- `ohos.permission.PREPARE_APP_TERMINATE` - 应用终止准备
### 需要申请的权限
- `ohos.permission.CAMERA` - 相机权限
- `ohos.permission.MICROPHONE` - 麦克风权限
- `ohos.permission.LOCATION` - 位置权限
- `ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY` - 下载目录访问
## HarmonyOS 特有功能
### 悬浮窗
```javascript
const { BrowserWindow } = require('electron');
let floatWindow = new BrowserWindow({
windowInfo: {
type: 'floatWindow' // mainWindow, subWindow, floatWindow
},
parent: mainWindow,
x: 100,
y: 100,
width: 800,
height: 600,
transparent: true, // 透明窗口
opacity: 0.5 // 透明度
});
```
### 系统权限请求
```javascript
const { systemPreferences } = require('electron');
// 请求相机权限
systemPreferences.requestSystemPermission('camera').then(granted => {
console.log('Camera permission:', granted);
});
// 请求目录权限
systemPreferences.requestDirectoryPermission(null).then(granted => {
console.log('Directory permission:', granted);
});
```
## 调试
### 渲染进程调试
```javascript
const { BrowserWindow } = require('electron');
const win = new BrowserWindow();
win.webContents.openDevTools();
```
### 主进程调试
1.`web_engine/src/main/ets/components/WebWindow.ets` 中添加调试参数:
```typescript
let inspect = '--inspect=9229';
let vec_args = [..., inspect];
```
2. 配置端口转发:
```bash
hdc fport tcp:9229 tcp:9229
```
3. 在 Chrome 浏览器中访问:`chrome://inspect`
## 应用数据目录
- 用户数据默认存储在:`/data/storage/el2/base/files`
- 应用安装目录:`/data/storage/el1/bundle`
- 数据库目录:`/data/storage/el2/database`
## 常见问题
### 构建失败
1. 检查 SO 库文件是否完整
2. 确认 Electron 应用代码已正确放置
3. 验证权限配置是否正确
### 三方库兼容性
- **C++ addon**: 需要重新编译适配鸿蒙平台
- **平台检测**: 需要适配 `process.platform === 'ohos'`
- **二进制文件**: 可能需要替换为鸿蒙版本
### 权限问题
如果某些 ACL 权限无法获得,可以暂时注释掉相关权限:
```json
// "requestPermissions": [
// {
// "name": "ohos.permission.SYSTEM_FLOAT_WINDOW"
// }
// ]
```
## 贡献指南
1. Fork 本仓库
2. 创建功能分支:`git checkout -b feature/your-feature`
3. 提交更改:`git commit -am 'Add some feature'`
4. 推送到分支:`git push origin feature/your-feature`
5. 提交 Pull Request
## 联系我们
如遇到问题或需要支持,请提交 Issue 或联系维护团队。