OpenHarmony模块化编译

OpenHarmony源码学习之编译框架 OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代、基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。最近在学习OpenHarmony源代码,个人认为学习有三个阶段看、实操、写,本着学习的终极目标,因此有了这篇文章。 阅读详情
AI摘要

本文详解OpenHarmony 4.0 Release在WSL2 Ubuntu 19.7环境下基于RK3568平台的模块化编译流程,涵盖hb工具配置、Full SDK与内核编译,并重点介绍系统原生HAP应用(如power_dialog、SmartPerf)及Foundation层核心动态库(如libabilityms.z.so、libwm.z.so、libwms.z.so)的按需编译方法,显著提升开发调试效率。

一、环境配置

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文章↩

Openharmony的编译构建--基础篇 Openharmony 编译构建 阅读详情

相关推荐

OpenHarmony编译

简介:本文将会介绍编译OpendHarmony环境的搭建、编译、和刷机(rk3568)使用场景:修改系统源码,需要验证修改的功能是否正确、编译镜像、编译SDK1、VS Code,,用于修改源码2、linux环境搭建 用于编译源码用于验证修改的源码4、hdc命令配置,环境变量 path里增加路径 sdk的toolchains目录路径。sdk位置参考第八点安装linux系统:最好是ubuntu 20.04.6 没有的话,安装20.04.2,创建好用户及密码系统安装好后,需要将源替换成阿里源。

t7g367的博客 1994

【详细深入分析OpenHarmony编译流程】

OpenHarmony做为复杂的操作系统软件,其编译构建也比较复杂。本文主要记录作者自己在阅读编译脚本代码后对其的认识,不代表官方观点,不足之处还请批评指正。本文顺着编译流程阅读和解释编译脚本代码,即执行时间靠前的代码先解释,执行时间靠后的代码后解释。本文参考代码为2024年7月8日master分支代码。为了方便查看OpenHarmony代码,作者搭建了一个服务器,欢迎使用https://lengqinjie.xyz。

weixin_40870382的博客 1万+

OpenHarmony模块化编译实战:从原理到高频场景应用

本文深入解析OpenHarmony模块化编译的核心原理与实战技巧,通过GN构建系统实现高效开发。从系统应用调试到内核驱动开发,详细展示高频场景下的模块化编译应用,显著提升开发效率。特别针对RK3568等开发板,提供从资源修改到SDK定制的完整解决方案,助力开发者快速掌握OpenHarmony编译优化。

weixin_33704591的博客 397

OpenHarmony构建系统探秘:GN语法与模块化编译的艺术

本文深入探讨OpenHarmony构建系统的核心机制,重点解析GN语法特性和模块化编译策略。通过实际案例展示如何编写高效的构建规则,并详细介绍了单编等优化技术,帮助开发者提升编译效率,为系统性能优化和功能扩展奠定基础。

pink的博客 673

告别漫长等待!OpenHarmony模块化编译深度指南:从Full SDK到蓝牙库的精准构建

本文深入解析OpenHarmony模块化编译的核心价值与实战技巧,帮助开发者从全量构建转向精准定制。通过GN脚本解析、依赖关系可视化和构建工具对比,显著提升编译效率,特别针对蓝牙库等模块的编译优化提供了详细指南。掌握这些技术可告别漫长等待,实现高效开发。

weixin_33696106的博客 305

别再傻傻全量编译了!OpenHarmony 4.0模块化编译实战,5分钟搞定单个HAP/库

本文详细介绍了OpenHarmony 4.0的模块化编译实战技巧,帮助开发者告别低效的全量编译。通过精准定位目标模块、解析BUILD.gn文件以及掌握编译命令,开发者可以在5分钟内完成单个HAP/库的编译,大幅提升开发效率。文章还提供了高频模块编译速查手册和常见问题解决方案,助力开发者快速上手模块化编译。

weixin_28721917的博客 327

告别全量编译:OpenHarmony模块化编译实战指南(含RK3568平台常见库编译命令)

本文详细介绍了OpenHarmony模块化编译的实战技巧,帮助开发者告别耗时全量编译。通过环境配置、GN构建系统解析及RK3568平台核心模块编译命令速查,大幅提升开发效率。特别针对窗口管理、蓝牙协议栈等关键模块提供优化方案,实现编译时间从小时级到分钟级的跨越。

weixin_30691871的博客 649

OpenHarmony源码解析之编译构建

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代、基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。最近在学习OpenHarmony源代码,个人认为学习有三个阶段,分别是看、实操、写(归纳总结),本着追求学习的终极目标,因此有了这篇文章。

liuhaojiabin的博客 1413

OpenHarmony整编与单编实战:模块化编译效率提升指南

本文详细介绍了OpenHarmony开发中的整编与单编实战技巧,通过模块化编译显著提升开发效率。涵盖环境配置、整编全解析、单编定位模块与执行方法,以及常用模块编译示例和效率优化策略,帮助开发者快速掌握OpenHarmony编译系统。

f9g0h的博客 181

鸿蒙OpenHarmony南向开发 轻量系统芯片移植案例(三)

本文介绍了基于芯海科技CST85芯片开发板的OpenHarmony LiteOS-M系统移植案例。主要内容包括:1. 开发了Wi-Fi连接和XTS测试样例,适配了wifi_lite、lwip等关键组件2. 采用了Board和SoC分离的移植架构,使用NewLibC库和gn+Kconfig构建系统3. 详细阐述了内核启动、中断向量、littlefs文件系统、GPIO HDF驱动等关键技术的适配方案4. 实现了通信、kernel、startup、utils、xts等多个子系统的功能适配5. 提供了完整的目录结构

Zgw555的博客 1530

OpenHarmony南向设备开发:Combo解决方案之ASR芯片移植案例

本方案基于OpenHarmony LiteOS-M内核。

初一十五的博客 1402

OpenHarmony 4.0开发:用模块化编译把调试效率拉满(附常用模块target清单)

本文深入解析OpenHarmony 4.0的模块化编译机制,提供高效开发调试方案。通过精准构建和增量部署,将编译时间从30分钟缩短至秒级,极大提升开发效率。附常用模块target清单和自动化部署脚本,帮助开发者快速构建极速工作流。

weixin_42524762的博客 200

扣子(coze)实战|手把手教你搭建AI换装自动化工作流

摘要:本文介绍了使用Coze平台搭建AI换装工作流的详细教程。工作流包含模特图片上传、服装替换、任务提交和智能轮询等模块,通过change_model插件实现异步换装处理,并内置30秒循环查询机制。该工具支持自定义API密钥对接不同AI服务商,目前已上线共享空间并提供会员服务(59.8元/年)和VIP课程(499元/年),包含100+智能体和实战案例资源。完整体验地址见文中链接。

yueyehuguang的博客 1843

OpenHarmony 4.0 Release开发实战:用模块化编译把调试效率提升10倍(RK3568平台)

本文详细介绍了在RK3568平台上使用OpenHarmony 4.0 Release进行模块化编译的实战技巧,帮助开发者将编译时间从数十分钟缩短至30秒内。通过精准定位和编译单个功能模块,如HAP应用或.so动态库,显著提升开发效率。文章涵盖模块化编译的核心原理、实战步骤、热替换技巧及高级调试方法,助力开发者实现高效开发。

weixin_42558093的博客 94

显示模组Bonding IC气泡问题的诊断与优化策略

本文深入分析了显示模组Bonding IC气泡问题的成因与优化策略,涵盖IC两端剥离气泡、彩虹状水汽气泡、电极下方无规律气泡及IC输入端气泡等类型。通过工艺参数优化、材料存储处理、清洁环境控制及维修品特殊处理等多维度解决方案,有效降低气泡不良率。同时介绍了纳米改性ACF材料、激光辅助排泡技术等前沿解决方案,为触控显示行业提供实用参考。

weixin_26805597的博客 420

rk3568 rockit编译测试

编译rockit不能使用SDK默认编译kernel的交叉编译,需要采用编译buildroot的,而编译buildroot的编译器SDK并没有存放,需要编译过buildroot之后才可以用。命令参数相关解析可查阅代码,这里提醒一下-l参数,这是程序运行计数,默认是100,时间很短,基本上显示画面一闪而过,一度以为是程序哪里出问题了,改用-l 1000,画面显示时间加长。此处跳过系统,单领出来编译。rockit组件包在4.10版本需要手动编译,奈何我的版本怎么都编译不了,后来改用5.10版本才编译通过。

zfenggo的博客 4197

OpenHarmony 4.0 Release开发:用模块化编译把调试效率拉满(RK3568实战)

本文详细解析了在RK3568平台上使用OpenHarmony 4.0进行模块化编译的实战技巧。通过精准定位目标模块、优化编译命令组合以及高效部署验证,开发者可将调试效率提升近百倍,特别适用于日常功能开发与问题修复场景。

weixin_42741930的博客 100

基于Meteoinfo与TrajStat的后向轨迹聚类分析实战:从数据准备到可视化制图

本文详细介绍了基于Meteoinfo与TrajStat进行后向轨迹聚类分析的完整实战流程。从Java环境配置、Meteoinfo软件与TrajStat插件安装,到精准获取NOAA气象数据、设置参数进行批量轨迹计算,再到利用聚类分析提炼主要气流路径,并最终完成专业地图可视化与制图。文章旨在帮助环境与气象研究者快速掌握从数据准备到成果输出的全链路操作。

p4q5r6s7t的博客 804

OpenHarmony的整编和单编

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。

Jason_Lee155的博客 3601

科研党必备:用MATLAB批量处理.mat文件数据的3种高效方法

本文为科研人员提供了使用MATLAB批量处理.mat文件数据的三种高效方法,涵盖智能数据加载、专业可视化与自动化报告生成。通过构建自动化框架、多维度数据画图策略及批量处理流程,帮助用户显著提升数据处理效率与图表专业性,解决海量实验数据的管理与分析难题。

weixin_29089057的博客 73

图机器学习(7)——图神经网络 (Graph Neural Network, GNN)

图神经网络 (Graph Neural Network, GNN) 是一类专门处理图结构数据的深度学习方法。这类方法也被称为几何深度学习 (geometric deep learning),在社交网络分析、计算机图形学等众多领域正受到日益广泛的关注。在本节中,我们介绍了 GNN 的核心原理,将卷积等经典深度学习范式拓展至非欧几里得图空间,实现了局部结构与全局特征的层次化提取。

盼小辉丶的博客 1万+
上一篇: OpenHarmony 4.0 Release 编译异常处理
下一篇: Docker命令集
Mart!nHu
博客等级 码龄7年 1万+粉丝 50原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值