askill
ohbuild

ohbuildSafety 95Repository

OpenHarmony build skill for compiling fuzz tests and querying module fuzztest targets and coverage args. Use when users need to build a fuzz test (./build.sh --build-target <target> --product-name rk3568 --gn-args <module>_feature_coverage=true), or list fuzz tests and gn-args for a module (check test/fuzztest/BUILD.gn for targets, module BUILD.gn for *_feature_coverage).

0 stars
1.2k downloads
Updated 2/12/2026

Package Files

Loading files...
SKILL.md

OH Build (ohbuild) 技能

用于 OpenHarmony 构建相关操作,包括编译 fuzz 测试、查看模块 fuzztest 及对应参数。


技能一:编译 Fuzz 测试

命令格式

在源码根目录(含 build.sh 的目录,一般为 src 或工程根)执行:

./build.sh --build-target <编译目标名> --product-name rk3568 --gn-args <模块>_feature_coverage=true

参数说明

参数含义示例 / 默认
--build-target要编译的 fuzz 测试目标名GetAppStatsMahFuzzTest
--product-name产品名默认 rk3568
--gn-argsGN 参数,用于开启该模块的覆盖率battery_statistics_feature_coverage=true

如何找到「编译目标名」

  1. 确认模块下是否有 fuzz 测试:存在目录 test/fuzztest 即表示该模块有 fuzztest。
  2. 打开 test/fuzztest/BUILD.gn
  3. group("fuzztest")deps += [ ... ] 中,每一项格式为 "子目标路径:目标名",其中的 目标名 即为 --build-target 的取值。

示例(src/base/powermgr/battery_statistics/test/fuzztest/BUILD.gn):

deps += [
  "getappstatsmah_fuzzer:GetAppStatsMahFuzzTest",
  "getappstatspercent_fuzzer:GetAppStatsPercentFuzzTest",
  ...
]

--build-target 可填:GetAppStatsMahFuzzTestGetAppStatsPercentFuzzTest 等。

部件 fuzztest 编译目标(一次编译该部件下全部 fuzz 用例)

若要一次编译该部件下所有 fuzz 测试,使用「部件 fuzztest 编译目标」:

  • 在部件目录下找到 test/fuzztest/BUILD.gn
  • 该文件中的 group("...") 名称(如 group("fuzztest") 中的 fuzztest)即为目标名。
  • 编译目标格式:<模块相对 src 的路径>/test/fuzztest:<group 名>

示例:battery_statistics 的 BUILD.gn 为 group("fuzztest"),模块路径为 base/powermgr/battery_statistics,则部件 fuzztest 编译目标为:

base/powermgr/battery_statistics/test/fuzztest:fuzztest

编译命令示例:

./build.sh --build-target base/powermgr/battery_statistics/test/fuzztest:fuzztest --product-name rk3568 --gn-args battery_statistics_feature_coverage=true

使用 ohbuild.py build-component-fuzztest <模块> 可自动解析并打印上述命令(见下方「使用 Python 脚本」)。

无 test/fuzztest 目录时:从 bundle.json 取 fuzztest 目标

若部件下没有 test/fuzztest/BUILD.gn,fuzztest 编译目标可能写在 bundle.jsonbuild.test 中(如 component.build.test),格式为 "//路径:目标名"。编译时去掉前缀 // 作为 --build-target

示例(base/accesscontrol/sandbox_manager/bundle.json):

"build": { "test": ["//base/accesscontrol/sandbox_manager:sandbox_manager_build_fuzz_test", ...] }

--build-target 为:base/accesscontrol/sandbox_manager:sandbox_manager_build_fuzz_test

此类部件的 *_feature_coverage 常在 config/BUILD.gndeclare_args() 中定义,ohbuild 会一并解析。

如何找到「gn-args 参数」

  1. 打开该模块的 BUILD.gn(常见位置:config/BUILD.gnutils/BUILD.gn 或根目录 BUILD.gn,如 src/base/accesscontrol/sandbox_manager/config/BUILD.gn)。
  2. declare_args() { ... } 中查找名为 <模块名>_feature_coverage 的变量(默认一般为 false)。
  3. 编译 fuzz 并开覆盖率时,在命令行中写:<模块名>_feature_coverage=true

示例(battery_statistics/utils/BUILD.gn):

declare_args() {
  battery_statistics_feature_coverage = false
}

则对应 --gn-args 为:battery_statistics_feature_coverage=true

命名规则

  • 覆盖率开关变量:<模块名>_feature_coverage(如 battery_statistics_feature_coveragebattery_manager_feature_coverage)。

完整示例

编译 battery_statistics 的 GetAppStatsMahFuzzTest,并开启该模块覆盖率:

./build.sh --build-target GetAppStatsMahFuzzTest --product-name rk3568 --gn-args battery_statistics_feature_coverage=true

编译完毕后的验证环节(gcno 文件)

编译带覆盖率的 fuzz 测试后,应验证是否生成了模块相关的 gcno 文件(覆盖率信息文件)。在源码根目录(含 build.sh 的目录,一般为 src)下执行:

find out/rk3568/obj/ -name "*.gcno"
  • 若有与模块相关的 gcno 文件(路径中包含模块名,如 power_managerbattery_statistics),则说明该模块已开启覆盖率编译,可进行覆盖率收集与统计;建议将找到的 gcno 路径列出来提示用户。
  • 若无,请确认编译时使用了 --gn-args <模块名>_feature_coverage=true

使用 ohbuild 脚本验证(可选指定模块名,只列出与该模块相关的 gcno):

# 列出与 power_manager 相关的 gcno
python3 .claude/skills/ohbuild/ohbuild.py verify-coverage power_manager

# 列出 out/rk3568/obj 下所有 gcno
python3 .claude/skills/ohbuild/ohbuild.py verify-coverage

技能二:查看模块的 Fuzztest 及对应参数

用于回答「某模块有哪些 fuzz 测试、编译时要传什么参数」。

判断模块是否有 fuzztest

  • 看该模块目录下是否存在 test/fuzztest 目录。
  • 有则说明该模块提供 fuzz 测试。

查看所有支持的 fuzz 测试目标

  1. 打开 <模块路径>/test/fuzztest/BUILD.gn
  2. group("fuzztest")deps += [ ... ] 中列出所有 "xxx:目标名"目标名 即为可用的 --build-target

示例:battery_statistics 的 fuzztest 包括 GetAppStatsMahFuzzTest、GetAppStatsPercentFuzzTest、GetBatteryStatsFuzzTest 等(以 BUILD.gn 为准)。

查看对应的 gn-args 参数

  1. 在该模块的 BUILD.gn 中查找(常见位置:模块下的 utils/BUILD.gn 或主 BUILD.gn)。
  2. declare_args() { ... } 里找 <模块名>_feature_coverage 变量。
  3. 编译该模块任一 fuzz 目标并开覆盖率时,使用:
    --gn-args <模块名>_feature_coverage=true

小结

  • Fuzz 目标列表:来自 test/fuzztest/BUILD.gndeps 中的目标名。
  • 覆盖率参数:来自模块 BUILD.gn 的 declare_args()*_feature_coverage,命名规则为 <模块名>_feature_coverage,默认一般为 false

使用 Python 脚本

可通过 ohbuild.py 查询模块 fuzztest 或生成编译命令:

# 查看某模块的 fuzz 测试目标与覆盖率参数(模块名或相对 src 的路径)
python3 .claude/skills/ohbuild/ohbuild.py list-fuzztest battery_manager
python3 .claude/skills/ohbuild/ohbuild.py list-fuzztest base/powermgr/battery_statistics

# 生成编译 fuzz 测试的命令(不执行,仅打印)
python3 .claude/skills/ohbuild/ohbuild.py build-fuzztest GetAppStatsMahFuzzTest --gn-args battery_statistics_feature_coverage=true

# 生成「编译部件全部 fuzztest」的命令(从 test/fuzztest/BUILD.gn 的 group 解析目标)
python3 .claude/skills/ohbuild/ohbuild.py build-component-fuzztest battery_statistics --gn-args battery_statistics_feature_coverage=true
python3 .claude/skills/ohbuild/ohbuild.py build-component-fuzztest base/powermgr/battery_statistics

# 编译后验证:是否有模块相关 gcno 文件(可选模块名)
python3 .claude/skills/ohbuild/ohbuild.py verify-coverage power_manager
python3 .claude/skills/ohbuild/ohbuild.py verify-coverage

# 帮助
python3 .claude/skills/ohbuild/ohbuild.py help

命令说明:

  • list-fuzztest <模块>:列出该模块下「部件 fuzztest 编译目标」、所有单个 fuzz 目标名及对应的 *_feature_coverage 参数。
  • build-fuzztest <目标名> [--product-name rk3568] [--gn-args xxx=true]:打印编译单个 fuzz 目标的 ./build.sh 命令。
  • build-component-fuzztest <模块> [--product-name rk3568] [--gn-args xxx=true]:打印编译部件全部 fuzztest./build.sh 命令;目标从该部件 test/fuzztest/BUILD.gngroup("...") 解析,形如 base/powermgr/battery_statistics/test/fuzztest:fuzztest;若不传 --gn-args 则自动用该模块的 *_feature_coverage=true
  • verify-coverage [模块名] [--product-name rk3568]:编译后验证,在 out/<product>/obj/ 下查找 *.gcno;若指定模块名则只列出与该模块相关的 gcno,若有则列出并提示用户。

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

95/100Analyzed 2/15/2026

Metadata

Licenseunknown
Version1.0.0
Updated2/12/2026
Publishereclipse-oniro-mirrors

Tags

ci-cdllmtesting