【鸿蒙心迹】我的鸿蒙之旅,实战中的技术攻坚与成长印记
【鸿蒙心迹】我的鸿蒙之旅,实战中的技术攻坚与成长印记
文章目录
引言
每一项技术的进步,都是一段探索与攻坚的历程。
回想起从一开始接触鸿蒙(Harmony OS)系统,还是 1年前,参加了开发者学堂的考试 。 但是正正 学以致用的,还是 1月前在上海参加了一个开发者论坛,坚定了我开发一款 开发 app 信心。 (如图。参加9月6日 应用开发创新实践)

在这篇文章中,我将分享我的鸿蒙之旅,特别是如何从一个起步较为缓慢背后经历了哪些技术攻坚,过程中所获得的心得和成长。
技术攻坚
我的初步想法是做一个猜数字的小游戏,这个想法源于 我女儿小的时候,老师给全部做的一个游戏,规则是一个想一个1-100的数字,然后大家通过 对比,猜出这个数字。最终决定做一款Hap 小游戏
1.我的第一个 app “hello world”
第一空白 的其实很简单 就是新建一个空白的 Empty Ability
代码如下
```typescript
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize($r('app.float.page_text_font_size'))
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(() => {
this.message = 'Welcome';
})
}
.height('100%')
.width('100%')
}
}

2.技术攻坚中的小知识 -怎么全屏显示?
import { window } from ‘@kit.ArkUI’; //window:窗口管理模块,用于操作应用窗口
import { common } from ‘@kit.AbilityKit’; //common:通用能力模块,提供上下文等基础功能
import { window } from '@kit.ArkUI';
import { common } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
@State message: string = 'Hello Harmony';
async aboutToAppear() {
const context = getContext(this) as common.UIAbilityContext;
// 获取窗口实例
try {
const windowClass = await window.getLastWindow(context);
if (windowClass) {
// 设置窗口全屏显示
await windowClass.setWindowLayoutFullScreen(true);
} else {
console.log('当前窗口获取失败');
}
} catch (error) {
console.error('窗口获取或设置全屏失败:', error);
}
}
build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize($r('app.float.page_text_font_size'))
.fontWeight(FontWeight.Bold)
.onClick(() => {
this.message = 'Hello World';
})
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
.backgroundColor('#655423')
}
}

这里一个知识点
应用启动
↓
Index 页面组件创建
↓
🎯 aboutToAppear() 生命周期触发
↓
📱 获取 UIAbilityContext(应用上下文)
↓
🪟 通过 window.getLastWindow() 获取当前窗口实例
↓
✅ 判断窗口对象是否存在
↓
⚙️ 调用 setWindowLayoutFullScreen(true) 设置全屏
↓
🎨 页面布局重新计算(隐藏状态栏/导航栏)
↓
✨ 页面以全屏沉浸式效果显示
3 技术攻坚中的小知识 -怎改图标?
HarmonyOS 使用分层图标(Layered Icon)系统,图标由两部分组成:
| 层级 | 文件 | 作用 | 尺寸建议 |
|---|---|---|---|
| 前景层 | foreground.png |
图标主体(Logo、字母等) | 432×432 px |
| 背景层 | background.png |
背景色或渐变 | 432×432 px |
| 配置文件 | layered_image.json |
关联前景和背景 | - |
需求替换 图标的 路径
常见问题
Q1: 图标边缘被裁切?
原因: 未预留安全边距
解决: 图标核心内容应在 288×288 px 中心区域(留 72px 边距)
Q2: 不同设备图标大小不一致?
原因: HarmonyOS 会对不同密度设备应用自适应缩放
最佳实践:
- 始终提供 432×432 px 高清素材
- 系统会自动缩放至 216×216 px(@2x)或 144×144 px(@1x)
Q3: 如何修改启动图标(Splash Icon)?
启动图标配置在 module.json5:
{
"abilities": [{
"startWindowIcon": "$media:startIcon", // 修改这个引用
"startWindowBackground": "$color:start_window_background"
}]
}
替换文件:entry/src/main/resources/base/media/startIcon.png
参考资源
- HarmonyOS 图标设计规范
- 应用配置文件说明
- 图标配置:
AppScope/resources/base/media/layered_image.json
快速修改清单:
- 准备 432×432 px PNG 图标
- 替换
foreground.png和background.png - Clean Project + Rebuild
- 运行查看效果
技术攻坚中的小知识 -测试?
在 harmony 测试 中有三种测试方法
第一 Previewer-测试
第二 Huawei Simulator 测试

第三 真机 测试
以下是我的一些经验
对比
测试方式对比与操作指南(Previewer / Huawei Simulator / 真机)
适用:HarmonyOS/ArkUI 项目(DevEco Studio)。
目的:快速理解三种测试方式的差异、使用场景与一步步操作。
一、三种测试方式差异概览
| 维度 | Previewer(预览器) | Huawei Simulator(模拟器) | 华为真机(物理设备) |
|---|---|---|---|
| 运行环境 | IDE 内部快速预览 | PC 上的 HarmonyOS 虚拟设备 | 实际手机/平板/穿戴设备 |
| 启动速度 | 最快(秒级) | 中等(需启动镜像) | 中等(首次驱动/授权稍慢) |
| API/能力覆盖 | 有限:偏 UI/组件渲染 | 较全:多数系统与框架能力 | 最全:真实硬件与系统行为 |
| 硬件特性(摄像头/NFC/蓝牙等) | 基本不支持或模拟极有限 | 部分可模拟(受镜像支持限制) | 全面支持(以设备为准) |
| 性能 & 帧率评估 | 不可信 | 有参考但与真机不同(x86/虚拟化) | 最可信(真实 SoC/驱动) |
| 调试体验 | UI 快速迭代最强 | 功能联调友好(定位/网络可控) | 真实场景调试(权限/前后台/耗电) |
| 适合阶段 | 早期 UI 验证、布局调优 | 中期功能联调、流程验证 | 后期性能/兼容/发布前验收 |
口诀:先预览器 → 再模拟器 → 终上真机。
二、如何选择?
- 只改了样式/布局/交互动画?→ Previewer
- 要用系统/框架能力(如路由、存储、权限流)→ Simulator
- 涉及真实硬件(摄像头、蓝牙、NFC、传感器)、功耗与性能、厂商特性或发版前回归 → 真机
三、环境准备
- DevEco Studio(建议使用官方发布版,含 HarmonyOS SDK)
- 项目依赖:
ohpm install(如使用 ArkUI 依赖) - 签名/调试证书:确保已配置调试签名(Debug profile)
- 真机驱动与调试:
- 开启设备 开发者选项 与 HDB(或 USB 调试)
- 首次连接接受 HDB 授权
- 安装必要驱动(Windows 常见)
四、操作步骤
4.1 使用 Previewer(预览器)
- 打开需要预览的
.ets(或 ArkUI TS)页面文件 - 在 IDE 右侧/底部打开 Previewer 面板
- 点击 Start/刷新,修改代码会 热重载(支持大多数 UI 改动)
- 留意:复杂数据、系统能力、硬件调用在预览器中可能不可用或表现与运行时不同
适合:布局、样式、组件组合、轻交互的快速试错
4.2 使用 Huawei Simulator(模拟器)
- 打开 Device Manager(设备管理器)
- 选择/创建目标 Simulator(分辨率/形态/系统版本)并 启动
- 在运行配置中选择该模拟器,点击 Run/Debug
- 可在模拟器面板中模拟 定位/网络/旋转/深浅色 等(以镜像支持为准)
- 对于摄像头/NFC/蓝牙等能力,若镜像不支持则需改用真机测试
适合:业务流程联调、权限/路由/存储/网络等功能验证
4.3 使用华为真机(物理设备)
- 设备端开启 开发者选项 与 HDB/USB 调试
- 使用数据线连接到电脑,首次需在手机上 允许调试
- DevEco Studio 设备列表中选择该设备,点击 Run/Debug
- 进行 性能/功耗/启动时长/相机/蓝牙/NFC/传感器 等真实验证
- 建议开启 Profiler/Trace 做性能热点与掉帧分析(按需)
适合:真实体验、性能指标、硬件相关与上架前回归
五、常见问题(FAQ)
-
预览器看不到请求数据?
预览器对系统/网络能力支持有限,改用 模拟器/真机。 -
模拟器性能与真机差异大?
正常现象。模拟器 CPU/图形栈与真机不同,性能仅作 功能参考。 -
相机/NFC/蓝牙在模拟器不可用?
取决于镜像支持。需使用 真机 进行验证。 -
设备连接不上?
检查数据线、驱动、HDB 授权与hdc连接状态(见下方命令行)。
总结与展望
从「Hello World」到可控窗口(aboutToAppear + window.getLastWindow + setWindowLayoutFullScreen(true)),再到分层图标(foreground.png / background.png / layered_image.json)与三种测试策略(Previewer→Simulator→真机),这一路让我真正体会到:工程化细节 + 正确的测试顺序 = 学以致用的效率。
这次实践的关键收获:
- 小步快跑,持续验证:UI 改动先走 Previewer;涉及系统/权限/路由用 Simulator;与硬件/性能相关一锤定音靠真机。
- 生命周期即时机:把窗口控制放到
aboutToAppear,能在首屏就拿到窗口实例并设置全屏,减少 UI 闪烁与布局重算带来的割裂。 - 资源与配置要“成体系”:图标采用分层方案更通用;
app.json5 / module.json5的引用关系要清晰,避免构建时才暴露问题。 - 工具链意识:
hdc、Profiler/Trace、Device Manager 组合拳,能显著降低“盲调”的时间成本。
踩坑速记(避免后来者再踩):
- 预览器不等于运行时:网络/系统能力在 Previewer 下常有限,功能验证别“赌运气”。
- 模拟器并非性能标杆:它更适合流程与权限校验,性能结论以真机为准。
- 图标裁切与锯齿:432×432 px 提供高清素材,主体内容控制在 288×288 px 安全区内。
- 调试证书/驱动/授权:首次连接真机务必确认 HDB/USB 调试与授权弹窗已通过,Windows 场景下注意驱动安装。
结语
技术的价值不在“会不会”,而在“能不能把它落地成可复用的方法论”。这一次的鸿蒙之旅,让我把「从想法到成品」的链路走得更顺:用合适的工具做合适阶段的验证,把问题前置、把风险显性化。接下来,我会继续在 HarmonyOS/ArkUI 的生态里输出更完整的实战笔记与开源 Demo,也期待和你们一起交流碰撞,做出真正好玩的 App。🚀

最后说的是,这个游戏已经到了最后的广告接入阶段。还需要申请著作权 ,就可以上线了。,祝这个游戏上线成功
更多推荐

所有评论(0)