OpenHarmony 编译资源复用指南

回答常见疑问:编译每个产品时,prebuilts_download.shohos-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 参数即可
相关推荐
互联网散修1 小时前
鸿蒙实战:图片编辑器——涂鸦、撤回与保存功能
编辑器·harmonyos·涂鸦·图片编辑
●VON1 小时前
AtomGit Flutter鸿蒙客户端:Tab导航架构
flutter·华为·架构·harmonyos·鸿蒙
Swift社区2 小时前
鸿蒙 PC 文件共享:分布式机制 + Demo 实现
分布式·华为·harmonyos
ShallowLin10 小时前
【HarmonyOS闯关习题】——DevEco Studio的使用
华为·harmonyos
科技与数码12 小时前
鸿蒙6.1小艺伴随式AI体验:让阅读效率翻倍
人工智能·华为·harmonyos
程序猿追12 小时前
棋盘上的博弈:我在 HarmonyOS 里塞了一个五子棋“大脑”
人工智能·华为·harmonyos
一个假的前端男13 小时前
windows flutter 适配鸿蒙
windows·flutter·harmonyos
程序猿追14 小时前
把 255.255.255.0 拆开看——在 HarmonyOS 上写个 IP 地址与子网掩码计算器
华为·harmonyos