OpenHarmony 编译资源复用指南

回答常见疑问:编译每个产品时,prebuilts_download.sh 和 ohos-sdk 都要重新执行吗?

简短回答

不需要 。两者都是项目级/版本级的一次性准备工作,不是产品级的。

资源 作用域 需要重复执行吗
prebuilts_download.sh 整个 OpenHarmony 大版本 不需要,一次准备永久复用
ohos-sdk 编译 同一 API 版本所有标准系统产品 不需要,一次编译所有标准系统产品复用

1. prebuilts_download.sh

1.1 它做了什么

把 openharmony_prebuilts/ 中的压缩包解压并部署到 v6.1-release/prebuilts/:

复制代码
v6.1-release/prebuilts/
├── build-tools/        # GN、Ninja、Node.js
├── clang/              # clang-15 工具链
├── cmake/              # CMake
├── python3/            # Python 解释器
├── rustc/              # Rust 工具链
├── gcc/                # 交叉编译工具链
└── tool/command-line-tools/   # hvigor、ohpm

1.2 内部机制

脚本会校验文件是否已存在 + sha256 是否匹配,匹配则跳过:

bash 复制代码
if [ -d "prebuilts/clang/ohos/linux-x86_64/clang-xxx" ]; then
    skip
fi

所以重复执行是安全的,已下载的自动跳过。

1.3 何时需要执行

场景 是否需要
首次拉取代码 需要
大版本升级(6.1 → 7.0) 需要
删除了 prebuilts/ 目录 需要
prebuilts_download.sh 自身被更新(manifest 变化) 需要
编译新产品(rk3568 → hispark_taurus) 不需要
切换同版本内的不同分支 不需要
重新编译已编译过的产品 不需要

1.4 验证 prebuilts 是否就绪

bash 复制代码
ls v6.1-release/prebuilts/clang/ohod/linux-x86_64/        # 应有 clang-xxx
ls v6.1-release/prebuilts/build-tools/linux-x86/bin/   # 应有 gn、ninja
ls v6.1-release/prebuilts/cmake/                        # 应有 linux-x86

三个目录都存在且非空,则直接编译产品即可。

2. ohos-sdk 编译

2.1 它是什么

ohos-sdk 是一个特殊的"产品",输出应用开发所需的工具集:

复制代码
prebuilts/ohos-sdk/linux/23/
├── native/        # C/C++ NDK
├── toolchains/    # hvigor 编译工具链
├── ets/           # ArkTS 编译器和声明文件
├── js/            # JavaScript SDK
└── previewer/     # 预览器

数字 23 是 API 版本号,与 OpenHarmony 大版本对应(6.1 = API 23)。

2.2 谁需要 ohos-sdk

只有包含 HAP 应用编译的标准系统产品才需要:

产品 是否需要 SDK 原因
rk3568(标准系统) 需要 包含 systemui、settings、launcher 等 HAP 应用
hispark_taurus(标准系统) 需要 同上
ohos-sdk(伪产品) 不需要 它就是用来生成 SDK 的
qemu_arm_virt(小型系统) 不需要 没有 HAP 应用
qemu_arm64_linux_min(最小系统) 不需要 同上
qemu_x86_64_linux_min(最小系统) 不需要 同上

2.3 何时需要执行

场景 是否需要
首次编译标准系统产品(prebuilts/ohos-sdk/ 不存在) 需要
API 版本升级(API 23 → API 24) 需要
修改了 SDK 相关代码(interface/sdk-js 等) 需要
删除了 prebuilts/ohos-sdk/ 目录 需要
编译标准系统产品 A → 产品 B(同 API 版本) 不需要
编译小型/最小系统产品 不需要

2.4 验证 ohos-sdk 是否就绪

bash 复制代码
ls v6.1-release/prebuilts/ohos-sdk/linux/23/
# 应输出:ets  js  native  previewer  toolchains

五个目录都存在则直接复用,无需重新编译。

2.5 编译并部署 SDK

bash 复制代码
cd v6.1-release

# 1. 编译 SDK(约 1.5 小时)
./build.sh --product-name ohos-sdk --ccache

# 2. 部署到 prebuilts
mkdir -p prebuilts/ohos-sdk/linux/23
unzip out/sdk/packages/ohos-sdk/linux/native-linux-x64-*.zip      -d prebuilts/ohos-sdk/linux/23/
unzip out/sdk/packages/ohos-sdk/linux/toolchains-linux-x64-*.zip  -d prebuilts/ohos-sdk/linux/23/
unzip out/sdk/packages/ohos-sdk/linux/ets-linux-x64-*.zip         -d prebuilts/ohos-sdk/linux/23/
unzip out/sdk/packages/ohos-sdk/linux/js-linux-x64-*.zip          -d prebuilts/ohos-sdk/linux/23/
unzip out/sdk/packages/ohos-sdk/linux/previewer-linux-x64-*.zip   -d prebuilts/ohos-sdk/linux/23/

3. 完整决策树

复制代码
首次接触 OpenHarmony 6.1 源码?
├── 是 → 1) 执行 prebuilts_download.sh
│        2) 编译并部署 ohos-sdk
│        3) 编译目标产品
│
└── 否 → 检查目标产品类型
         ├── 标准系统(rk3568、hispark_taurus)
         │   ├── prebuilts/ohos-sdk/linux/23/ 完整?
         │   │   ├── 是 → 直接编译产品
         │   │   └── 否 → 编译并部署 ohos-sdk → 编译产品
         │   └── prebuilts/ 完整?
         │       ├── 是 → 继续
         │       └── 否 → 重跑 prebuilts_download.sh
         │
         └── 小型/最小系统(qemu_*)
             └── prebuilts/ 完整?
                 ├── 是 → 直接编译产品(不需要 ohos-sdk)
                 └── 否 → 重跑 prebuilts_download.sh

4. 典型场景示例

场景 A:第一次拉代码,要编译 rk3568

bash 复制代码
cd v6.1-release

# 步骤 1:下载预编译工具链
bash build/prebuilts_download.sh

# 步骤 2:编译 SDK
./build.sh --product-name ohos-sdk --ccache

# 步骤 3:部署 SDK
mkdir -p prebuilts/ohos-sdk/linux/23
unzip out/sdk/packages/ohos-sdk/linux/*.zip -d prebuilts/ohos-sdk/linux/23/

# 步骤 4:编译产品
./build.sh --product-name rk3568 --ccache

场景 B:已编译过 rk3568,现在要编译 hispark_taurus

bash 复制代码
cd v6.1-release

# prebuilts/ 和 ohos-sdk/ 都已就绪,直接编译
./build.sh --product-name hispark_taurus --ccache

场景 C:已编译过 rk3568,现在要编译 qemu_arm_virt(小型系统)

bash 复制代码
cd v6.1-release

# prebuilts/ 已就绪,小型系统不需要 ohos-sdk
./build.sh --product-name qemu_arm_virt --ccache

场景 D:升级到 OpenHarmony 7.0

bash 复制代码
cd v7.0-release

# 大版本升级,重新准备所有资源
bash build/prebuilts_download.sh
./build.sh --product-name ohos-sdk --ccache
unzip out/sdk/packages/ohos-sdk/linux/*.zip -d prebuilts/ohos-sdk/linux/24/  # API 版本可能变化
./build.sh --product-name <product> --ccache

5. 资源层级关系

复制代码
全局共享(一次准备)
├── /data/vendor_huawei/OpenHarmony/openharmony_prebuilts/  ← 大版本一次下载
└── /data/vendor_huawei/OpenHarmony/tool/                    ← 系统级补丁

大版本共享(一次准备)
└── v6.1-release/prebuilts/
    ├── build-tools/   ← prebuilts_download.sh 部署
    ├── clang/         ← prebuilts_download.sh 部署
    └── ohos-sdk/      ← 编译 ohos-sdk 产品后部署

API 版本共享(一次编译)
└── v6.1-release/prebuilts/ohos-sdk/linux/23/  ← 同 API 版本所有标准系统共用

产品独立(每个产品独立)
└── v6.1-release/out/<product>/  ← 各产品独立编译输出

6. 一句话总结

问题 答案
编译每个产品都要执行 prebuilts_download.sh 吗? 不需要,整个 OpenHarmony 大版本只需执行一次
编译每个产品都要重新编译 ohos-sdk 吗? 不需要,同 API 版本下所有标准系统产品共用
切换产品时需要做什么? 只改 --product-name 参数即可
相关推荐
OH_TPC1 小时前
【鸿蒙优选三方库】@ohos/aki:一行代码让 ArkTS 调 C++
harmonyos
wenyiyiyiyiyi2 小时前
我用鸿蒙 ArkTS 写了个自己天天用的备忘录:待办、课表和长期目标,全塞进一块桌面卡片
harmonyos
承渊政道4 小时前
鸿蒙设备远控电脑实测:ToDesk蓝牙键鼠、双模式鼠标、跨端剪贴板,远控电脑更顺手了
计算机外设·电脑·harmonyos·远程工作·todesk
CV工程师丁Sir6 小时前
ArkWeb 手记 04|DevTools 调试与缓存清理
java·spring·缓存·harmonyos
程序猿追18 小时前
HarmonyOS 6 上做个极简浏览器:Web 组件 + 前进后退 + 加载进度
前端·华为·harmonyos
程序猿追18 小时前
HarmonyOS 6 音视频实战:用 AVPlayer 做一个本地音乐播放器
华为·音视频·harmonyos
威哥爱编程19 小时前
HarmonyOS 7 多设备 UX 自动检测实战:AppAnalyzer 多设备体检 + 一多工程底线,提前拦截截断重叠大图大字
harmonyos
威哥爱编程19 小时前
HarmonyOS 7 安全相机 2.0 实战:数字内容溯源,为拍摄内容提供来源保护
harmonyos
威哥爱编程19 小时前
HarmonyOS 7 弱网优化实战:Network Boost Kit 场景加速 + QUIC 长连接 + 弱网直播优化
harmonyos
威哥爱编程19 小时前
HarmonyOS 7 应用故障智能诊断实战:APMS 故障总览 + Profiler 跨语言泄漏 + Operation Analyzer 冻屏分析
harmonyos