1. 鸿蒙开源版PC应用开发环境搭建
最近在折腾Haihong OS(鸿蒙开源版)的PC应用开发,发现这个领域资料确实不多。作为一个从Android开发转过来的老码农,记录下整个探索过程,希望能帮到同样想尝试鸿蒙PC开发的同行们。
1.1 开发工具链选择
鸿蒙开源版的开发工具和华为官方HarmonyOS有些区别。目前PC端开发主要推荐使用以下工具组合:
- DevEco Studio for OpenHarmony:这是官方提供的IDE,基于IntelliJ IDEA定制。最新3.1版本已经支持PC应用开发模板。
- HPM(HarmonyOS Package Manager):包管理工具,类似npm/pip,用于管理鸿蒙的依赖项。
- OpenHarmony SDK:需要特别下载PC版本的SDK,和移动端的SDK不通用。
安装时有个坑要注意:DevEco Studio默认安装的是移动端开发环境,需要手动在SDK Manager中添加"PC应用开发"组件。我一开始没注意,创建项目后死活找不到PC模板,浪费了两小时排查。
1.2 系统环境配置
我的开发机是Windows 11 + WSL2 Ubuntu 20.04双环境。实测发现:
- Windows原生环境对HPM支持更好
- Linux环境编译速度更快(特别是用Docker镜像时)
- Mac M1芯片目前还有些兼容性问题
建议配置:
bash复制# WSL2下的推荐配置
sudo apt install -y git python3.8 python3-pip
pip3 install ohpm
export PATH=$PATH:~/.local/bin
重要提示:OpenHarmony的编译工具链对Python版本敏感,必须用Python 3.7-3.9,3.10+会有兼容性问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 创建首个PC应用项目
2.1 项目初始化
在DevEco Studio中选择"File > New > Project",关键步骤:
- 模板选择"OpenHarmony"下的"PC Application"
- 确保选择的SDK版本≥3.2(低版本不支持PC开发)
- 项目类型选"Application"而非"Service"
- 语言建议选ArkTS(鸿蒙主推的TypeScript超集)
生成的项目结构如下:
code复制MyPcApp
├── entry # 主模块
│ ├── src/main
│ │ ├── ets # ArkTS代码
│ │ ├── resources # 资源文件
│ │ └── config.json # 应用配置
├── build-profile.json5 # 构建配置
└── hvigorfile.ts # 构建脚本
2.2 配置文件解析
config.json是鸿蒙应用的核心配置文件,PC版有几个特殊字段:
json复制{
"deviceTypes": ["pc"], // 必须明确声明pc设备
"windows": {
"width": 1280, // 默认窗口宽度
"height": 720, // 默认窗口高度
"resizable": true // 是否允许调整窗口大小
}
}
这里有个坑:如果忘记声明"pc"设备类型,应用虽然能编译,但在PC模拟器上会直接闪退,错误日志也不明显。
3. PC应用UI开发要点
3.1 布局系统差异
鸿蒙PC应用的UI开发和移动端有些关键区别:
- 窗口管理:需要处理窗口最大化/最小化/拖拽等事件
- 分辨率适配:PC端DPI变化范围更大
- 输入设备:要同时考虑鼠标和键盘操作
推荐使用响应式布局:
typescript复制@Entry
@Component
struct Index {
@State windowWidth: number = 1280
@State windowHeight: number = 720
onWindowSizeChange(size: {width: number, height: number}) {
this.windowWidth = size.width
this.windowHeight = size.height
}
build() {
Column() {
Text('窗口大小: ' + this.windowWidth + 'x' + this.windowHeight)
.fontSize(20)
.width('100%')
}
.width('100%')
.height('100%')
.onWindowSizeChange(this.onWindowSizeChange)
}
}
3.2 菜单栏开发
PC应用通常需要顶部菜单栏,鸿蒙提供了Menu组件:
typescript复制import { Menu, MenuItem } from '@ohos.application.menu'
@Entry
@Component
struct AppMenu {
private menuController: MenuController = new MenuController()
build() {
Column() {
Menu(this.menuController) {
MenuItem({ label: '文件' }) {
MenuItem({ label: '新建' }).onClick(() => {
// 处理点击事件
})
MenuItem({ label: '打开' })
MenuItem({ type: MenuItemType.Separator })
MenuItem({ label: '退出' })
}
MenuItem({ label: '编辑' })
MenuItem({ label: '帮助' })
}
.width('100%')
.height(50)
}
}
}
4. 打包与发布
4.1 构建PC应用包
鸿蒙PC应用使用.hap格式,但和移动端的hap有区别。构建命令:
bash复制# 调试版本
hvigor assembleDebug
# 发布版本
hvigor assembleRelease
生成的hap包位于:
code复制/build/outputs/pc/debug/entry-debug.hap
4.2 安装到模拟器
OpenHarmony提供了PC模拟器,安装步骤:
- 启动模拟器(需要先在BIOS开启VT-x)
- 安装hap工具:
bash复制hdc_std install entry-debug.hap
- 查看日志:
bash复制hdc_std hilog
常见安装错误:
- 错误码100:签名问题,检查是否使用了调试证书
- 错误码403:权限配置错误,检查config.json
- 错误码505:hap包不兼容当前模拟器版本
5. 实际开发中的坑与解决方案
5.1 多窗口管理问题
鸿蒙PC版目前对多窗口支持还不完善。如果需要实现类似IDE的多文档界面,可以用以下workaround:
typescript复制@Entry
@Component
struct MultiWindowDemo {
@State activeTab: number = 0
build() {
Row() {
// 左侧导航
Column() {
ForEach(this.tabs, (tab: string, index: number) => {
Text(tab)
.onClick(() => { this.activeTab = index })
})
}.width(200)
// 右侧内容区
Column() {
if (this.activeTab === 0) {
Tab1Content()
} else if (this.activeTab === 1) {
Tab2Content()
}
}
}
}
}
5.2 本地存储方案
PC应用常需要本地存储,推荐方案:
- 轻量数据:使用
Preferences(类似Android的SharedPreferences)
typescript复制import { preferences } from '@ohos.data.preferences'
let prefs = await preferences.getPreferences(context, 'myprefs')
await prefs.put('key', 'value')
await prefs.flush()
- 结构化数据:使用
RDB关系型数据库
typescript复制import { relationalStore } from '@ohos.data.relationalStore'
const config = {
name: 'mydb.db',
securityLevel: relationalStore.SecurityLevel.S1
}
let db = await relationalStore.getRdbStore(context, config)
- 文件存储:注意PC端的文件路径处理
typescript复制import { fileio } from '@ohos.fileio'
let dir = globalThis.abilityContext.filesDir // 获取应用沙箱目录
let path = dir + '/data.txt'
let fd = fileio.openSync(path, 0o102, 0o666)
5.3 硬件访问限制
目前鸿蒙PC版对硬件的访问还有些限制:
| 硬件功能 | 支持情况 | 替代方案 |
|---|---|---|
| 摄像头 | 部分支持 | 需要通过extension能力 |
| 蓝牙 | 不支持 | 使用网络通信 |
| 打印机 | 不支持 | 调用系统打印对话框 |
| USB设备 | 有限支持 | 需要声明特定权限 |
这些限制在后续版本中可能会逐步放开,建议关注OpenHarmony的版本更新日志。
