OpenHarmony模块化编译

这篇具有很好参考价值的文章主要介绍了OpenHarmony模块化编译。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、环境配置

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
openharmony 4 full sdk,OpenHarmony,OpenHarmony
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/后路径与模块源码路径对应。
openharmony 4 full sdk,OpenHarmony,OpenHarmony

注意:模块编译需模块目录存在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文章来源地址https://www.toymoban.com/news/detail-775865.html

到了这里,关于OpenHarmony模块化编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 模块化

    能够说出模块化的好处 能够知道CommonJS规定了哪些内容 能够说出Node.js中模块的三大分类各自是什么 能够使用npm管理包 能够了解什么是规范的包结构 能够了解模块的加载机制 模块化的基本概念 Node.js中模块的分类 npm与包 模块的加载机制 1.1什么是模块化 模块化 是指解决一个

    2024年02月06日
    浏览(75)
  • 前端模块化

      随着前端应用的日益复杂,我们的项目代码已经逐渐膨胀到了不得不花大量时间去管理的程度了。而模块化就是一种最主流的代码组织方式,它通过把复杂的代码按照功能的不同划分为不同的模块单独维护,从而提高开发效率、降低维护成本。模块化可以使你能够更容易地

    2024年02月08日
    浏览(41)
  • Vuex模块化管理

    如果你的项目是一个小型项目,就用不着使用模块化; 但是,如果你参与的项目是一个中大型项目,那Vuex模块化,必不可少,否则整个文件很臃肿,也很难管理。 通过模块化管理:各自模块下都有自己的state及方法,各自模块管理自己的数据,这样不容易造成混乱。 第一步

    2024年02月15日
    浏览(38)
  • Rust的模块化

    Rust的模块化要从Rust的入口文件谈起。 Rust的程序的入口文件有两个 如果程序类型是可执行应用,入口文件是main.rs; 如果程序类型是库,入口文件是lib.rs; 入口文件中,必须声明本地模块,否则编译器在编译过程中,会报该模块不存在的错误。这个规则,在其它程序的编译

    2024年02月09日
    浏览(25)
  • Nodejs三、模块化

    1、模块化的基本概念 (1)模块化是什么 模块化 是指解决一个 复杂问题 时,自顶向下逐层 把系统划分成若干模块 的过程。对于整个系统来说, 模块是可组合、分解和更换的单元 。 (2)编程领域中的模块化 编程领域中的模块化,就是 遵守固定的规则 ,把一个 大文件 拆

    2024年02月09日
    浏览(32)
  • webpack(一)模块化

    阶段一:基于文件的划分模块方式 概念 :将每个功能和相关数据状态分别放在单独的文件里 约定每一个文件就是一个单独的模块,使用每个模块,直接调用这个模块的成员 缺点 :所有的成员都可以在模块外被访问和修改(所有的模块都是直接在全局工作,没有【私有空间

    2024年02月11日
    浏览(34)
  • 解构模块化区块链

    在可扩展性方面,模块化区块链是区块链设计的最新范式。 模块化的概念起源于Layer1区块链Celestia,现在这个概念也逐渐被更多的人所关注,还有人甚至提出”模块化区块链将定义Web3创新的下一个十年“的口号。 但是,到底什么是模块化区块链,它到底能解决什么问题,它

    2024年02月01日
    浏览(33)
  • 模块化规范

    常用模块化有两种规范,commonJS和ES6 我们常遇到的使用场景是,在commonJS的模块里需要引入ES6规范的模块。这时就需要把ES6模块转译为commonJS规范的模块,否则报错 转义工具有: Babel:Babel 是一个流行的 JavaScript 编译器,它可以将 ES6 模块转译为 CommonJS 模块。你可以使用 Bab

    2024年02月15日
    浏览(36)
  • 前端进阶之——模块化

            在做项目的时候越来越发现模块化的重要性,做好模块化开发不仅给后期的维护带来不少好处而且大大提升项目开发效率,接下来整理一下模块化相关知识吧。 封装方法、提高代码的复用性、可维护性和可读性 隔离作用域,避免污染全局作用域 避免变量冲突 立即执

    2024年02月10日
    浏览(50)
  • JavaScript模块化

    JavaScript模块化,让我们通过一个实际的例子来更好地理解。 假设我们正在开发一个简单的购物车应用,需要实现计算商品总价和展示购物车列表的功能。我们可以将这个应用划分为两个模块:`cart.js`和`main.js`。 1. cart.js模块: ```javascript // cart.js // 定义一个私有变量,用于存

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包