OpenHarmony模块化编译

本文介绍OpenHarmony模块化编译,包括环境配置(OpenHarmony 4.0、WSL2 Ubuntu 18.04、RK3568)、hb配置。为提高开发效率,使用模块化编译替换全量编译,以关机弹框应用为例说明编译步骤,还列举常用模块编译,如Full SDK、常见原生应用、foundation常用库等。

一、环境配置

OpenHarmony版本:OpenHarmony 4.0 Release
编译环境:WSL2 Ubuntu 18.04
平台设备:RK3568

二、配置hb

OpenHarmony 代码构建有build.sh和hb两种方式:

#方式一、build.sh
./build.sh --product-name rk3568 --ccache

#方式二、hb
hb set -p rk3568
hb build

下拉的4.0代码无法直接使用hb命令

OpenHarmony_4.0_release$ hb --help
hb_error: Please call hb utilities inside source root directory

可参考搭建开发环境-安装编译工具 进行hb安装和环境配置。

2.1、安装hb

python3 -m pip install --user build/hb

2.2、配置环境变量

vim ~/.bashrc
#将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
export PATH=~/.local/bin:$PATH

#更新环境变量
source ~/.bashrc

在源码目录执行"hb help",界面打印以下信息即表示安装成功。

OpenHarmony_4.0_release$ hb help
[OHOS INFO] ----------------------------------------------------------------------------------------------------
[OHOS INFO] usage: hb build [option]
[OHOS INFO]
[OHOS INFO] optional arguments:
[OHOS INFO]   -h, --help            show this help message and exit
[OHOS INFO]   --target-cpu {arm,arm64,x86_64,x64}
[OHOS INFO]                         Default:''. Help:Specifies the desired cpu architecture for the build, each may support
[OHOS INFO]                         different cpu architectures, run 'hb set --all' to list product all supported cpu
[OHOS INFO]                         architectures
[OHOS INFO]   --target-os {android,ios}
[OHOS INFO]                         Default:''. Help:Specifies the desired os type for the build, each may support different os
[OHOS INFO]                         type, run 'hb set --all' to list product all supported os type
[OHOS INFO]   -p PRODUCT_NAME, --product-name PRODUCT_NAME
[OHOS INFO]                         Default:''. Help:Build a specified product. You could use this option like this: 1.'hb build
[OHOS INFO]                         --product-name rk3568@hihope' 2.'hb build --product-name rk3568'
...

注:可使用以下命令卸载hb

$ python3 -m pip uninstall ohos-build

三、了解模块编译

为了编译调试和开发验证往往使用模块化编译替换全量编译,节约编译时间,提高开发效率,OpenHarmony build.sh 和hb都支持模块化编译。
这里以关机弹框应用为例。
1、通过hdc 查看system/app应用包名或者IDE查看调出关机框log,可知关机弹框所在应用包名为com.ohos.powerdialog

# ls -al /system/app
com.ohos.powerdialog

2、在源码中搜索com.ohos.powerdialog包名定义出处,确定模块对应的源码路径。
可知系统关机弹框源码位于:base/powermgr/power_manager/power_dialog
在这里插入图片描述
3、确定build-target,查看base/powermgr/power_manager/power_dialog/BUILD.gn
可知系统关机框模块名power_dialog_hap

import("//build/ohos.gni")

group("dialog_hap") {
  deps = [ ":power_dialog_hap" ]
}

ohos_hap("power_dialog_hap") {
  hap_profile = "entry/src/main/module.json"

  deps = [
    ":power_dialog_js_assets",
    ":power_dialog_resources",
  ]

  certificate_profile = "signature/openharmony_sx.p7b"
  hap_name = "power_dialog"

  subsystem_name = "applications"
  part_name = "prebuilt_hap"
  module_install_dir = "app/com.ohos.powerdialog"
}
...

4、模块编译power_dialog_hap

#使用build.sh模块编译power_dialog_hap
./build.sh --product-name rk3568 --build-target power_dialog_hap

#使用hb编译power_dialog_hap
 hb build -p rk3568 -T power_dialog_hap

得到hap位于:out/rk3568/obj/base/powermgr/power_manager/power_dialog/power_dialog.hap
可发现out/rk3568/obj/后路径与模块源码路径对应。
在这里插入图片描述

注意:模块编译需模块目录存在BUILD.gn。

四、常用模块编译

4.1 编译Full SDK

rm -rf out
./build.sh --product-name ohos-sdk

Full SDK生成目录:out/sdk/packages/ohos-sdk/

4.2 编译kernel

#使用build.sh编译指定产品kernel
./build.sh --product-name rk3568 --build-target kernel --gn-args linux_kernel_version="linux-5.10"

4.3 编译常见原生应用

4.3.1 编译系统资源应用SystemResources.hap

#使用build.sh编译systemres_hap
./build.sh --product-name rk3568 --build-target systemres_hap

#使用hb编译systemres_hap
 hb build -p rk3568 -T systemres_hap

得到hap位于:out/rk3568/obj/base/global/system_resources/systemres/SystemResources.hap

4.3.2 编译性能测试应用SmartPerf.hap

#使用build.sh编译SmartPerf
./build.sh --product-name rk3568 --build-target SmartPerf

#使用hb编译SmartPerf
 hb build -p rk3568 -T SmartPerf

得到hap位于:out/rk3568/obj/developtools/profiler/host/smartperf/client/client_ui/SmartPerf.hap

4.3.3 编译输入法选择框应用input_method_choose_dialog.hap

#使用build.sh编译input_method_choose_hap
./build.sh --product-name rk3568 --build-target input_method_choose_hap

#使用hb编译input_method_choose_hap
 hb build -p rk3568 -T input_method_choose_hap

得到hap位于:out/rk3568/obj/base/inputmethod/imf/services/dialog/input_method_choose_dialog.hap

4.3.4 编译授权管理应用permission_manager.hap

#使用build.sh编译permission_manager
./build.sh --product-name rk3568 --build-target permission_manager

#使用hb编译permission_manager
 hb build -p rk3568 -T permission_manager

得到hap位于:out/rk3568/obj/applications/standard/permission_manager/permissionmanager/permission_manager.hap

4.3.5 编译关机弹框应用power_dialog.hap

#使用build.sh模块编译power_dialog_hap
./build.sh --product-name rk3568 --build-target power_dialog_hap

#使用hb编译power_dialog_hap
 hb build -p rk3568 -T power_dialog_hap

得到hap位于:out/rk3568/obj/base/powermgr/power_manager/power_dialog/power_dialog.hap

4.4 编译foundation常用库

4.4.1 AMS libabilityms.z.so

./build.sh -p dayu210 --build-target abilityms

得到.so位于:out\rk3588\ability\ability_runtime\libabilityms.z.so

4.4.2 多模输入libmmi-server.z.so

./build.sh -p dayu210 --build-target libmmi-server

得到.so位于:out\rk3588\multimodalinput\input\libmmi-server.z.so

4.4.3 文件系统 libfileuri_native.z.so

./build.sh -p dayu210 --build-target foundation/filemanagement/app_file_service/interfaces/innerkits/native:fileuri_native

得到.so位于:out\rk3588\filemanagement\app_file_service\libfileuri_native.z.so

4.4.4 窗口管理 libwm.z.so

./build.sh -p dayu210 --build-target libwm

得到.so位于:out\rk3588\window\window_manager\libwm.z.so

4.4.5 窗口管理服务 libwms.z.so

 ./build.sh -p dayu210 --build-target libwms

得到.so位于:out\rk3588\window\window_manager\libwms.z.so

4.4.6 蓝牙libsocket.z.so

./build.sh -p rk3568 --build-target foundation/communication/bluetooth/frameworks/js/napi/src/socket:socket

得到.so位于:out\rk3568\communication\bluetooth\libsocket.z.so

4.5其他

4.5.1 升级服务 libupdateservice.z.so

./build.sh -p dayu210 --build-target base/update/updateservice:update_service

得到.so位于:out\rk3588\updater\update_service\libupdateservice.z.so

五、总结

Congratulations~✌ 通过本文,你已基本掌握:

  • OpenHarmony源码模块编译的原理
  • OpenHarmony源码常用模块、应用和库等编译、替换方法

接下来就可以更高效地进行OpenHarmony源码开发&创作了~

了解更多关于OpenHarmony文章↩

<think> 嗯,用户需要了解OpenHarmony 5.0 SDK的编译方法及常见问题解决方案。根据提供的引用内容,我可以整理出一个清晰的步骤指南。 首先需要明确SDK编译的两种场景:一种是编译裸机SDK(引用1),另一种是编译带开源库的Native SDK(引用2,5)。从引用4中可以看到具体的编译命令,比如编译rk3568镜像和ohos-sdk的命令格式。 编译环境搭建是关键前提(引用3,4)。引用3特别指出标准系统采用Linux内核,而轻量系统用LiteOS内核,这点在环境选择时要注意。引用4给出了完整的repo初始化和编译命令序列,包括关键的lfs文件更新步骤,这个容易遗漏。 对于常见问题,引用2提到开源库编译需要准备鸿蒙专用工具链,引用5则具体展示了openssl的编译命令示例。这里需要强调架构限制——OH5.0 Native只支持64位库,这个坑用户很容易踩(引用5)。 工具链配置是个重点难点。引用2提到需要从源码获取交叉编译工具,类似安卓NDK的概念。在文档里应该突出强调环境变量设置的重要性,比如gn-args参数的使用(引用4)。 最后考虑补充优化建议。引用1提到SDK集成后能编译裸机工程,暗示可以结合IDE提升开发效率;而引用5的动态库编译示例则指向性能优化方向。这些都可以作为进阶内容提示用户。 </think>根据引用内容,以下是OpenHarmony 5.0 SDK编译的完整流程和常见问题解决方案: ### 一、SDK编译方法 1. **环境准备** - 系统要求:Ubuntu 20.04+(推荐)或Windows+Docker[^3][^4] - 工具安装: ```bash # 安装依赖 sudo apt-get update && sudo apt-get install git-lfs python3.9 gn ninja-build ``` 2. **源码获取** ```bash repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-5.0.0-Release --no-repo-verify repo sync -c repo forall -c 'git lfs pull' # 关键:更新大文件[^4] ``` 3. **编译裸机SDK** ```bash ./build.sh --product-name ohos-sdk --gn-args full_mini_debug=false # 生成完整SDK[^1][^4] ``` 输出路径:`out/ohos-sdk/` 4. **编译带第三方库的SDK**(以openssl为例) ```bash ./build_openssl.sh arm64-v8a # 动态库编译命令[^5] ``` 注意:**OH5.0 Native仅支持64位库**(arm64-v8a)[^5] ### 二、常见问题及解决方案 1. **git lfs同步失败** - 现象:文件校验失败 - 解决: ```bash repo forall -c 'git lfs fetch --all' # 重试LFS同步 repo forall -c 'git lfs pull' # 强制拉取 ``` 2. **SDK编译产物不全** - 原因:未启用完整编译模式 - 修复:添加编译参数 `--gn-args full_mini_debug=false`[^4] 3. **架构兼容性问题** - 报错:`Unsupported ABI` - 确认:**必须指定arm64-v8a**(OH5.0 Native层限制)[^5] 4. **交叉编译工具链缺失** - 现象:`gn: command not found` - 解决: ```bash build/prebuilts_download.sh # 下载预编译工具链[^4] export PATH=$PWD/prebuilts/build-tools/linux-x86/bin:$PATH ``` 5. **第三方库链接失败** - 方案:检查编译脚本中的头文件路径 ```bash # 示例:openssl编译脚本关键配置 ./Configure linux-aarch64 --prefix=/path/to/ohos/sysroot # 指定OH系统根目录[^2][^5] ``` ### 三、优化建议 1. **缓存加速**:首次编译添加 `--ccache` 参数(节省30%+时间)[^4] 2. **模块化编译**:仅编译所需组件 ```bash ./build.sh --product-name ohos-sdk --target-cpu arm64 --build-target crypto_lib # 单独编译加密库 ``` 3. **IDE集成**:将生成的SDK路径导入DevEco Studio的`local.properties`: ```properties ohos.sdk=out/ohos-sdk/ohos-sdk/linux # SDK路径声明 ``` > **关键提示**:编译前务必执行 `git lfs pull` 确保大文件完整(占源码30%+)[^4],否则会导致镜像生成失败。标准系统与轻量系统的编译环境差异较大,需严格按目标设备选择Linux或LiteOS内核[^3]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值