鸿蒙南向开发实战:HiSysEvent打点配置

201 篇文章 1 订阅
126 篇文章 0 订阅

组件若有HiSysEvent事件的打点需求,则需要先定义yaml文件并在bundle.json文件中配置yaml文件的路径。OpenHarmony编译框架在编译过程中则会通过python编译脚本解析校验bundle.json文件指定的所有yaml文件。在解析校验之后,编译框架会将这些yaml文件中配置的信息汇总转换成名为hisysevent.def的json文件。最后,将此json文件打包到系统指定路径下,用作HiSysEvent事件落盘的判断依据。

基本概念

在配置HiSysEvent打点之前,开发者应了解以下基本概念:

  • 事件领域 用于标识事件所属的领域,在yaml文件中以domain为键值指定,可参考yaml文件样例中的domain

  • 事件名称 用于指定事件领域包含的所有事件,可参考yaml文件样例中的EVENT_NAMEA/EVENT_NAMEB

  • 参数 用于定义某个事件名称包含的所有键值,可参考yaml文件样例中的__BASE/NAME1/NAME2

约束与限制

定义事件领域、事件名称及参数的约束与限制:

  • 每个yaml文件只能有一个事件领域,且不能与其他yaml文件中定义的事件领域重名。

  • 每个事件领域可定义零个或多个事件名称,同一个事件领域内部的事件名称不能重名。

  • 每个事件名称可定义多个参数,同一个事件名称内部的参数不能重名,每个事件名称有且只有一个名称为__BASE的参数,此参数字段组成如表1,其它自定义参数,具体字段组成如表2。 表1 __BASE参数字段说明

    字段名称描述
    type字段说明:必选字段,用来标识该事件名称的类型。
    取值范围:
    - FAULT:故障类型。
    - STATISTIC:统计类型。
    - SECURITY:安全类型。
    - BEHAVIOR:行为类型。
    level字段说明:必选字段,用来标识该事件名称的级别。
    取值范围:
    - CRITICAL:严重。
    - MINOR:一般。
    tag字段说明:可选字段,用来标识该事件名称的标签。
    定义规则:
    - 最多可同时定义5个标签,标签之间使用空格来分隔。
    - 单个标签最多包含16个字符,字符范围[a-zA-Z0-9]。
    desc字段说明:必选字段,用来对该事件名称进行描述。
    定义规则:
    - 至少包含3个字符,最多包含128个字符。
    preserve字段说明:可选字段,用来标识事件是否需要落盘,默认值为true。
    取值范围:
    - true:事件需要落盘。
    - false:事件不需要落盘。

    表2 自定义参数字段说明

    字段名称描述
    type字段说明:必选字段,用来标识该参数的类型。
    取值范围:
    - BOOL
    - INT8
    - UINT8
    - INT16
    - UINT16
    - INT32
    - UINT32
    - INT64
    - UINT64
    - FLOAT
    - DOUBLE
    - STRING
    arrsize字段作用:可选字段,用来标识数组类型参数的长度。
    取值范围:
    - 1~100
    desc字段作用:必选字段,用来对该参数进行描述。
    定义规则:
    - 至少包含3个字符,最多包含128个字符。

开发步骤

编写yaml文件

编写规则

  • 事件领域命名规则:

    • 字母开头,且只能由大写字母/数字/下划线组成;
    • 字符串长度取值范围为1~16。
  • 事件名称命名规则:

    • 字母开头,且只能由大写字母/数字/下划线组成;
    • 字符串长度取值范围1~32;
    • 单个事件领域内部事件名称的不能超过4096个。
  • 参数命名规则:

    • 字母开头,且只能由大写字母/数字/下划线组成;
    • 字符串长度取值范围1~48;
    • 单个事件名称内包含的参数的个数不能超过128个。

编写样例

  • yaml文件样例指定的事件领域名称为MODULEA,该事件领域包含两个事件,名称分别是EVENT_NAMEA和EVENT_NAMEB。

  • EVENT_NAMEA被定义成错误类型的严重事件,该事件包含类型为字符串类型的NAME1参数、字符串类型的NAME2参数及无符号短整型类型的NAME3参数,可以通过事件领域MODULEA和事件名称EVENT_NAMEA对其进行实时订阅

  • EVENT_NAMEB被定义成统计类型的一般事件,EVENT_NAMEB包含类型为无符号短整型类型的NAME1参数及整型类型的NAME2参数。因为EVENT_NAMEB在__BASE参数中定义了名称为tag1和tag2的两个事件标签,所以不仅可以通过事件领域MODULEA和事件名称EVENT_NAMEB对其进行实时订阅,所以还可以通过事件标签对该事件进行实时订阅。

    ##########################################
    # the hisysevent definition for module a #
    ##########################################
    
    domain: MODULEA
    
    EVENT_NAMEA:
        __BASE: {type: FAULT, level: CRITICAL, desc: event name a}
        NAME1: {type: STRING, desc: name1}
        NAME2: {type: STRING, desc: name2}
        NAME3: {type: UINT16, desc: name3}
    
    EVENT_NAMEB:
        __BASE: {type: STATISTIC, level: MINOR, tag: tag1 tag2, desc: event name b}
        NAME1: {type: UINT16, desc: name1}
        NAME2: {type: INT32, desc: name2}

验证yaml文件

配置yaml文件路径

在bundle.json文件中通过hisysevent_config属性完成yaml文件的路径指定:

{
    "name": "@ohos/moduel_a",
    "description": "module a",
    "version": "3.1",
    "license": "Apache License 2.0",
    "publishAs": "code-segment",
    "segment": {
        "destPath": "moduel_a_path"
    },
    "dirs": {},
    "scripts": {},
    "component": {
        "name": "hisysevent_native",
        "subsystem": "hiviewdfx",
        "adapted_system_type": [
            "standard"
        ],
        "rom": "",
        "ram": "",
        "hisysevent_config": [
            "//moduel_a_path/yaml_file1.yaml",
            "//moduel_a_path/yaml_file2.yaml"
        ],
        "deps": {
            "components": [
                "hilog_native",
                "hitrace_native",
                "ipc",
                "safwk",
                "samgr",
                "utils_base"
            ],
            "third_party": []
        },
        "build": {
        }
    }
}

说明: yaml文件可根据实际需求置于组件工程的任意目录下,只要在bundle.json文件指定即可。

编译yaml文件

  • 全量编译:

    • 全量编译整个系统,会将所有组件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.def文件。

      cd 工程根目录的绝对路径
      ./build --product-name <product name>
    • 全量编译生成的hisysevent.def文件可以通过以下命令获取:

      cd 工程根目录的绝对路径
      find out -name hisysevent.def -type f
  • 单文件编译: 也可以只编译单个组件的yaml文件,命令如下:

    cd 工程根目录的绝对路径
    ./build/ohos/hisysevent/gen_def_from_all_yaml.py --yaml-list <yaml file list> --def-path <file store directory>

    表3 单文件编译参数说明

    选项名称描述
    --yaml-list指定需要编译的yaml文件路径列表,多个yaml文件路径之间用空格分隔。
    --def-path指定编译生成的hisysevent.def文件的生成路径。

打点及查询定义的事件

  1. 通过hdc_std工具将hisysevent.def文件推送到至设备的//system/etc/hiview/目录下。

  2. 触发yaml文件自定义的HiSysEvent事件完成打点,通过“hisysevent -l”命令查询历史HiSysEvent事件,确认触发的自定义HiSysEvent事件是否打点成功。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

 获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

 有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值