当前位置: 首页 > news >正文

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
...
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_haphb 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_haphb 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编译SmartPerfhb 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_haphb 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_managerhb 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_haphb build -p rk3568 -T power_dialog_hap

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

相关文章:

OpenHarmony模块化编译

一、环境配置 OpenHarmony版本:OpenHarmony 4.0 Release 编译环境:WSL2 Ubuntu 18.04 平台设备:RK3568 二、配置hb OpenHarmony 代码构建有build.sh和hb两种方式: #方式一、build.sh ./build.sh --product-name rk3568 --ccache#方式二、…...

Java游戏制作——王者荣耀

一.准备工作 首先创建一个新的Java项目命名为“王者荣耀”,并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 创建一个名为“img”的文件夹来储存所需的图片素材。 二.代码呈现 package com.sxt;import javax.sw…...

C# List<T>的综合用法

1、测试数据 //测试数据string str "";List<byte[]> bytes new List<byte[]>();for(int i0;i<10;i){byte[] bnew byte[2];b[0] (byte)(2 * i);b[1] (byte)(2 * i1);bytes.Add(b);str b[0] " " b[1] " ";}Console.WriteL…...

蓝桥杯-01简介

文章目录 蓝桥杯简介参考资源蓝桥杯官网第15届大赛章程一、概况&#xff08;一&#xff09;大赛背景和宗旨&#xff08;二&#xff09;大赛特色&#xff08;三&#xff09;大赛项目1.Java软件开发2.C/C程序设计3.Python程序设计4.Web应用开发5.软件测试6.网络安全7.嵌入式设计与…...

Spring的依赖注入,依赖注入的基本原则,依赖注入的优势

文章目录 Spring的依赖注入依赖注入的基本原则依赖注入有什么优势查找定位操作与应用代码完全无关。有哪些不同类型的依赖注入实现方式&#xff1f;构造器依赖注入和 Setter方法注入的区别 Spring的依赖注入 控制反转IoC是一个很大的概念&#xff0c;可以用不同的方式来实现。…...

Git远程仓库常用开发命令和理解

远程仓库 创建与合并分支 每次提交&#xff0c;Git都把它们串成一条时间线&#xff0c;这条时间线就是一个分支。截止到目前&#xff0c;只有一条时间线&#xff0c;在Git里&#xff0c;这个分支叫主分支&#xff0c;即master分支。 HEAD严格来说不是指向提交&#xff0c;而…...

Unknown error 1054

MySQL错误1054是“Unknown column”的错误&#xff0c;意味着在查询或语句中引用了一个不存在的列名。这通常是因为在查询中指定了一个不存在的列名。 解决步骤&#xff1a; 检查列名的拼写&#xff1a;确保在查询或语句中正确地输入了列名。检查大小写&#xff0c;确保与数据…...

pandas教程:Interfacing Between pandas and Model Code pandas与建模代码间的交互

文章目录 Chapter13 Introduction to Modeling Libraries in Python&#xff08;Python中建模库的介绍&#xff09;13.1 Interfacing Between pandas and Model Code&#xff08;pandas与建模代码间的交互&#xff09; Chapter13 Introduction to Modeling Libraries in Python…...

鸿蒙应用开发-初见:ArkTS

作者&#xff1a;HarderCoder ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 基本语法 …...

HTTP 和 HTTPS 之间除了安全性区别外,还有哪些区别

HTTP 和 HTTPS 是两种常见的网络协议&#xff0c;它们都是用于在浏览器和服务器之间传输数据的。但是&#xff0c;它们之间也有一些重要的区别&#xff0c;这些区别涉及到数据的安全性、传输性能、使用成本和搜索排名等方面。本文将从以下几个方面来介绍 HTTP 和 HTTPS 的区别&…...

小内存服务器生存指南 ——SWAP 虚拟内存

人们常说,网络是服务器的生命线,没有了网络,服务器再怎么牛逼,都跑不起来。然而偏偏有这么一票的服务器,它的网络很好,CPU 也很好,就是内存有点小。他们是主机界的独行侠 —— 入门级 VPS 服务器。 前俩天买的一台 TMT 的服务器就是这个类型: 256M 内存CPU 1vCore (2.…...

Linux 内存管理中的 Buffers 和 Cached:理解和区分

引言 当涉及到 Linux 系统的内存管理时&#xff0c;“Buffers” 和 “Cached” 是两个经常会引起混淆的术语。这两个概念都代表了系统内存的一部分&#xff0c;但它们的作用和工作方式有所不同。 区别&#xff1a; Buffers&#xff1a; Buffers&#xff08;缓冲区&#xff0…...

Linux——使用命令查看文件和文件夹数量

目录 一、相关命令参数解析二、查看当前目录下的文件数量2.1 包含子目录中的文件2.2 不包含子目录中的目录 三、查看当前目录下的文件夹个数3.1 不包含目录中的目录3.2 包含目录中的目录 四、查看当前文件夹下叫某某的文件的数量实例 五、总结 一、相关命令参数解析 "&qu…...

[蓝桥杯训练]———高精度乘法、除法

高精度乘法、除法 一、高精度乘法⭐1.1 初步理解1.1.1 高精度的定义1.1.2 为什么会有高精度1.1.3 高精度乘法的复杂度 1.2 思想讲解1.3 代码实现1.3.1 声明1.3.2 实现高精度乘法1.3.3 整体实现1.3.4 代码测试 二、高精度除法⭐2.1 初步理解2.2 思想讲解2.3 代码实现2.3.1 声明2…...

使用javascript 点击tab栏切换事件代码记录

如下图实现以下两点功能&#xff1a; 这里做代码记录 1. javascript 点击tab栏动态切换内容&#xff0c;并添加active 2. javascript 点击左右图标可以向左或者向右移动元素 第1点功能&#xff1a; // tab栏 <div class"left"><span class"tab act…...

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例

零基础编程入门视频教程&#xff0c;零基础编程从哪学起&#xff0c;分享中文编程工具构件实例 1、零基础编程入门视频教程&#xff0c;系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…...

计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(订单和AOP)

计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现&#xff08;订单和AOP&#xff09; 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先&#xff0c;通过深入分析项目所需数据&#xff0c;包括用户、商品、商品类别、收藏、订单、购物车…...

【Skynet 入门实战练习】实现网关服务 | 用户代理 | RPC 协议 | 客户端

文章目录 前言网关服务RPC 协议看门狗服务代理服务客户端逻辑梳理 前言 上两章学习了如何搭建一个项目&#xff0c;简单实现了几个基础模块。本章节会实现基本的客户端与服务端的通信&#xff0c;包括网关&#xff08;gate&#xff09;、看门狗&#xff08;watchdog&#xff0…...

eclipse - jee 建立项目后没有 web.xml

eclipse -- jee 建立项目后没有 web.xml 处理它的方法是&#xff0c;点 File - New - Dynamic Web Project , 此时起一个项目名如M4 然后next 然后next 出现如此所示:...

Miniconda虚拟环境安装(chatglm2大模型安装步骤二)

1.服务器配置 服务器系统&#xff1a;Centos7.9 x64 显卡&#xff1a;RTX3090 &#xff08;24G&#xff09; 2.安装环境 2.1 检查conda是否安装 输入命令&#xff1a;conda -V 如果显示conda 4.7.12&#xff0c;说明已经有不需要安装 2.2 安装Miniconda 在家目录建一个mi…...

解锁毕业论文新姿势:书匠策AI,你的学术写作超级助手!

在学术的浩瀚海洋中&#xff0c;毕业论文无疑是每位学子扬帆远航前必须跨越的一道重要关卡。它不仅是对你多年学习成果的总结&#xff0c;更是通往未来学术或职业道路的一块重要敲门砖。然而&#xff0c;面对堆积如山的资料、错综复杂的逻辑结构&#xff0c;以及那令人头疼的格…...

基于Vue的社区医疗公益服务系统[vue]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着社区医疗公益服务需求的不断增长&#xff0c;构建高效、便捷的管理系统成为提升服务质量的关键。本文介绍了一个基于Vue框架开发的社区医疗公益服务系统&#xff0c;详细阐述了其设计目标、技术架构、功能模块以及实现过程。该系统涵盖了系统用户管理、社区…...

Claude Code 最佳实践:构建可验证、可治理、可扩展的生产级分布式系统

Claude Code 最佳实践:构建可验证、可治理、可扩展的生产级分布式系统 在很多团队的第一印象里,Claude Code 只是“更强一点的命令行编码助手”。但一旦进入中大型研发场景,你很快会发现,真正决定它价值上限的,不是单次补全能力,而是它是否能够被纳入一套可验证、可治理…...

PyTesseract实战:从参数调优到场景化OCR识别方案

1. PyTesseract入门&#xff1a;为什么参数调优如此重要&#xff1f; 第一次用PyTesseract做OCR识别时&#xff0c;我对着满屏乱码的输出结果差点崩溃——明明图片上的文字清晰可见&#xff0c;为什么识别结果却错得离谱&#xff1f;后来才发现&#xff0c;默认参数配置就像用菜…...

新手福音:在快马平台通过cmhhc项目轻松入门编程

作为一个刚接触编程的新手&#xff0c;我最近在InsCode(快马)平台上尝试实现了一个简单的字母加密工具cmhhc。这个项目特别适合像我这样的初学者&#xff0c;因为它涉及文件操作、字符串处理等基础但实用的编程概念。下面分享我的学习过程和心得体会。 理解项目需求 首先明确cm…...

西门子S7-1200的PID三兄弟:PID_Compact、PID_3Step、PID_Temp到底该怎么选?看完这篇不再纠结

西门子S7-1200 PID三兄弟实战选型指南&#xff1a;从原理到场景化决策 在工业自动化领域&#xff0c;温度、压力和流量等过程变量的精确控制始终是核心挑战。西门子S7-1200 PLC提供的三种PID控制指令——PID_Compact、PID_3Step和PID_Temp&#xff0c;就像三位各有所长的技术专…...

如何快速在浏览器中搭建全功能Office办公环境:SE Office扩展终极指南

如何快速在浏览器中搭建全功能Office办公环境&#xff1a;SE Office扩展终极指南 【免费下载链接】se-office se-office扩展&#xff0c;提供基于开放标准的全功能办公生产力套件&#xff0c;基于浏览器预览和编辑office。 项目地址: https://gitcode.com/gh_mirrors/se/se-o…...

告别重复造轮子:用快马生成高效配对模块提升开发效率

在开发智能硬件或物联网项目时&#xff0c;设备配对功能几乎是每个项目都绕不开的基础模块。但每次从零开始实现蓝牙、Wi-Fi等设备的配对逻辑时&#xff0c;总免不了要重复处理扫描过滤、状态管理、错误重试这些"轮子"。最近尝试用InsCode(快马)平台生成标准化配对模…...

手把手教你用VSCode和ST-Link V2给ODrive V3.6编译烧录056固件(附避坑指南)

从零开始&#xff1a;ODrive V3.6固件编译与烧录全流程实战指南 当你第一次拿到ODrive V3.6这款高性能电机驱动板时&#xff0c;可能会被它强大的功能所吸引&#xff0c;同时也可能对如何开始使用感到些许迷茫。本文将带你一步步完成从环境搭建到固件烧录的全过程&#xff0c;…...

用快马快速构建排序算法可视化原型,直观比较性能差异

最近在复习算法基础时&#xff0c;发现单纯看代码很难直观理解不同排序算法的差异。于是尝试用InsCode(快马)平台快速搭建了一个排序算法可视化工具&#xff0c;整个过程比想象中简单很多&#xff0c;分享下具体实现思路。 需求分析 首先明确需要展示五种经典排序算法&#xff…...