鸿蒙Next之包体积极限优化
鸿蒙应用包大小优化全解析
在鸿蒙应用开发中,减小应用包大小对于提升应用下载和安装体验起着关键作用。通过压缩、精简或复用应用中的代码与资源,能有效降低包体积,减少空间占用并加快下载与安装速度。下面详细介绍一下鸿蒙应用包大小优化的方法与策略。
一、了解 HarmonyOS 应用程序包结构
在着手优化包大小之前,深入理解 HarmonyOS 应用的程序包结构是必不可少的。这为后续精准定位和优化包内元素奠定了基础。
二、扫描工具助力分析
可借助扫描工具对 App 包进行扫描分析。依据不同参数设定,扫描指定路径的 App、HAP、HSP 包内容,输出检测结果报告。这一报告能为开发者优化包结构和排查问题提供有力的数据支撑。
扫描工具的详细介绍见
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-check-tool-V5
三、优化应用包大小的具体方法
(一)配置 so 库压缩选项
对于含有 so 库的 app 工程,DevEco Studio 默认打包时不压缩 so 库文件。我们可通过修改应用模块配置文件 module.json5 中的 compressNativeLibs 字段为 true,重新编译、打包应用,使 so 库文件以压缩形式打包到包中。以 DevEco Studio 中 C++默认库文件为例,如 armeabi - v7a/libc++_shared.so,原始大小 1108k,压缩后仅 386k,压缩率达 34%,显著减小了应用包大小。
(二)解决依赖减少依赖包重复编译
在 ohpm 1.5.0 之前版本,如果 hap 依赖了不同版本的 har,打包时会默认将多个版本都打包进包中。开发者可使用 override 机制指定只打包一份。在项目级别的 oh - package.json5 文件中添加 overrides 配置,可将依赖树中的依赖替换为指定版本,版本可以是具体版本号,也可以是本地的 HAR 包或源码目录。需注意,overrides 必须配置在项目级别的 oh - package.json5 中才生效。例如,若要始终安装 foo 的 1.0.0 版本,可配置为
{"overrides": {"foo": "1.0.0"}}
若本地存在 foo 的源码或 HAR 包并想使用本地版本,可按相应格式配置。而对于 1.5.0 版本之后的 ohpm,开启 resolve_conflict 可自动解决依赖冲突,策略是选择同时依赖的三方库的最高版本进行安装。
{"overrides": {// 本地存在"foo"的源码目录,如项目根目录下的foo目录// "foo": "file:./foo" // 本地存在"foo"的HAR文件,如项目根目录下的libs目录中的foo.har"foo": "file:./libs/foo.har"}}
(三)按需分发功能模块
针对应用中用户不常用的功能,采用按需分发方式。将其下载时机交由用户选择,使用时再从应用市场获取安装,从而有效减少用户初次下载的包大小。
(四)多包场景下使用 HSP 共享代码和资源
系统提供了 HAR 静态共享包和 HSP 动态共享包。HAR 中的代码和资源跟随使用方编译,多使用方会产生多份相同拷贝;HSP 中的代码和资源可独立编译,运行时进程中只会存在一份。在多包场景下,如果应用的多个 HAP 或 HSP 包使用 HAR 包共享代码和资源,打包后会存在冗余代码和资源。此时推荐使用 HSP 代替 HAR,可减少 App 包中的冗余,当 HAR2、HAR3 总大小大于 HSP 时,能有效减小应用包大小。
(五)针对扫描结果的优化
- 重复文件处理
- 同一包内若有重复资源,直接删除重复资源。
- 多包(HAP、HSP)间存在重复资源时,可使用 HSP 实现资源复用。
- 较大文件处理
- 首先确认文件是否为应用必需,若非必需则考虑删除。
- 对于 JPG、PNG、GIF 等文件,可采用压缩图片的方式减小文件大小。
- 特定类型文件处理(so 文件)
通过配置 so 库压缩选项来实现压缩打包,如前文所述的在 module.json5 中配置 compressNativeLibs 字段。
{"module": { // ..."compressNativeLibs": true // 标识libs库以压缩存储方式打包}
}
相关文章:
鸿蒙Next之包体积极限优化
鸿蒙应用包大小优化全解析 在鸿蒙应用开发中,减小应用包大小对于提升应用下载和安装体验起着关键作用。通过压缩、精简或复用应用中的代码与资源,能有效降低包体积,减少空间占用并加快下载与安装速度。下面详细介绍一下鸿蒙应用包大小优化的…...
Android实战经验篇-log工具
详细代码实现及系列文章请转如下链接 Android实战经验篇-系列文章汇总 Android Display Graphics系列文章-汇总 一、基础知识 1.1 Logging简述 我们写的第一个计算机C程序一般是printf(“Hello world!”);这就是一个log输出。Linux内核有Kernel log以及配套的Log工具&#x…...
DPU编程技术解析与实践应用
一、引言 1.1 研究背景与目的 随着信息技术的飞速发展,数据中心在现代社会中的地位日益凸显,成为支撑各行业数字化转型的关键基础设施。在数据中心内部,数据的处理速度、效率和安全性成为了影响整体性能的核心要素。为了应对不断增长的数据…...
红帽认证的含金量和价值如何?怎么报名红帽认证考试?
红帽企业 Linux(RHEL)是由红帽公司提供的一款商业支持、专为生产环境设计的Linux发行版。随着IT系统和工作负载日益复杂化,底层基础设施及操作系统必须兼具可靠性、可扩展性,并能有效促进性能提升。红帽认证在全球范围享有盛誉&am…...
VS Code Copilot 与 Cursor 对比
选手简介 VS Code Copilot:算是“老牌”编程助手了,虽然Copilot在别的编辑器上也有扩展,不过体验最好的还是VS Code,毕竟都是微软家的所以功能集成更好一些;主要提供的是Complete和Chat能力,也就是代码补全…...
蓝桥杯嵌入式备赛教程(1、led,2、lcd,3、key)
一、工程模版创建流程 第一步 创建新项目 第二步 选择型号和管脚封装 第三步 RCC使能 外部时钟,高速外部时钟 第四步晶振时钟配置 由数据手册7.1可知外部晶振频率为24MHz 最后一项设置为80 按下回车他会自动配置时钟 第五步,如果不勾选可能程序只会…...
取多个集合的交集
1.我们取多个集合的交集,先把各个集合放入list中 List < Set < String > > listnew ArrayList<>();HashSet<String> set1new HashSet<>();set1.add( "A" );set1.add("B" );set1.add("C" );HashSet<…...
如何实现电子发票XML文件的合规性存档?
随着国家税务改革的推进,企业对电子发票的管理和存档要求越来越高。尤其是《财政部 国家税务总局关于进一步深化增值税发票管理改革的通知》(财会〔2023〕18号文)的发布,明确规定了电子发票的存档要求。这为企业在财务管理中的电子…...
IOT、MES、WMS、MOM 和 EPMS 系统综合技术与业务文档
IOT、MES、WMS、MOM 和 EPMS 系统综合技术与业务文档 一、引言 在现代制造业和工业管理领域,IOT(物联网)、MES(制造执行系统)、WMS(仓库管理系统)、MOM(制造运营管理系统ÿ…...
IntelliJ IDEA Docker集成
一、概述 Docker是一种用于在隔离和可复制环境中部署和运行可执行文件的工具。这可能很有用,例如,在与生产相同的环境中测试代码。 IntelliJ IDEA集成了Docker功能,并为创建Docker映像、运行Docker容器、管理Docker Compose应用程序、使用公…...
【react项目】从零搭建react项目[nodejs安装]
〇、模板git下载地址 下载即用的模板地址: http:https://e.coding.net/uijiio/init_app/react_init_app.git ssh:gite.coding.net:uijiio/init_app/react_init_app.git 目前更新至:登录与主页跳转,主页包含菜单和容器区 一、搭建基础空白React项目 1.准备…...
【专题】2024年悦己生活消费洞察报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p38654 在当今时代背景下,社会发展日新月异,人们的生活方式与消费观念正经历深刻变革。MoonFox 月狐数据的《2024 年悦己生活消费洞察报告》聚焦于这一充满活力与变化的消费领域。随着就业、婚姻等社会压力的…...
Github——网页版上传文件夹
第一步:创建一个新的仓库或进入已存在的仓库页面 第二步:点进对应的文件夹下,然后 点击 “Upload files” 第三步:将文件夹拖拽到上传区域 打开资源管理器,将要上传的文件夹从计算机中拖拽到上传区域。 注意…...
LMDeploy 量化部署进阶实践
1 配置LMDeploy环境 1.1 InternStudio开发机创建与环境搭建 打开InternStudio平台,进入如下界面创建环境 在终端中,让我们输入以下指令,来创建一个名为lmdeploy的conda环境,python版本为3.10,创建成功后激活环境并安…...
MFC/C++学习系列之简单记录9——简单加法
MFC/C学习系列之简单记录9——简单加法 前言界面设计控件添加添加变量添加事件 后台代码总结 前言 基本的一些使用已经了解,那么就做个简单的加法来练手吧! 界面设计 控件添加 在工具箱中选择Edit control和Static Text两个控件,分别设置为…...
二分查找题目:两球之间的磁力
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:两球之间的磁力 出处:1552. 两球之间的磁力 难度 5 级 题目描述 要求 在代号为地球 C-137 的世界中,Rick 发现如果他将两个…...
OpenCV相机标定与3D重建(28)估计两个三维点集之间的最优平移变换函数estimateTranslation3D()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算两个3D点集之间的最优平移。 它计算 [ x y z ] [ X Y Z ] [ b 1 b 2 b 3 ] \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix} \begin{bmatri…...
UE5仿漫威争锋灵蝶冲刺技能
这两天玩了一下漫威争锋Marvel Rivals,发现是UE5做的,对里面一些角色技能挺感兴趣的,想简单复刻一下技能功能,顺便复习一下学过的知识 首先把摄像机设置调整一下 CameraBoom里搜索lag 把摄像机延迟关掉 ,这样摄像机就…...
CSS盒子模型(溢出隐藏,块级元素和行级元素的居中对齐,元素样式重置)
overflow:值 规定了内容溢出元素框时所发生的事情 visible:内容不会被修剪,会显示在元素框之外,默认值 overflow: visible; hidden:内容会被修剪,溢出内容不可见 overflow: hidden; scroll:内…...
语音增强的损失函数选择
一、最优尺度不变信噪比(OSISNR)损失函数 参考:论文解读 --Optimal scale-invariant signal-to-noise ratio and curriculum learning for monaural multi-spea 最优尺度不变信噪比(OSI-SNR)是一种用于评估信号质量…...
5个自动驾驶开发者必备的行人轨迹预测数据集(含ETH/UCY实测对比)
5个自动驾驶开发者必备的行人轨迹预测数据集(含ETH/UCY实测对比) 行人轨迹预测是自动驾驶系统中的关键技术之一。准确预测行人未来几秒内的移动路径,能显著提升自动驾驶车辆的安全性和舒适性。对于算法工程师而言,选择合适的数据集…...
音乐格式转换全攻略:QMCDecode破解QQ音乐加密文件处理难题
音乐格式转换全攻略:QMCDecode破解QQ音乐加密文件处理难题 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默…...
计算机毕业设计springboot安龙四中网站 基于Spring Boot框架的中学数字化校园门户系统开发 基于Java Web技术的安龙四中智慧校园综合服务平台构建
计算机毕业设计springboot安龙四中网站lh3pp0i6 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着教育信息化2.0行动的深入推进,中小学校园信息化建设已成为提升教…...
SEO_长期有效的SEO策略与持续优化技巧分享
SEO:长期有效的SEO策略与持续优化技巧分享 在当今数字化时代,搜索引擎优化(SEO)是每个网站主人和数字营销人员必须掌握的技能之一。无论你是新手还是有经验的SEO专家,长期有效的SEO策略和持续优化技巧都是提升网站排名、增加流量的…...
如何基于dify智能客服系统实现高效对话管理:架构设计与性能优化实战
如何基于dify智能客服系统实现高效对话管理:架构设计与性能优化实战 在构建智能客服系统的实践中,我们常常面临一个核心矛盾:用户期望获得类人的、流畅的多轮对话体验,而系统后端却要处理海量并发、精准理解意图并维持复杂的对话状…...
政务系统上线倒计时48小时!MCP连接器离线模式应急方案首次公开,含国密SM4双向认证完整链路
第一章:政务系统MCP连接器离线模式应急方案全景概览当政务系统核心网络链路中断、MCP(Multi-Channel Protocol)中心服务不可达或安全策略强制隔离时,本地业务连续性面临严峻挑战。本方案聚焦于“连接器离线自治”能力构建…...
yfinance高效工具实战指南:从数据获取到智能分析
yfinance高效工具实战指南:从数据获取到智能分析 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance 在当今数据驱动的世界,获取准确、及时的金融市场数据对于…...
ai辅助开发:快马生成tailscale配置助手,并通过exposure功能实现团队共享
最近在团队协作开发时,遇到了一个很实际的问题:我们需要频繁配置Tailscale网络中的各种服务访问权限,但每次编写ACL规则都要反复查阅文档,效率很低。于是尝试用InsCode(快马)平台的AI能力,做了一个能自动生成配置建议的…...
微软MOS认证,这些考生满分通过了~
🎉🎉🎉喜讯喜讯!上周六的一场MOS考试中,竟然有六位同学拿到了满分,分别是:zhan**,zhou**,li**,shen*,wang**,zheng**...
Ostrakon-VL-8B开源模型社区贡献指南:问题反馈与代码提交
Ostrakon-VL-8B开源模型社区贡献指南:问题反馈与代码提交 开源社区的力量,在于无数开发者的智慧汇聚。Ostrakon-VL-8B作为一个强大的视觉语言模型,它的成长与完善,离不开每一位使用者的反馈和贡献。你可能在部署或使用过程中发现…...
