当前位置: 首页 > news >正文

移动端性能监控探索:鸿蒙 NEXT 探针架构与技术实现

作者:杨兰馨(楠瑆)

背景介绍

2024 年 10 月 22 日,华为在原生鸿蒙之夜正式发布 HarmonyOS NEXT(版本号 5.0.0,API 12 起)。与此前 HarmonyOS 3.1/4.0 的“双框架、双生态”过渡形态不同,NEXT 直接挥别 Android 开源项目(Android Open Source Project,AOSP),全面切换至自研鸿蒙内核,成为真正意义上的“纯鸿蒙”。

1. 三大关键词读懂 NEXT

  • 纯血:零 AOSP 代码,统一鸿蒙内核 + ArkTS 语法链,彻底去除 Android 兼容包袱。
  • 极速:方舟编译器在编译阶段直接将代码翻译为机器码,极大提升了系统运行效率。
  • 极简:一次开发、多端部署,1(手机)+8(平板、穿戴、车机等)+N(IoT 泛生态)覆盖全场景。

image

2. 开发底座全景

  • 开发 IDE:DevEco Studio(JetBrains 内核),实现可视化多端预览。
  • 开发语言:ArkTS 语言,在 TypeScript 语言基础上,强化静态类型检查,增强并发能力。

image

  • 编译方式:传统的 JS 程序开发中,应用程序往往带的是经过前端打包工具处理过的 JS bundle 文件,在程序运行阶段进行解释执行;这种运行方式需要设备有强大的计算能力。鸿蒙系统能够支持的设备范围广泛,覆盖从低端的 IoT 设备到高性能手机设备。采用传统的方式,无法保证多类型设备的体验一致性。在鸿蒙开发环境中,应用代码是通过前端编译器完成编译的。前端编译器按照语言规范解析源代码,编译成方舟运行时能够理解的二进制字节码格式 ,最后打包到应用中。

image

  • 编译产物:针对不同的部署态需求,模块的编译结果有三种目标形态。
    • HAR(HarmonyOS Archive):这是一种中间编译产物格式,它最终将被编译合并到 HSP 或 HAP 格式的包中。
    • HSP(HarmonyOS Shared Package):HSP 使得模块可以以运行态复用的形式共享。相较于 HAR,当有多个 HAP 包依赖与同一个 HSP 时,最终的打包产物中,HSP 只会存在一份。
    • HAP(HarmonyOS Ability Package):HAP 包是鸿蒙应用可单独安装的容器包。同一个 HAP 包可以支持在多个设备上运行。一次开发上架,多端分发、部署的效果。

image

3. 系统级开放能力图谱

  • 应用框架:提供应用程序开发的基础设施,如运行时、引擎、框架等相关开放能力。
  • 应用服务:提供应用程序开发的核心功能和服务,包括推送消息,认证登录,支付等开放能力。
  • 媒体:存储、处理、传输视频、音频、图片等多媒体内容的相关开放能力。
  • 图形:渲染、显示和交互的图形技术,包括 2D 和 3D 图形、动画、游戏等相关的开放能力。
  • AI:机器学习、深度学习、自然语言处理、计算机视觉等相关的开放能力。
  • 系统:通信、安全、驱动程序、DFX、诊断和测试等相关的开放能力。

image

至此,鸿蒙 NEXT 的基础轮廓已清晰——它不仅是手机 OS,更是面向万物智联时代的原生神经系统。随着鸿蒙 NEXT 生态系统的蓬勃发展,应用性能监控变得愈发重要。阿里云 ARMS 团队倾力打造的鸿蒙 NEXT SDK,为鸿蒙应用提供了业界领先的全链路监控解决方案。这不仅仅是一个 SDK,更是您洞察用户体验、优化应用性能的智能伙伴。

HarmonyOS SDK 架构与设计

1. SDK 整体架构

image

  • 接口层:最上层,对外暴露,供客户调用的 API。
  • 功能层:数据采集,具体包含 网络、交互、应用、卡顿、崩溃、自定义、Webview、页面等模块。
  • 核心层:基础服务,工具类,日志,时间,数据协议。会话管理,配置管理,OT的扩展层。
  • 依赖:Opentelemetry-ts/js,pako 做压缩.

2. 如何进行会话管理

首先明确会话的概念,会话是指一个用户在进入宿主 APP 到退出宿主 APP,这段时间内发生的行为轨迹。具体会话管理的原理:在应用启动时,就开始会话,将会话唯一ID(SessionID)写入全局变量中,在产生事件时,将当前的 SessionID 写入 Event 的指标中。

image

也就是说,会话是 SDK 用来串联管理用户行为轨迹的一种手段。开发者可以通过在控制台查看会话轨迹,明确用户在 APP 的操作行为上下文,进而展开多种角度的分析。当用户直接杀死应用或者后台切换时间大于 60s 时,开启新的会话。

3. 数据采集方案设计

针对不同场景的数据采集,SDK 根据鸿蒙系统的特性采用了不同的采集方案。整体采取了下面三种无感知采集方案。

方案1:鸿蒙系统级 API 助力

正如前文提到,鸿蒙系统提供了一些 Kit 能力,我们主要借助系统 Kit 中的性能分析服务(Performance Analysis Kit)的 HiAppEvent 能力,对异常、卡顿、启动时间进行采集。通俗地讲,就是该 API 提供了对系统事件的订阅能力,我们主要在订阅事件发生时的回调函数中,进行数据采集等操作。

HiAppEvent 提供了订阅应用事件和系统事件的能力,系统事件主要是指应用运行期间发生的性能、功耗、稳定性等问题。SDK 关心的异常事件、卡顿事件、启动事件都属于系统事件的范畴。下面以崩溃事件为例,HiAppEvent 提供了检测 NativeCrash 和 JsError 类型崩溃的能力,在系统完成崩溃信息收集后,进行事件生成与事件上报,SDK 只关心事件上报后的操作,并且根据上报的 params 的属性进行数据分析与处理,最后进行数据上报。下图展示了崩溃事件的采集原理。

image

方案2:监听 UI 组件的生命周期

具有生命周期跨度的事件,SDK 通过监听生命周期实现采集。以 NavDestination 组件为例,UiContext 提供了 UiObserver 的能力,其中的接口 on(type: 'navDestinationSwitch', callback: Callback): void 提供了对 Navigation 的页面切换事件的监听能力。在 SDK 初始化时,注册监听,并且构造数据处理的回调函数,在不同生命周期的进行不同的数据处理。

如下图所示,以页面停留时长为例,可以通过 onHidden 的时间节点和 onShown 的时间节点的差值计算。值得一提的是,在需要取消 navDestinationSwitch 监听的时候,需要指定取消对应回调函数的监听。否则,会导致全局所有关于 navDestinationSwitch 的监听都会失效,这样可能会造成 APP 某些功能失效。

image

方案3:结合 Hvigorw 插件实现编译时替换 (AOP)

在数据采集过程中,有一些事件系统并未提供对其的监听能力,也不具备完备的生命周期的监听能力。为了做到无感知的数据采集,SDK 采用 AOP 的理念,在代码编译时,实现无感知插桩。插件的开发整体思路参考了货拉拉的开源方案:https://github.com/HuolalaTech/AspectPro/tree/master,实现在代码编译过程中的代码替换。

image

以网络框架 ohos.net.http 为例,每一个 httpRequest 对应一个 HTTP 请求任务。SDK 对关键代码 http.createHttp() 进行插桩,添加关键处理逻辑,记录网络成功/失败的性能指标,进而生成 Network Span,从而上报数据。

结语

在鸿蒙 NEXT 的新时代,阿里云 ARMS RUM SDK 作为一款性能体验监控工具,可以作为辅助 APP 运维强有力的助手。ARMS RUM 鸿蒙 NEXT SDK 已经发布正式版本,可以参考接入文档 [ 1] 体验使用。相关问题可以加入“RUM 用户体验监控支持群”(钉钉群号: 67370002064)进行咨询。

参考资料:

华为官方开发指南

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-global-interface

鸿蒙生态应用开发白皮书

https://developer.huawei.com/consumer/cn/doc/guidebook/harmonyecoapp-guidebook-0000001761818040

相关链接:

[1] 接入鸿蒙应用

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-harmonyos-application

http://www.hskmm.com/?act=detail&tid=14772

相关文章:

  • 哲讯科技:以数智之力,铸就企业SAP ERP实施新典范
  • PR曲线绘制
  • 5台电脑怎么同步文件最安全高效?别再只知道用局域网共享了!
  • 关于CompatibilityHID例程的使用
  • SystemVerilog 代码风格指南
  • 赋能智慧化工:无锡哲讯科技SAP解决方案,构筑安全、合规与高效的数字新底座
  • 芯之所向,智造未来:无锡哲讯科技赋能芯片行业的高效管理与数字革新
  • UART、I2C、SPI:三种常见通信协议的区别
  • Day05---数据类型的转换
  • 个人项目——论文查重
  • 效率党的图片处理新选择:滴答修——在线全能工具箱,免费且强大
  • GPU0与GPU1
  • 对接全球股票市场K线数据实战
  • 9.23
  • centos安装docker和Jenkins
  • 硬件检测神器 HWiNFO:全组件监控 + 多系统兼容,免费无广告,运维 / 评测必备
  • Qt - 音频采集程序
  • 923-
  • 基于 AI 网关提升大模型应用可用性的实践
  • 绝了!TaskMatrix Pro - 谷歌、火狐浏览器任务管理插件,四象限矩阵让拖延症瞬间消失 - 开源免费
  • 洛谷P10288 [GESP样题 八级] 区间
  • AI 时代下,开发流程的重塑:从“代码先行”到“文档驱动”
  • P13617 [ICPC 2025 APC] Bit Counting Sequenc
  • perl -MCPAN -e install GD;
  • P3959 [NOIP 2017 提高组] 宝藏 题解
  • C#与Access数据库操作简易指南:增删改查及类封装
  • 对之前部署hbase总结
  • 国产 CAD 新选择!NanoCAD 24.0:全功能 DWG 支持 + 3D 建模优化,多领域设计效率拉满
  • java 框架mybatis_01(
  • 扣子Coze智能体实战:自动采集1000条小红书爆款笔记 ,自动写入飞书多维表格