NetLab 是我开发的 HarmonyOS 网络仿真实验应用,已上架华为应用市场。本文复盘从需求分析到上架的完整开发流程,分享 ArkTS + ArkUI 实战经验,希望对鸿蒙开发者有所启发。

一、项目背景与需求

作为高校信息技术教师,我发现学生网络实验课面临痛点:物理设备昂贵且数量不足,一台华为 S5700 交换机数千元,学校实验室难以人手一台。于是萌生开发移动端网络仿真工具的想法——让学生在手机/平板上就能练习网络配置。

需求核心:零硬件成本 + 移动端便携 + 真实设备体验 + 覆盖教学实验场景

二、技术选型:ArkTS + ArkUI

选择 HarmonyOS 原因:① 华为生态布道师,技术栈熟悉 ② 鸿蒙设备增长快,市场机会好 ③ ArkUI 声明式 UI 开发效率高。

模块技术方案选型理由
UI 框架ArkUI(声明式)组件化、状态驱动,开发效率高
开发语言ArkTSTypeScript 超集,类型安全
网络仿真引擎纯前端 JS 实现零后端依赖,离线可用
CLI 交互Web 组件 + JS复用成熟终端组件
内购支付IAP Kit华为官方支付,安全可靠

三、核心架构设计

应用采用 ArkUI 原生层 + Web 前端层 混合架构:

NetLab 应用架构:

┌─────────────────────────────────┐
│         ArkUI 原生层             │
│  (导航/实验列表/设置/IAP)        │
├─────────────────────────────────┤
│         Web 组件层               │
│  ┌───────────┐ ┌─────────────┐ │
│  │ 拓扑画布   │ │ CLI 终端    │ │
│  │ (Canvas)  │ │ (Terminal)  │ │
│  └───────────┘ └─────────────┘ │
│  ┌───────────────────────────┐ │
│  │   网络仿真引擎 (JS)        │ │
│  │   设备模型/路由计算/ping   │ │
│  └───────────────────────────┘ │
├─────────────────────────────────┤
│      rawfile 资源 + 本地存储     │
└─────────────────────────────────┘
💡
为何用 Web 组件? 网络拓扑画布需要 Canvas 绘图 + 拖拽交互,Web 端有成熟方案(如 jsPlumb),用 ArkUI 的 Web 组件嵌入可复用前端生态,降低开发成本。

四、网络仿真引擎实现

仿真引擎是核心,用纯 JS 实现,模拟设备行为和网络协议:

  • 设备模型:交换机(MAC学习+VLAN)、路由器(路由表+转发)、防火墙(安全域+策略)、PC(ARP+ICMP)
  • 路由计算:根据路由表最长前缀匹配,决定数据包下一跳
  • ping/tracert 实现:模拟 ICMP Echo Request/Reply,按拓扑逐跳转发
  • VRP 命令解析:命令词法分析 + 语义执行,映射到设备模型操作

五、VRP 命令行解析

CLI 是网络实验的灵魂。实现要点:

// 命令注册示例(简化)
const commands = {
  'system-view': () => enterSystemView(),
  'vlan': (args) => createVlan(args[0]),
  'interface': (args) => enterInterface(args[0]),
  'ip address': (ip, mask) => configIp(ip, mask),
  'display vlan': () => showVlanTable(),
  'ping': (ip) => simulatePing(ip),
};

// 命令解析流程: 输入 → 词法分析 → 匹配命令 → 执行 → 输出
function parseCommand(input) {
  const tokens = input.trim().split(/\s+/);
  const cmd = matchCommand(tokens);
  return cmd ? cmd.execute(tokens) : 'Unknown command';
}

支持命令补全(Tab)、帮助(?)、历史记录(↑↓),贴合真实设备体验。

六、IAP 内购集成

商业模式:免费 + 付费解锁。VLAN 实验免费,进阶实验 ¥5 一次性解锁。

  1. AGC 后台签署 IAP 协议、创建非消耗型商品(ID: unlock_all_experiments)
  2. 代码集成 IAP Kit,调用 purchase() 发起支付
  3. 支付成功后本地标记解锁状态,restorePurchase() 换设备恢复
  4. 商品随应用版本一起提交审核
⚠️
踩坑经验:debug 包环境下 IAP 无法跳转支付(环境限制非 bug),沙箱测试需手机号一致 + 等满10分钟。正式环境支付正常。

七、AGC 上架审核

上架流程:

  1. 签名配置:build-profile.json5 配置 Release 签名(首次因缺 Release 配置报错 993)
  2. 构建打包:DevEco Studio → Build → Generate Signed HAP
  3. AGC 上传:AGC → 分发 → 应用市场 → 上传 .app 包
  4. 自检:AGC 自动检查包合规性,显示"已达标"
  5. 提交审核:填写版本特性描述 → 提交,1-3 工作日出结果

1.0.2 版本审核中,华为反馈深色模式需适配(告警),已用 $r('app.color.xxx') 资源引用 + @media (prefers-color-scheme: dark) 完成适配。

八、经验总结

  • 混合架构务实:ArkUI 管原生交互,Web 组件管复杂画布,各取所长
  • 仿真引擎是护城河:设备行为模拟的真实度决定应用价值
  • IAP 沙箱测试坑多:debug 环境限制多,建议直接等审核通过后正式环境验证
  • 审核反馈要重视:华为审核质量高,深色模式等 UX 建议值得采纳
  • 激励计划是动力:月活和评分达标有奖励,倒逼运营推广

NetLab 已上架华为应用市场,欢迎下载体验。后续将分享 IAP 集成细节、深色模式适配等专题文章。