HarmonyOS—编译构建概述

news2024/9/22 9:58:34

编译构建是将应用/服务的源代码、资源、第三方库等,通过编译工具转换为可直接在硬件设备上运行的二进制机器码,然后再将二进制机器码封装为HAP/APP软件包,并为HAP/APP包进行签名的过程。其中,HAP是可以直接运行在模拟器或真机设备中的软件包;APP则是用于应用/服务上架到华为应用市场。HAP和APP的关系说明请参考工程介绍。

HarmonyOS应用/服务支持API Version 4~9,但API Version 4~7与API Version 8~9在编译构建体系、工程目录及配置文件等存在差异,接下来将详细介绍两者之间的差异。

构建体系

HarmonyOS应用/服务API Version 4~7和API Version 8~9的构建工具和构建插件不同。

  • API Version 4~7构建体系是由Gradle构建工具和构建插件组成;
  • API Version 8~9构建体系是由Hvigor构建工具和构建插件组成。

Gradle构建工具作为业界流行的自动化构建开源工具,本章节不再赘述,接下来为大家介绍Hvigor构建体系。

Hvigor构建工具:一款全新基于TS实现的前端构建任务编排工具,结合npm包管理机制,主要提供任务管理机制,任务注册编排、工程模型管理、配置管理等关键能力,更符合ArkTS/JS开发者的开发习惯。

构建插件hvigor-ohos-plugin:是基于Hvigor构建工具开发的一个插件,利用Hvigor的任务编排机制实现应用/服务构建任务流的执行,完成HAP/APP的构建打包,应用于应用/服务的构建。

DevEco Studio会自动配置配套版本的编译工具和构建插件依赖,关于构建工具和构建插件的版本配套关系可参考DevEco Studio版本说明。如需修改构建工具和构建插件版本,API 9及以上版本和API 8版本工程的修改位置不同:

  • API 9及以上版本需修改hvigor目录下的hvigor-config.json5文件,示例如下。
{
  “hvigorVersion”: "2.2.1",
  "dependencies": {
        "@ohos/hvigor-ohos-plugin": "2.2.1"
  }
}
  • API 8版本需要在工程级的package.json文件中配置相应的版本依赖,示例如下。
{
  ...
  "dependencies": {
    "@ohos/hvigor": "1.4.0",
    "@ohos/hvigor-ohos-plugin": "1.4.0"
  }
}

工程目录及配置文件说明

工程目录及配置文件(API Version 9)

HarmonyOS API Version 9基于Hvigor构建体系,DevEco Studio定义了其工程范式,下面是Hvigor构建体系的工程目录结构示意图:
在这里插入图片描述
关于Hvigor构建体系中的构建配置文件(build-profile.json5)、构建脚本(hvigorfile.ts)、依赖配置(oh-package.json5)的详细说明请参考配置编译构建信息章节。

工程目录及配置文件(API Version 8)

HarmonyOS API Version 8基于Hvigor构建体系,DevEco Studio定义了其工程范式,下面是Hvigor构建体系的工程目录结构示意图:

在这里插入图片描述
关于Hvigor构建体系中的构建配置文件(build-profile.json5)、构建脚本(hvigorfile.ts)、依赖配置(package.json)的详细说明请参考配置编译构建信息章节。

工程目录及配置文件(API Version 4~7)

HarmonyOS API Version 4~7基于Gradle构建体系,DevEco Studio定义了其工程范式,下面是Gradle构建体系的工程目录结构示意图:

在这里插入图片描述
关于build.gradle详细说明请参考配置编译构建信息章节。

如何构建应用/服务

启动应用/服务构建

说明
在完成应用/服务开发后,如果开发者需要将应用包上传到AGC平台的软件包管理或第三方管理平台草稿箱中,可选择通过Upload Project完成编译并上传,具体请参见通过DevEco Studio编译和上传软件包。

通过DevEco Studio构建应用/服务的方式有以下两种:

  • 方式一:通过单击或按钮,DevEco
    Studio会启动应用/服务的编译,并将编译后的HAP部署到设备中。这种方式一般用于应用开发阶段进行应用的调试、功能验证等场景。
  • 方式二:通过DevEco
    Studio的Build菜单栏的编译选项进行构建,HAP的构建结果存放于各模块的“build”文件夹下,APP包的构建结果存放于工程的“build”文件夹下。这种方式可以分别编译HAP和APP包,其中HAP可用于安装到设备中进行功能验证,APP包则用于将应用/服务发布到应用市场。

在这里插入图片描述
关于Build菜单下的编译选项说明如下:

在这里插入图片描述

查看编译过程

启动编译后,您可以在底部工具栏窗口查看编译任务的详细信息,例如执行的编译流程、任务的执行时间等信息。如果在编译构建过程中出现错误,您可以根据编译任务的详细错误说明进行问题的定位。

API Version 8~9工程编译构建示意图如下:
在这里插入图片描述
API Version 4~7工程编译构建示意图如下:
在这里插入图片描述
另外,针对Native C++开发方式,DevEco Studio支持的编译工具链为CMake和NinJa,在启动编译后,可以在底部工具栏窗口的输出内容中查看到编译工具链的具体配置信息。

CMake的配置信息如下所示。
在这里插入图片描述
NinJa的配置信息如下所示。
在这里插入图片描述

查看编译结果

编译构建成功后,您可以在工程目录中找到对应的编译产物(如APP/HAP)。

  • API Version 8~9编译构建结果:
    在这里插入图片描述
  • API Version 4~7编译构建结果:
    在这里插入图片描述

多工程构建

为降低大型应用多个团队协作开发的复杂度,提供多工程开发模式,提高协作开发效率。多工程开发能力支持将大型应用拆分为多个模块,每个模块对应一个单独工程。在每个工程分别编译生成HAP后,需统一打包生成一个APP,用于上架应用市场。

1.分别在每个工程的build-profile.json5配置文件中,设置multiProjects字段值为true。

{
  "app": {
    ...
    "multiProjects": true,
  }
}

2.准备好HAP打包工具hap_packing_tool.jar(在${HOS_SDK_HOME}/openharmony/版本号/toolchains/lib下)。

3.使用如下命令,将多个HAP进行打包。

  • hap-list:多个HAP文件名称,如“1.hap”和“2.hap”,用逗号隔开;
  • out-path:生成的APP名称,如“final.app”
java -jar app_packing_tool.jar --mode multiApp --hap-list 1.hap,2.hap --out-path final.app

作为一名合格一线开发程序员,大家心里肯定会有很多疑问!鸿蒙系统这么强大~~

为了能够让大家跟上互联网时代的技术迭代,在这里跟大家分享一下我自己近期学习心得以及参考网上资料整理出的一份最新版的鸿蒙学习提升资料,有需要的小伙伴自行领取,限时开源,先到先得~~~~

领取以下高清学习路线原图请点击→《鸿蒙 (Harmony OS)开发学习手册》纯血鸿蒙HarmonyOS基础技能学习路线图

在这里插入图片描述
 

领取以上完整高清学习路线图,请点击→《鸿蒙基础入门学习指南》小编自己整理的部分学习资料(包含有高清视频、开发文档、电子书籍等)


在这里插入图片描述

以上分享的学习路线都适合哪些人跟着学习?

-应届生/计算机专业
通过学习鸿蒙新兴技术,入行互联网,未来高起点就业。
-0基础转行
提前布局新方向,抓住风口,自我提升,获得更多就业机会。
-技术提升/进阶跳槽
发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术,享受蓝海红利

在这里插入图片描述

总结

如果你觉得这篇内容对你有帮助,我想麻烦大家动动小手给我:点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。

关注我,同时可以期待后续文章ing,不定期分享原创知识。

想要获取更多完整鸿蒙最新VIP学习资料,请点击→《鸿蒙全套学习指南》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1481074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java8 - LocalDateTime时间日期类使用详解

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…

又挖到宝了!国人团队研发的AI视频工具PixVerse,这么好用居然还完全免费!(强烈推荐)

昨天发了一款国产免费的 AI 绘画工具 Dreamina 的介绍: 居然才发现!字节跳动旗下国产AI绘画工具Dreamina,这么好用居然还免费!(强烈推荐) 发现大家对国产 AI 工具还挺感兴趣的。今天继续帮大家挖国产的 A…

Python环境搭建:一站式指南

在当前AIGC技术蓬勃发展的背景下,Python作为人工智能领域最受青睐的编程语言之一,成为我们必须掌握的技能。因此,搭建一个适合自己的Python环境成为了每个Python开发者的首要任务。本文将为您提供一站式的Python环境搭建指南,帮助…

学习:Sora技术报告Video generation models as world simulators,2024.2

原文链接: Video generation models as world simulators (openai.com) 摘要: 我们探索了在视频数据上大规模训练生成模型。具体来说,我们在可变片长、分辨率和纵横比的视频和图像上联合训练文本条件扩散模型text-conditional diffusion mo…

腾讯云2024年优惠活动和云服务器优惠价格清单,3月最新整理

腾讯云优惠活动2024新春采购节活动上线,云服务器价格已经出来了,云服务器61元一年起,配置和价格基本上和上个月没什么变化,但是新增了8888元代金券和会员续费优惠,腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

上云还是下云,最大挑战是什么?| 对话章文嵩、毕玄、王小瑞

近半年来,公有云领域频频发生阿里云、滴滴等平台崩溃事件,与此同时,马斯克的“X 下云省钱”言论引起了广泛关注,一时间,“上云”和“下云”成为热议话题。在最近举办的 AutoMQ 云原生创新论坛上,AutoMQ 联合…

【计算机网络】五种IO模型与IO多路转接之select

文章目录 一、五种IO模型二、非阻塞IO1.fcntl2.实现函数SetNoBlock3.轮询方式读取标准输入 三、I/O多路转接之select1.初识select2.select函数原型3.socket就绪条件4.select的特点5.select缺点6.select使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.select…

力扣SQL50 使用唯一标识码替换员工ID 查询

Problem: 1378. 使用唯一标识码替换员工ID 思路 left join:左连接 Code select eu.unique_id,e.name from Employees e left join EmployeeUNI eu # left join 左连接 on e.id eu.id;

模型练习史

文章目录 肌肉光头vikingtorso死侍蓝毒液卡通girlwalletdog headman anatomy总结 肌肉光头 viking torso 死侍 蓝毒液 卡通girl wallet dog head man anatomy 总结 zbrush 与 blender 结合使用, 善 !

金融短信群发平台具有那些特点

金融短信群发平台的特点主要包括以下几个方面: 1.高效性:金融短信群发平台能够快速地发送大量的短信,使得金融信息能够迅速传达给目标客户,保证了信息的及时性和有效性。 2.安全性:金融短信群发平台对于信息的安全性非…

Java中使用poi+poi-tl实现根据模板导出word文档

场景 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出: 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出_若依导出前端获得到后端的execl流之后怎么操作-CSDN博客 上面讲的是Excel的导出,如果是需要根据w…

VBA技术资料MF124:移动单个文件及移动某类型文件

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

MacBook将iPad和iPhone备份到移动硬盘

#创作灵感# 一个是ICloud不够用,想备份到本地;然而本地存储不够用,增加容量巨贵,舍不得这个钱,所以就想着能不能备份到移动硬盘。刚好有个移动固态,所以就试了一下,还真可以。 #正文# 说一下逻…

VUE3:统计分析页面布局+自适应页面参考

一、布局 <template><div class"container1"><div class"form white"><el-form :inline"true" :rules"rules" :model"queryParams" label-width"80px" ref"querParmRef"><e…

基于NeRF/Gaussian的全新SLAM算法

什么是SLAM&#xff1f; SLAM&#xff0c;即同时定位与地图构建技术&#xff0c;SLAM可以让机器人、无人机和其他自动化系统能够在未知环境中同时进行自我定位和环境映射。 为什么是NeRF-Based SLAM&#xff1f; 传统CG将输入图像重新投影再融合到新的视图摄像机中&#xff0c…

useState多次渲染页面卡顿 useMemo

useState多次渲染页面卡顿 state变化了组件自然应该重新进行渲染&#xff0c;但有时我们并不需要。 React.memo()(useMemo)是一个高阶组件&#xff0c;它接收另一个组件作为参数&#xff0c;并且会返回一个包装过的新组件&#xff0c;包装过的新组件就会具有缓存作用&#xff…

Qt 中Qwidget相关属性

文章目录 1. QWidget 核心属性1.1 enabled1.2 geometry1.2.1 window frame 的影响 1.3 windowTitle1.4 windowIcon1.4.1 qrc的使用 1.5 windowOpacity1.6 cursor1.7 focusPolicy1.8 styleSheet 1. QWidget 核心属性 在 Qt 中, 使⽤ QWidget 类表⽰ “控件”. 像按钮, 视图, 输…

MES系统在离散制造企业中的功能解析

随着信息技术的快速发展和制造业的转型升级&#xff0c;MES在离散制造企业中的作用日益凸显。MES系统不仅提高了生产效率和产品质量&#xff0c;还优化了资源配置&#xff0c;增强了企业的市场竞争力。 一、生产管理功能 MES系统能够实时监控生产现场的各种数据&#xff0c;包…

数据库常见理论常见面试题(总结)

一、前言 这里呢&#xff0c;博主会介绍一些平时关于数据库的理论的问题&#xff0c;比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识&#xff0c;但是像索引、事务、锁等内容&#xff0c;之前的文章就讲解过了&#xff0c;这里就不作过多的介绍了&am…

基于Beego 1.12.3的简单website实现

参考 用Beego开发web应用 https://www.cnblogs.com/zhangweizhong/p/10919672.htmlBeego官网 Homepage - beego: simple & powerful Go app frameworkbuild-web-application-with-golang https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/pr…