harmonyOS 原来构建还有这么多弯弯绕绕

        随着用户需求的不断增长,我们的 APP 已发展成功能丰富的超级APP,这也导致打包构建变得非常耗时,可能需要数小时,严重影响开发效率和产品迭代。通过采用模块化设计、增量构建、并行处理、缓存机制、优化依赖管理,以及云构建服务等策略,不仅能大幅缩短构建时间,还能提升整体开发效率,更加高效的交付业务。

1. Hvigor 高性能构建

        Hvigor作为编译构建任务流工具,它支持并行编译、增量编译等特性, 增量构建是一种通过利用缓存只构建发生变化的部分的方法,可以加快构建速度并减少资源消耗和不必要的重复编译工作,实现对代码变更的快速响应,提升构建效率。

启用增量构建: 增量构建是hvigor执行任务的一种优化,只对发生变化的部分进行编译,而不是整个项目。如果在两次执行任务工程中,执行任务的输入和输出没有更改,hvigor会跳过该任务的执行。

# 启用增量构建 hvigorw <task> --incremental

# 关闭增量构建 hvigorw <task> --no-incremental

◦并行编译:大部分工程都包含了多个子工程,其中一些子工程是相互独立的,也就是说,它们之间没有状态共享。在大多数情况下,通过并行构建可以有效地减少多个子工程的整体构建时间。默认情况下,hvigor会开启并行执行

# 启用并行执行 hvigorw <task> --parallel
# 关闭并行执行 hvigorw <task> --no-parallel

◦启动守护进程:将进程常驻在内存中,一方面避免了Node进程重复启动、减少了加载js文件的耗时,另一方面可以复用构建过程中的增量缓存、减少增量缓存信息的读取与落盘操作。重复构建同一项目时,守护进程可以将构建时间缩短。多次构建时,守护进程只会将hvigor一次性加载到内存中,而不是每一次构建。

# 启用守护进程 hvigorw <task> --daemon
# 关闭守护进程 hvigorw <task> --no-daemon

根据业务场景,合理配置增量/并行编译、开启守护进程,可以降低约 60% 的构建耗时

2. 模块化编译构建

为了提升HarmonyOS应用的开发效率和开发者体验,DevEco Studio引入了模块化编译方式,以优化传统的JSBundle化编译方案。以往的方案会为每个入口页面打包成一个独立的bundle包,不支持运行时共享,因此每当修改单个模块文件时,需要进行整包重新编译。这不仅增加了编译时间,也导致HAP包体积增大,影响开发效率。

模块化编译通过以下方式解决这些问题:

◦独立编译:模块之间相互独立编译,避免了不必要的整包重编译,从而显著加快了编译速度。

◦动态共享包(HSP):支持将多个模块的通用能力和资源提取为动态共享包,供其他模块或应用使用,减少了包体积。

◦原生ES Module规则:采用原生ES Module规则构建源码,解决了Bundle编译打包模式带来的问题,使资源文件可以以独立模块形式进行编译。

        通过这些优化,开发者在修改单个模块代码时,无需整包编译,减少了编译的代码量,加快了增量编译速度,从而提升了整体开发效率和体验。需要注意的是,模块化设计的复杂性可能增加管理成本,因此开发者需要平衡好模块化的粒度。

3. 降低应用包体积

◦配置so压缩选项减小应用包大小,在DevEco Studio中修改应用模块配置文件(如 module.json5 )中的 compressNativeLibs 字段,将其值设置为true。这样在打包应用时,so库文件将以压缩形式被打包到包中,从而减小应用包的大小

◦通过修改应用模块配置文件module.json5 中的compressNativeLibs字段为true来压缩原生库,从而进一步减少应用体积

◦使用压缩工具减小图片和音频文件的大小,并使用SVG等矢量格式代替位图图标。此外,删除项目中未被引用的资源文件也是优化资源文件的有效方法

◦共享代码和资源:通过HSP(Harmony Shared Package)共享代码和资源,避免重复,进一步优化应用的资源管理

◦启用混淆, HarmonyOS NEXT支持多种代码混淆工具,主要通过Gradle构建工具进行配置。在工程应用目录的gradle文件中设置minifyEnabled为true即可开启混淆。此外,HarmonyOS NEXT还支持ArkTS、TS和JS文件的混淆。在模块级的 build.gradle 文件中的 buildTypes 部分添加以下代码,确保在发布版本中启用混淆具体配置方法如下:

   buildTypes {release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt '), 'proguard-rules.pro'}}

4. 优化库管理加速构建

为了进一步优化长时间的构建我们还可以通过采用动态共享包(HSP)和静态共享包(HAR)的策略提升构建效率。动态共享包(HSP) 通过按需加载减少了不必要的编译时间,而静态共享包(HAR)在模块间实现了高效的资源共享。这些方法在实际项目中表现也足够出色,能够有效优化构建流程。

选择合适的共享包类型

▪当需要在应用内部进行代码和资源共享时,建议使用HSP。它可以包含代码、C++库、资源和配置文件,但不支持独立发布,需随宿主应用一起发布。HSP通过按需加载,减少不必要的编译时间,提高构建效率。

▪当共享包作为应用模块的依赖项被引用时,应选择HAR。它同样可以包含代码、C++库、资源和配置文件,适合用于通用组件的共享。HAR通过高效资源共享,优化了模块间的依赖管理,进一步缩短构建周期。

多任务窗口与依赖管理

▪在多任务窗口场景中,HSP通过与宿主应用同进程运行,实现了更高效的资源管理和调用。这种方式不仅减少了资源加载的延迟,还优化了内存使用,使应用在多任务环境下更流畅地运行。此外,按需加载的特性进一步提升了应用启动速度。

▪HAR在跨多个应用或模块的资源共享中表现出色。其模块化设计允许独立发布和管理,确保资源在不同应用间的高效共享。这种方法减少了重复资源的存在,降低了整体包体积,并简化了依赖管理,适合频繁更新和维护的复杂项目。通过优化资源的重用和依赖关系,提高构建效率。

懒加载技术的应用

▪懒加载技术(如LazyForEach),是一种按需加载数据或资源的策略。通过按需加载数据或资源,懒加载避免了在构建初期加载所有内容,从而减少了构建时间和资源消耗。这种方法有效降低了编译时的负担,使得构建过程更加高效。此外,懒加载减少了不必要的库加载,优化了依赖管理,进一步缩短了构建周期。

5. 性能可视化检验成果

使用Build Analyzer工具会在每次构建应用时默认生成一份报告,可以记录任务执行耗时、线程、ArkTS编译中的各环节的细分耗时情况等信息,开发者可以通过这些数据分析排查构建过程中的性能问题。

◦通过命令行生成构建分析

hvigorw assembleHap --analyze=normal --config properties.hvigor.analyzeHtml=true

◦通过hvigor-config.json5配置中properties.hvigor.analyzeHtml字段生成构建可视化html文件

"properties": { "hvigor.analyzeHtml": true // 生成构建可视化html文件 }

构建任务时间图谱,构建任务展示按照各个任务总时长占比,以相对长度进行展示。可以对时间块进行缩小放大,查看具体的任务名称及耗时信息。

6. 不止于此

通过一系列优化策略,我们显著提升了超级APP的构建效率。首先,通过模块化设计,将应用拆分为多个独立模块,减少了构建时的耦合,并提高了并行处理能力。其次,利用Hvigor的增量和并行编译特性,仅对代码变更部分进行编译,大幅缩短了构建时间。缓存机制的合理配置减少了重复数据加载,优化了资源访问速度。同时,压缩和混淆代码、优化图片和音频文件、删除未使用资源等措施有效减小了应用包体积。共享代码与懒加载技术进一步优化了资源管理。借助Build Analyzer工具,我们能够实时监控和分析构建过程,快速识别和解决性能瓶颈。除此之外,通过自定义插件和构建任务,我们灵活调整了构建流程,进一步提升了效率。这些措施不仅缩短了构建时间,还提高了开发效率和产品迭代速度,使开发团队能够更快速地响应市场需求和用户反馈,确保应用的高效交付和稳定性。

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

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

相关文章

使用 Docker 部署 RStudio 的终极教程

一.介绍 在现代数据科学和统计分析领域&#xff0c;RStudio 是一个广受欢迎的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为用户提供了强大的工具来编写、调试和可视化 R 代码。然而&#xff0c;传统的 RStudio 安装可能面临环境配置复杂、版本兼容性等问题。Docker…

2.4K star的GOT-OCR2.0:端到端OCR 模型

GOT-OCR2.0是一款新一代的光学字符识别&#xff08;OCR&#xff09;技术&#xff0c;标志着人工智能在文本识别领域的重大进步。作为一款开源模型&#xff0c;GOT-OCR2.0不仅支持传统的文本和文档识别&#xff0c;还能够处理乐谱、图表以及复杂的数学公式&#xff0c;为用户提供…

报错解决方案

大模型-报错解决方案 百度千帆大模型 仅个人笔记使用&#xff0c;感谢点赞关注 百度千帆大模型 未开通付费模型 qianfan.errors.APIError: api return error, req_id: code: 17, msg: Open api daily request limit reached 可能的原因: 未开通所调用服务的付费权限&#xff0…

代码随想录算法day38 | 动态规划算法part11 | 1143.最长公共子序列,1035.不相交的线,53. 最大子序和,392.判断子序列

1143.最长公共子序列 体会一下本题和 718. 最长重复子数组 的区别 力扣题目链接(opens new window) 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的…

掌握Python自动化办公的3个核心技能,全是干货建议收藏

随着Python在办公自动化领域的广泛应用&#xff0c;掌握Python的相关技能变得越来越重要。本文将详细介绍Python在文件操作、数据处理以及Excel操作方面的核心技能&#xff0c;帮助读者提升工作效率。 掌握Python自动化办公的核心技能&#xff0c;主要包括以下几个方面&#x…

统信服务器操作系统进入【单用户模式】

统信服务器操作系统D版、E版、A版进入单用户模式的方式。 文章目录 前言一、问题现象二、问题原因三、解决方案1. D版问题解决方案2. E版及A版问题解决方案前言 D版又称企业版、E版又称欧拉版、A版又称龙蜥版。 单用户模式主要是在 grub2 引导时编辑内核引导,一般用于修改用…

828华为云征文 | 云服务器Flexus X实例,搭建ChatGpt:AI-OpenAI

828华为云征文 | 云服务器Flexus X实例&#xff0c;搭建ChatGpt&#xff1a;AI-OpenAI 搭建能AI-OpenAI 1、购买华为云 Flexus X 实例 Flexus云服务器X实例-华为云 (huaweicloud.com) 2、安装 Docker 的必要依赖 yum install -y yum-utils device-mapper-persistent-data lvm2…

自恢复保险丝到底是什么?一篇文章足够让你了解清楚!!!

自恢复保险丝简介&#xff1a; 自恢复保险丝主要由核心材料高分子聚合物复合材料体组成&#xff0c;它是一种可反复使用的具有自恢复特性非线性的过流保护器件&#xff0c;聚合物复合材料体一般由聚合物、导电微粒、无机填料等组成。 自恢复保险丝是一种过流电子保护元件&#…

opencv-python学习笔记11-视频处理

目录 一、opencv视频处理的框架&#xff1a; 二、捕获视频类VideoCapture&#xff1a; &#xff08;1&#xff09;创建 VideoCapture 对象&#xff1a; &#xff08;2&#xff09;读取视频帧&#xff1a; &#xff08;3&#xff09;设置和获取视频属性&#xff1a; &#…

#联合体#

目录 定义 联合体的对齐方式 举个栗子&#x1f330; 联合体判断小端或大端 定义 联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff0c;地址一样&#xff08;所以联合也叫共用体&#xff09;。 联合体…

【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】

目录 【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】 1. 信息传递的奇迹:电化学信号的奥秘 2. 非线性动态交互:大脑的智慧之源 3. 结构与功能的鸿沟:从并行分布到有限层次 结语:探索未知的边界 【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】…

sql serve时间的比较:船舶是否在线,基站网络是否在线

文章目录 引言I 在线船舶查询在线或者离线船舶显示在线状态统计在线船舶II 基站网络是否在线III 知识扩展MyBatis引言 I 在线船舶 查询在线或者离线船舶 假定2个小时之内有报位的数据认为在线 查询7天之内有报位的离线船舶AND s.dwtime BETWEEN dateadd(day,-7,GETDATE()

怎么把excel翻译成英文?这些翻译技巧记得收藏

在处理Excel数据时&#xff0c;我们常常会遇到多语言的数据集&#xff0c;这无疑给数据分析和整理带来了不小的挑战。 幸运的是&#xff0c;随着技术的发展&#xff0c;现在有多种工具可以帮助我们进行Excel中的批量翻译&#xff0c;这些工具以其强大的翻译功能和便捷的操作方…

Unity 设计模式 之 行为型模式 -【访问者模式】【模板模式】【策略模式】

Unity 设计模式 之 行为型模式 -【访问者模式】【模板模式】【策略模式】 目录 Unity 设计模式 之 行为型模式 -【访问者模式】【模板模式】【策略模式】 一、简单介绍 二、访问者模式&#xff08;Visitor Pattern&#xff09; 1、什么时候使用访问者模式 2、使用访问者模…

这是一篇给Java小白看的JVM文章

文章目录 前言从 Java 的跨平台特性说起Java 跨平台的实现&#xff1a;JVMJVM 的定义跨平台问题说明从编码到运行 JVM 已成为规范JVM 的后续了解总结 前言 很多Java开发人员&#xff0c;还不清楚JVM是什么&#xff0c;就直接涉足JVM调优。 很多Java开发人员&#xff0c;说起J…

Deepgram推出新API:让跨语言交流不再是梦!

​ Deepgram 在人工智能飞速发展的今天&#xff0c;语音交互技术正在成为我们与机器沟通的主要方式。然而&#xff0c;现有的语音AI技术在速度、成本和对话质量等方面仍存在诸多问题。 为了解决这些痛点&#xff0c;语音识别领域的佼佼者Deepgram公司推出了一款全新的文本转语音…

精准运营,提升排名:亚马逊商品详情数据接口助力商家成长

一、接口重要性与作用 亚马逊商品详情数据接口是电商运营中不可或缺的桥梁&#xff0c;它连接着商家与消费者&#xff0c;承载着商品信息的精准传递与高效管理。通过此接口&#xff0c;商家能够实时获取并更新商品详情&#xff0c;从而显著提升运营效率&#xff0c;增强用户体…

如何用ComfyUI生成专业电商产品背景图?

如何用ComfyUI生成专业电商产品背景图——简单易用的工作流指南 随着电商行业的飞速发展&#xff0c;产品展示的质量直接影响到消费者的购买决策。而通过AI生成的背景图&#xff0c;不仅提升了图片的质感&#xff0c;还能节省大量后期处理时间。今天我们要介绍的是利用ComfyUI生…

idea上使用tomcat运行web项目

idea上使用tomcat运行web项目 首先需要安装tomcat&#xff0c;可以查看我上一篇文章 如果你已经配置tomcat&#xff0c;这里不需要改动。如果未配置&#xff0c;需要在这里选择你tomcat目录 修改下面的上下文&#xff0c;也就是网页上访问时http://localhost:8080/后面拼…

Linux c文件中创建一个由汇编代码构成的函数方法

c文件中经常使用asm完成嵌入式汇编&#xff0c;例如 #include <stdio.h>void a() {int result 0;int input 1;asm volatile ("movl %1, %0\n": "r"(result): "r"(input));printf("result %d\n", result);printf("input…