鸿蒙南向开发教程Day 2:创建自己的 Hello World 工程

目标 :学会自己命名模块,创建并编译第一个自定义 Hello World 工程

前置条件:已完成 Day 1 的环境搭建(DevEco Device Tool + 工具链 + 源码导入)


一、工程结构说明

在 src/applications/sample/wifi-iot/app/ 目录下创建自定义模块,这里以 myhello 为例:

复制代码
app/
├── BUILD.gn                    # 应用入口构建配置
└── myhello/                    # 自定义模块目录(自己命名)
    ├── BUILD.gn                # 模块构建配置
    └── myhello.c               # 主程序源码(自己命名)

二、文件详解

2.1 应用入口 app/BUILD.gn

gn 复制代码
import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
  features = [
    "myhello:example_myhello"    # 引用 myhello 模块下的 example_myhello 目标
  ]
}
  • myhello:目录名(自己命名)
  • example_myhello:构建目标名(自己命名)

2.2 模块构建 app/myhello/BUILD.gn

gn 复制代码
static_library("example_myhello") {    # 构建目标名,与 BUILD.gn 中引用一致
    sources = [
        "myhello.c"                     # 源文件名(自己命名)
    ]

    include_dirs = [
        "//utils/native/lite/include",   # 系统头文件路径
    ]
}

2.3 主程序 app/myhello/myhello.c

c 复制代码
#include "ohos_init.h"   // OpenHarmony 系统初始化头文件

void MyHelloMain(void)    // 函数名自己命名
{
    printf("My Hello World!\n");  // 自定义输出内容
}

SYS_RUN(MyHelloMain);     // 注册为系统启动入口,函数名需一致

三、命名规则总结

位置 命名示例 说明
目录名 myhello 模块文件夹,小写英文
构建目标 example_myhello BUILD.gn 中 static_library() 的名字
源文件名 myhello.c 与目录名保持一致,方便管理
函数名 MyHelloMain 驼峰命名,与模块名对应
SYS_RUN 参数 MyHelloMain 必须与函数名完全一致

四、编译与验证

4.1 编译

  1. VSCode 底部工具栏点击 Build
  2. 或快捷键 Ctrl+Shift+B

编译成功后,镜像位于:

复制代码
out/hispark_pegasus/wifiiot_hispark_pegasus/Hi3861_wifiiot_app_allinone.bin

4.2 烧录

  1. 连接开发板 USB
  2. 点击 IDE 的 Upload 按钮,等待弹出提示,按下开板RESET按键
  3. 等待烧录完成(约 30 秒)

4.3 查看输出

打开串口工具:

  • 端口:开发板对应的 COM 口
  • 波特率:115200

重启开发板,串口输出:

复制代码
My Hello World!

五、常见问题

问题 原因 解决
编译报错 target not found BUILD.gn 中目录名或目标名写错 检查 app/BUILD.gn 的 features 路径是否与目录结构一致
编译报错 undefined reference 函数名与 SYS_RUN 不一致 确认 SYS_RUN(MyHelloMain) 与函数定义一致
无串口输出 波特率不对 确认串口工具设置为 115200

六、练习

尝试将 myhello 改为自己的名字,例如:

  • 目录:zhangsan
  • 目标:example_zhangsan
  • 函数:ZhangSanMain
  • 输出:"Hello from ZhangSan!"

七、下一步

Day 3 预告:学习鸿蒙内核,任务创建

相关推荐
resh_people1 小时前
开源鸿蒙平台 KMP_CMP 三方库「Kermit」适配全流程
华为·开源·harmonyos
李游Leo3 小时前
HarmonyOS 7 EasyGo + ArkUI Navigation:平行视界主副页筛选事务与跨栏撤销一致性【鸿蒙心迹】
华为·harmonyos
HwJack204 小时前
【共创稿事节】HarmonyOS 7空间应用的可用性测试和体验评估小方法分享
华为·harmonyos·可用性测试
m0_738185824 小时前
Flutter 鸿蒙化实战:flutter_scankit 适配 OpenHarmony,华为 ScanKit 扫码
flutter·华为·harmonyos·鸿蒙
zhangfeng11334 小时前
Ag / Cu / Au / Ru / Ir / Rh银 铜 金 钌铱 铑 纳米尺度下的 导电性 + 扩散/迁移缺点
人工智能·华为·ai编程·npu
用户117910488336 小时前
别让AI随便启动你的LSP:hmharness给语言服务器加SHA256门禁 GitHub:swsgbl/hmharness
ai编程·harmonyos
李游Leo9 小时前
HarmonyOS 7 + Share Kit-Window Kit:精准碰一碰屏幕坐标的窗口换算与落点拒绝【鸿蒙心迹】
华为·harmonyos
翼辉cto9 小时前
Compose Multiplatform KV 存储库 multiplatform-settings 的 OpenHarmony 鸿蒙化适配实战
华为·harmonyos
事圆则缓11 小时前
Flutter 开发鸿蒙实战:从 OpenHarmony 适配版到 HAP 构建与插件接入
flutter·华为·harmonyos
传奇开心果编程11 小时前
【ArkUI进阶练中学】第9课:分布式能力与多设备协同
学习·ui·华为·harmonyos