一、环境配置
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
...
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 编译系统资源应用
#使用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 编译性能测试应用
#使用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 编译输入法选择框应用
#使用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 编译授权管理应用
#使用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 编译关机弹框应用
#使用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