【鸿蒙心迹】我的鸿蒙之旅,实战中的技术攻坚与成长印记


引言

每一项技术的进步,都是一段探索与攻坚的历程。

回想起从一开始接触鸿蒙(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
前景层
background.png
背景层
layered_image.json
app.json5
module.json5
层级 文件 作用 尺寸建议
前景层 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

参考资源


快速修改清单:

  • 准备 432×432 px PNG 图标
  • 替换 foreground.pngbackground.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、传感器)、功耗与性能、厂商特性或发版前回归 → 真机

三、环境准备
  1. DevEco Studio(建议使用官方发布版,含 HarmonyOS SDK)
  2. 项目依赖ohpm install(如使用 ArkUI 依赖)
  3. 签名/调试证书:确保已配置调试签名(Debug profile)
  4. 真机驱动与调试
    • 开启设备 开发者选项HDB(或 USB 调试)
    • 首次连接接受 HDB 授权
    • 安装必要驱动(Windows 常见)

四、操作步骤
4.1 使用 Previewer(预览器)
  1. 打开需要预览的 .ets(或 ArkUI TS)页面文件
  2. 在 IDE 右侧/底部打开 Previewer 面板
  3. 点击 Start/刷新,修改代码会 热重载(支持大多数 UI 改动)
  4. 留意:复杂数据、系统能力、硬件调用在预览器中可能不可用或表现与运行时不同

适合:布局、样式、组件组合、轻交互的快速试错


4.2 使用 Huawei Simulator(模拟器)
  1. 打开 Device Manager(设备管理器)
  2. 选择/创建目标 Simulator(分辨率/形态/系统版本)并 启动
  3. 在运行配置中选择该模拟器,点击 Run/Debug
  4. 可在模拟器面板中模拟 定位/网络/旋转/深浅色 等(以镜像支持为准)
  5. 对于摄像头/NFC/蓝牙等能力,若镜像不支持则需改用真机测试

适合:业务流程联调、权限/路由/存储/网络等功能验证


4.3 使用华为真机(物理设备)
  1. 设备端开启 开发者选项HDB/USB 调试
  2. 使用数据线连接到电脑,首次需在手机上 允许调试
  3. DevEco Studio 设备列表中选择该设备,点击 Run/Debug
  4. 进行 性能/功耗/启动时长/相机/蓝牙/NFC/传感器 等真实验证
  5. 建议开启 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。🚀

在这里插入图片描述
最后说的是,这个游戏已经到了最后的广告接入阶段。还需要申请著作权 ,就可以上线了。,祝这个游戏上线成功

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐