Agent Skills: OpenHarmony Build Skill

This skill should be used when the user asks to "编译 OpenHarmony", "build OpenHarmony", "编译完整代码", "执行编译", "编译 OpenHarmony 代码", "快速编译", "跳过gn编译", "fast-build", "编译测试", "编译测试用例", "build ace_engine_test", "编译 sdk", "编译 SDK", "build sdk", "build SDK", "编译 ohos-sdk", "编译测试列表", "build test list", "按列表编译测试", "编译指定测试", or mentions building the full OpenHarmony system, fast rebuild, test compilation, SDK compilation, or building tests from a target list. Handles complete build process including build execution, success verification, and failure log analysis with primary focus on out/{product}/build.log.

UncategorizedID: openharmonyinsight/openharmony-skills/openharmony-build

Install this agent skill to your local

pnpm dlx add-skill https://github.com/openharmonyinsight/openharmony-skills/tree/HEAD/skills/openharmony-build

Skill Files

Browse the full folder contents for openharmony-build.

Download Skill

Loading file tree…

skills/openharmony-build/SKILL.md

Skill Metadata

Name
openharmony-build
Description
Use for OpenHarmony build execution and diagnosis, including 编译OpenHarmony/完整代码/测试/SDK/host/最小模拟器/全量模拟器/部件独立编译/测试列表, plus full product builds, targeted component/test builds, fast rebuilds, hb independent builds, and build.log failure analysis.

OpenHarmony Build Skill

Use this skill for OpenHarmony build execution, targeted build verification, and build-log diagnosis. Keep context small: start here, then load only the reference that matches the task.

<skill-dir> means the directory containing this SKILL.md.

Core Rules

  • Run builds from the OpenHarmony root containing both .gn and build.sh.
  • If the user gives an exact command, run that command.
  • For failures, inspect the primary build log before guessing at source fixes.
  • Do not revert unrelated dirty-worktree changes.
  • Prefer narrow rebuilds after fixes, then rerun the user-requested command when practical.

Never / Ask Before

  • Never run repo sync, source download, prebuilt download, or environment bootstrap unless the user explicitly asks for setup; these are slow and can mutate the workspace.
  • Never delete source logic just to make a build pass; preserve behavior and fix the real dependency, symbol, or configuration issue.
  • Never diagnose a failed build from terminal tail alone when build.log exists; the primary log is the source of truth.
  • Never treat a repository name as the hb build component name without checking; independent builds require OpenHarmony component names.
  • Never broadly delete out/, generated artifacts, or test binaries. Ask first unless the user requested cleanup; for test-list disk pressure, only use the path in references/test-list-builds.md.
  • Ask before changing product, target, branch, or user-provided command arguments.

Find Root

Use this root test:

find_oh_root() {
    local dir="${1:-$PWD}"
    while [[ "$dir" != "/" ]]; do
        if [[ -f "$dir/.gn" && -f "$dir/build.sh" ]]; then
            echo "$dir"
            return 0
        fi
        dir="$(dirname "$dir")"
    done
    return 1
}

Command Selection

Default full build:

./build.sh --export-para PYCACHE_ENABLE:true --product-name rk3568 --ccache

Targeted build:

./build.sh --export-para PYCACHE_ENABLE:true --product-name <product> --build-target <target> --ccache

Special products:

  • SDK: ./build.sh --export-para PYCACHE_ENABLE:true --product-name ohos-sdk --ccache
  • Host: ./build.sh --product-name host_product --ccache --no-prebuilt-sdk
  • Minimal emulator: ./build.sh --product-name qemu-arm-linux-min --ccache --no-prebuilt-sdk --deps-guard=false --load-test-config false --gn-args linux_kernel_version=\"linux-5.10\"
  • Full emulator: ./build.sh --product-name arm64_virt --ccache --deps-guard=false

Read references/build-commands.md for the full command matrix, products, targets, SDK/host/emulator notes, and fast-rebuild examples.

Reference routing:

  • Read references/build-commands.md when choosing command syntax, products, targets, SDK/host/emulator commands, or fast-rebuild examples.
  • Read references/log-locations.md only when locating or explaining build outputs and logs.
  • Read references/common-errors.md only after a concrete error class is known.

Fast Rebuild

Use --fast-rebuild only when build configuration did not change. Do not use it after edits to BUILD.gn, *.gni, product config, dependency metadata, or first-time output generation.

Helper:

bash <skill-dir>/scripts/check_fast_rebuild.sh 30 "$OH_ROOT"

Independent Component Build

Use for "部件独立编译", "独立编译部件", or explicit hb build requests.

command -v hb
hb build <component-name> -i
hb build <component-name> -t

Rules:

  • Use the OpenHarmony component name, not necessarily the repository name.
  • Put -i or -t after the component name.
  • Run -i before -t when both are requested.
  • Diagnose independent builds from out/standard/.

Reference routing: for hb independent builds, always read references/independent-build.md; do not load references/test-list-builds.md unless the task is specifically about target-list builds.

Test Builds

For ACE Engine development, prefer:

./build.sh --export-para PYCACHE_ENABLE:true --product-name rk3568 --build-target ace_engine_test --ccache

Build all unit tests only when requested or required:

./build.sh --export-para PYCACHE_ENABLE:true --product-name rk3568 --build-target unittest --ccache

For target-list builds:

bash <skill-dir>/scripts/build_test_list.sh rk3568 "$OH_ROOT"

Reference routing: for target-list builds, read references/test-list-builds.md; do not load references/independent-build.md unless the target-list run uses hb build.

Success Check

A successful build usually has:

  • command exit code 0
  • =====build successful===== or equivalent success output
  • expected output under out/
  • no final fatal/error section in the primary build log

Use exit code as the first signal. Check artifacts only when the user needs artifact confirmation.

Failure Analysis

Always start from the primary log:

  • regular product: out/<product>/build.log
  • SDK: out/sdk/build.log
  • host product: out/host/host_product/build.log
  • independent build: out/standard/build.log or the relevant out/standard/ sublog

Use scripts before broad manual searching:

bash <skill-dir>/scripts/resolve_build_log.sh <product> "$OH_ROOT"
bash <skill-dir>/scripts/find_recent_errors.sh <product> "$OH_ROOT"
bash <skill-dir>/scripts/analyze_build_error.sh <product> "$OH_ROOT"

For hb build failures, pass standard as the product:

bash <skill-dir>/scripts/find_recent_errors.sh standard "$OH_ROOT"
bash <skill-dir>/scripts/analyze_build_error.sh standard "$OH_ROOT"

Reference routing:

  • Read references/failure-analysis.md for non-zero build exits, first-failure extraction, and fix/rebuild workflow.
  • Read references/log-locations.md when the log path is unclear.
  • Read references/common-errors.md only after identifying the error class.

Bundled Resources

Scripts:

  • scripts/resolve_build_log.sh: print the primary build log for a product/root.
  • scripts/analyze_build_error.sh: summarize failures from the primary log.
  • scripts/find_recent_errors.sh: quick recent error scan.
  • scripts/check_fast_rebuild.sh: decide whether --fast-rebuild is appropriate.
  • scripts/build_test_list.sh: build targets listed in unittest_targets.txt.

References:

  • references/build-commands.md: complete command reference.
  • references/log-locations.md: output and log path mapping.
  • references/common-errors.md: common failure classes and fixes.
  • references/failure-analysis.md: structured diagnosis workflow.
  • references/independent-build.md: hb build rules and diagnosis patterns.
  • references/test-list-builds.md: target-list builds and disk-space recovery.

Do not load README.md or examples/example-workflow.md during normal skill execution; they are repository-facing summaries, not runtime instructions.