302 lines
7.0 KiB
Markdown
302 lines
7.0 KiB
Markdown
# HarmonyOS Electron 快速上手指南
|
||
|
||
本指南将帮助您在 30 分钟内快速上手 HarmonyOS Electron 开发。
|
||
|
||
## 📋 准备清单
|
||
|
||
### 开发环境
|
||
- [ ] DevEco Studio 4.0+
|
||
- [ ] HarmonyOS SDK API Level 10+
|
||
- [ ] Node.js 16.x+
|
||
- [ ] 鸿蒙设备或模拟器
|
||
|
||
### 必需文件
|
||
- [ ] Electron 应用源码或编译产物
|
||
- [ ] 开发者证书(可选,用于签名)
|
||
|
||
## 🚀 5 分钟快速开始
|
||
|
||
### 步骤 1: 克隆项目
|
||
```bash
|
||
git clone https://github.com/ohosvscode/ohos_electron_hap.git
|
||
cd ohos_electron_hap
|
||
```
|
||
|
||
### 步骤 2: 添加 Electron 应用
|
||
将您的 Electron 应用代码放入:
|
||
```
|
||
web_engine/src/main/resources/resfile/resources/app/
|
||
```
|
||
|
||
### 步骤 3: 构建运行
|
||
1. 用 DevEco Studio 打开项目
|
||
2. 点击 **Build** → **Build Hap(s)**
|
||
3. 点击运行按钮安装到设备
|
||
|
||
🎉 **恭喜!您的第一个鸿蒙 Electron 应用已经运行起来了!**
|
||
|
||
## 📖 详细配置教程
|
||
|
||
### 自定义应用信息
|
||
|
||
#### 修改应用名称
|
||
编辑 `electron/src/main/resources/zh_CN/element/string.json`:
|
||
```json
|
||
{
|
||
"string": [
|
||
{
|
||
"name": "EntryAbility_label",
|
||
"value": "我的鸿蒙应用"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 替换应用图标
|
||
1. 准备图标文件(建议 512x512 PNG)
|
||
2. 替换 `AppScope/resources/base/media/app_icon.png`
|
||
3. 重新构建应用
|
||
|
||
#### 设置启动窗口
|
||
编辑 `electron/src/main/module.json5`,在 abilities 中添加:
|
||
```json
|
||
"metadata": [
|
||
{
|
||
"name": "ohos.ability.window.width",
|
||
"value": "1200"
|
||
},
|
||
{
|
||
"name": "ohos.ability.window.height",
|
||
"value": "800"
|
||
},
|
||
{
|
||
"name": "ohos.ability.window.left",
|
||
"value": "center"
|
||
},
|
||
{
|
||
"name": "ohos.ability.window.top",
|
||
"value": "center"
|
||
}
|
||
]
|
||
```
|
||
|
||
### 权限配置
|
||
|
||
#### 基础权限(自动获得)
|
||
这些权限会自动获得,无需特殊申请:
|
||
- 网络访问
|
||
- 获取网络信息
|
||
- 后台运行
|
||
- 读取剪贴板
|
||
|
||
#### 需要申请的权限
|
||
编辑 `web_engine/src/main/module.json5`,在 `requestPermissions` 中添加:
|
||
|
||
```json
|
||
{
|
||
"name": "ohos.permission.CAMERA",
|
||
"reason": "$string:camera_reason",
|
||
"usedScene": {
|
||
"abilities": ["EntryAbility"],
|
||
"when": "inuse"
|
||
}
|
||
}
|
||
```
|
||
|
||
常用权限列表:
|
||
- `ohos.permission.CAMERA` - 相机
|
||
- `ohos.permission.MICROPHONE` - 麦克风
|
||
- `ohos.permission.LOCATION` - 位置
|
||
- `ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY` - 下载目录
|
||
|
||
### 应用签名
|
||
|
||
#### 申请开发者证书
|
||
1. 访问 [华为开发者联盟](https://developer.huawei.com/)
|
||
2. 注册开发者账号
|
||
3. 申请 HarmonyOS 应用签名证书
|
||
|
||
#### 配置签名
|
||
1. 在 DevEco Studio 中选择 **File** → **Project Structure**
|
||
2. 选择 **Signing Configs**
|
||
3. 配置证书文件和密码
|
||
4. 重新构建生成已签名 HAP
|
||
|
||
## 💡 实用示例
|
||
|
||
### 示例 1: 创建悬浮窗
|
||
```javascript
|
||
const { BrowserWindow } = require('electron');
|
||
|
||
function createFloatWindow() {
|
||
const floatWindow = new BrowserWindow({
|
||
windowInfo: {
|
||
type: 'floatWindow'
|
||
},
|
||
width: 400,
|
||
height: 300,
|
||
transparent: true,
|
||
opacity: 0.9,
|
||
frame: false,
|
||
alwaysOnTop: true
|
||
});
|
||
|
||
floatWindow.loadURL('https://www.example.com');
|
||
return floatWindow;
|
||
}
|
||
```
|
||
|
||
### 示例 2: 请求系统权限
|
||
```javascript
|
||
const { systemPreferences } = require('electron');
|
||
|
||
async function requestPermissions() {
|
||
// 请求相机权限
|
||
const cameraGranted = await systemPreferences.requestSystemPermission('camera');
|
||
console.log('相机权限:', cameraGranted ? '已授权' : '被拒绝');
|
||
|
||
// 请求麦克风权限
|
||
const micGranted = await systemPreferences.requestSystemPermission('microphone');
|
||
console.log('麦克风权限:', micGranted ? '已授权' : '被拒绝');
|
||
|
||
// 请求目录访问权限
|
||
const dirGranted = await systemPreferences.requestDirectoryPermission(null);
|
||
console.log('目录权限:', dirGranted ? '已授权' : '被拒绝');
|
||
}
|
||
|
||
// 在应用启动时调用
|
||
app.whenReady().then(requestPermissions);
|
||
```
|
||
|
||
### 示例 3: 检查权限状态
|
||
```javascript
|
||
const { systemPreferences } = require('electron');
|
||
|
||
function checkPermissionStatus() {
|
||
const cameraStatus = systemPreferences.getMediaAccessStatus('camera');
|
||
const micStatus = systemPreferences.getMediaAccessStatus('microphone');
|
||
|
||
console.log('权限状态:', {
|
||
camera: cameraStatus, // 'granted', 'denied', 'not-determined'
|
||
microphone: micStatus
|
||
});
|
||
}
|
||
```
|
||
|
||
## 🛠️ 调试技巧
|
||
|
||
### 渲染进程调试
|
||
```javascript
|
||
// 在主进程中
|
||
const { BrowserWindow } = require('electron');
|
||
|
||
const win = new BrowserWindow({
|
||
webPreferences: {
|
||
nodeIntegration: true,
|
||
contextIsolation: false
|
||
}
|
||
});
|
||
|
||
// 打开开发者工具
|
||
win.webContents.openDevTools();
|
||
```
|
||
|
||
### 主进程调试
|
||
|
||
#### 1. 启用调试模式
|
||
编辑 `web_engine/src/main/ets/components/WebWindow.ets`:
|
||
```typescript
|
||
// 添加调试参数
|
||
let inspect = '--inspect=9229';
|
||
let vec_args = [
|
||
'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
||
resDir,
|
||
inspect // 添加这行
|
||
];
|
||
```
|
||
|
||
#### 2. 配置端口转发
|
||
```bash
|
||
hdc fport tcp:9229 tcp:9229
|
||
```
|
||
|
||
#### 3. Chrome 调试
|
||
1. 在 Chrome 中访问:`chrome://inspect`
|
||
2. 点击 "Configure..." 添加 `localhost:9229`
|
||
3. 启动应用后点击 "inspect" 开始调试
|
||
|
||
## 🔧 常见问题解决
|
||
|
||
### 问题 1: 构建失败 "找不到 SO 库"
|
||
**解决方案**:
|
||
1. 检查 `electron/libs/arm64-v8a/` 目录是否存在
|
||
2. 确认 5 个 SO 文件都已正确放置
|
||
3. 检查文件权限
|
||
|
||
### 问题 2: 应用启动崩溃
|
||
**解决方案**:
|
||
1. 检查 Electron 应用代码是否放在正确位置
|
||
2. 确认应用代码已正确编译(如 TypeScript → JavaScript)
|
||
3. 查看 DevEco Studio 的日志输出
|
||
|
||
### 问题 3: 权限被拒绝
|
||
**解决方案**:
|
||
1. 检查 `module.json5` 中的权限声明
|
||
2. 确认已正确调用权限请求 API
|
||
3. 对于 ACL 权限,确认已申请相应证书
|
||
|
||
### 问题 4: 三方库不兼容
|
||
**解决方案**:
|
||
```javascript
|
||
// 检查平台
|
||
if (process.platform === 'ohos') {
|
||
// 鸿蒙平台特殊处理
|
||
console.log('运行在 HarmonyOS 上');
|
||
}
|
||
|
||
// 替换不兼容的库
|
||
const fs = process.platform === 'ohos'
|
||
? require('./ohos-fs-polyfill')
|
||
: require('fs');
|
||
```
|
||
|
||
## 📚 进阶学习
|
||
|
||
### 了解鸿蒙文件系统
|
||
```javascript
|
||
// 应用数据目录
|
||
const userDataPath = '/data/storage/el2/base/files';
|
||
const tempPath = '/data/storage/el2/base/temp';
|
||
const cachePath = '/data/storage/el2/base/cache';
|
||
|
||
// 使用 Electron API
|
||
const { app } = require('electron');
|
||
console.log('用户数据目录:', app.getPath('userData'));
|
||
console.log('临时目录:', app.getPath('temp'));
|
||
```
|
||
|
||
### 性能优化建议
|
||
1. **预加载重要资源**: 将常用文件放在应用包内
|
||
2. **合理使用权限**: 只申请必需的权限
|
||
3. **优化启动时间**: 减少首屏加载资源
|
||
4. **内存管理**: 及时释放不用的窗口和资源
|
||
|
||
### 发布准备
|
||
1. **测试各种权限场景**
|
||
2. **验证多窗口功能**
|
||
3. **检查应用图标和名称**
|
||
4. **准备应用商店描述**
|
||
|
||
## 🎯 下一步
|
||
|
||
- 💬 加入开发者社区交流
|
||
|
||
---
|
||
|
||
**需要帮助?**
|
||
- 📖 查看完整文档
|
||
- 🐛 提交 Issue
|
||
- 💬 联系维护团队
|
||
|
||
祝您开发愉快!🎉
|