当前位置: 首页 > 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.dtcms.com/a/400257.html

相关文章:

  • 我想在泉州做网站wordpress分类不同模板
  • 凡科删除建设的网站装修材料厂家哪家好
  • 二七区网站建设代码编辑器
  • ESP-32 WIFI ST模式
  • 硬件原理图知识体系
  • 初识seatunnel
  • 自己做网站除了域名还要买什么潍坊网站建设建站
  • 做的网站如何发布申请域名备案
  • 企业网站建设论文wordpress主页加关键词
  • 创意灵感的网站9377游戏盒子
  • 杭州网站设计建设公司培训机构网站设计
  • 52Hz——FreeRTOS学习笔记——任务的挂起和恢复
  • 阐述什么是网站带会员中心的淘宝客wordpress
  • 建设工程规范下载网站网站建设投标评分标准
  • 湛蓝 网站开发辽宁网站建设价格
  • 【论文速递】2025年第27周(Jun-29-Jul-05)(Robotics/Embodied AI/LLM)
  • 抄袭网站案例网站维护是什么职业
  • 企业网站建设北京南充市房地产网官方网站
  • 全面掌握 Py2neo 与 Neo4j:从容器化部署到高级应用实战
  • 网站的简介怎么在后台炒做网站数据库空间大小
  • 合肥网站建设公司代理备案公司网站建设方案书
  • 网站流量 钱免费软件下载公众号
  • 为什么单片机的外接晶振要并连两个电容?
  • html5手机商城网站模板代做毕业设计的网站好
  • 网站做多个镜像如何结合搜索检索与seo推广
  • 接口自动化测试 - requests 库
  • 昆明快速建站模板互联网项目有哪些
  • 用dw建设个人网站视频创建网站步骤
  • 今鼎网站建设wordpress打开页面很慢
  • vite与axios如何配置多个接口域名支持跨域,若依配置为例