HarmonyOS开发实战( Beta5版)减小应用包大小

news2024/9/24 11:32:29

简介

减小应用包大小是提升应用下载、安装体验的重要方式之一。通过压缩、精简或者复用应用中的代码或资源,可以有效降低应用的大小,提升应用下载和安装速度,减少系统空间占用。

开发者可以参考下面三种方法减小应用包大小:

  • 配置so压缩选项,通过压缩so库来减小应用包大小。
  • 应用存在多包(HAP、HSP)的场景时,可以使用HSP(Harmony Shared Package)动态共享包在应用的多个包(HAP、HSP)之间共享代码和资源,消除使用HAR(Harmony Archive)静态共享包造成的多包(HAP、HSP)间代码和资源的重复拷贝,从而减小应用包大小。
  • 使用扫描工具扫描分析App、HAP、HSP包,根据输出的检测报告,采取相应措施优化应用。

减小应用包大小的方法

配置so压缩选项

当前DevEco Studio默认打包应用时不压缩so库文件,配置so压缩选项后,DevEco Studio会将so库文件以压缩形式打包到包中,从而减小应用包大小。

配置方法

修改应用模块配置文件module.json5中的compressNativeLibs字段,将值配置为true,重新编译、打包应用。

{
  "module": { 
    // ...
    "compressNativeLibs": true // 标识libs库以压缩存储方式打包
  }
}

so压缩效果

以DevEco Studio中C++默认库文件为例,压缩前后的文件大小对比如下:

文件名原始大小压缩后大小压缩率
armeabi-v7a/libc++_shared.so1,108k386k34%

多包场景下使用HSP共享代码和资源

当前系统提供了两种共享包,HAR(Harmony Archive)静态共享包和HSP(Harmony Shared Package)动态共享包。

HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C++库、资源和配置文件,最大的不同之处在于:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。

在多包场景下,如果应用的多个HAP或HSP包使用HAR包实现代码和资源的共享,那么打包后的每个HAP或HSP包中都会存在一份共享HAR包的拷贝,导致App包中存在冗余代码和资源。如下图示例,应用模块HAP1和HAP2/HSP1都引用了HAR2和HAR3,打包后,App包中HAR2和HAR3存在多份重复拷贝,体积较大。

多HAP引用HAR示意图

这种场景下,推荐开发者使用HSP代替HAR实现代码和资源共享。如下图示例,使用HSP2对原应用进行升级改造,打包后,App包中HAR2和HAR3只存在一份拷贝,HAR2、HAR3总大小大于HSP(11k)时,可以减小应用包大小。

多HAP引用HSP示意图

使用扫描工具分析应用包

扫描工具可用于分析检测应用包,根据不同的参数设定,扫描指定路径的App、HAP、HSP包内容并输出检测结果报告,为开发者优化包结构或排查问题提供数据支撑。目前扫描工具支持以下几种分析统计:

  • 扫描重复文件。
  • 扫描超出指定大小的文件。
  • 统计分析各类型文件的总大小和占比。

根据扫描结果按照如下方式优化应用

  1. 重复文件

    • 同一包内有重复资源,删除重复资源。
    • 多包(HAP、HSP)间重复资源,可以使用HSP实现资源的复用。
  2. 较大文件

    • 确认是否为应用必需,是否可删除。
    • JPG、PNG、GIF等文件,可以考虑压缩。
  3. 特定类型文件

    • so文件,通过配置so压缩选项来实现压缩打包。
    • JPG、PNG、GIF等文件,可以考虑压缩。

最后

小编在之前的鸿蒙系统扫盲中,有很多朋友给我留言,不同的角度的问了一些问题,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,因为资料太多,太杂,教授的人也多,无从选择。有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)文档用来跟着学习是非常有必要的。 

为了确保高效学习,建议规划清晰的学习路线,涵盖以下关键阶段:


 鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

2.视频学习教程+学习PDF文档

HarmonyOS Next 最新全套视频教程

  纯血版鸿蒙全套学习文档(面试、文档、全套视频等)       

​​

总结

参与鸿蒙开发,你要先认清适合你的方向,如果是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简单来说就是:为了确保高效学习,建议规划清晰的学习路线

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

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

相关文章

数据结构—栈和队列

栈 一、栈的概念及结构 栈(Stack)是一种特殊的线性表,其只允许在表的固定的一端进行插入和删除操作。 栈顶:进行插入数据和删除数据的一端。 栈底:相对于栈顶的另一端。 原则:栈的数据元素遵循后进先出…

【Python报错已解决】`TypeError`:`TypeError: not enough arguments for format string`

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 在Python编程中,TypeError是一个常见的错误类型,它表示在操作或函数调用中使用了错误的类型。本文…

服务器死机/无故宕机排查思路/服务器起不来

1、查看服务器型号 dmidecode -t system dmidecode | grep ‘Product Name’ 2、风扇异响:查看BMC,坏了一个风扇其他的所有的风扇会全速转。 3、服务器亮红灯 红灯就是 故障告警 不一定是啥需要查看BMC口日志。这种就是看bmc日志 会有打印的 -问题现象&a…

java中的反射Reflection

Java中的反射(Reflection)是一种强大的机制,它允许程序在运行时查询和操作对象的类型信息。通过反射API,程序可以动态地创建对象、调用方法、访问字段和构造函数等,即使在编译时这些信息是未知的。 反射的原理 反射的…

微软分享其首款定制人工智能芯片Maia 100的更多细节

在2023年Ignite大会期间,微软首次宣布其已开发出名为Maia的自主人工智能加速器芯片。今年早些时候,在Build开发者大会上,微软分享了其首个自主研发的人工智能加速器Azure Maia 100的更多细节。Maia 100 是台积电 5nm 节点上制造的最大处理器之…

深拷贝与浅拷贝的区别

浅拷贝会导致深层数据改变,而深拷贝不会改变任何数据。 简单说就是: 浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存。 深拷贝会创造一个一模一样的对象,新对象和原对象不共享内存&#x…

江协科技stm32————10-4 I2C通信协议

目录 I2C外设简介 I2C功能框图 基本结构图(一主多从) GPIO复用输入输出图 主机发送​编辑 START stop ​ EV5 (标志位) BTF 主机接收 ACK 软件/硬件波形对比 I2C外设简介 可变多主机模型11110作为10位地址模式的标志位…

「OC」初识MVC —— 简单学习UITableView的解耦

「OC」初识MVC —— 简单学习UITableView的解耦 文章目录 「OC」初识MVC —— 简单学习UITableView的解耦写在前面认识MVC解耦数据源代理 创建cell的基础类创建section的相关类分离数据源分离代理总结参考资料 写在前面 最近在学习了解MVC,然后开始发现&#xff0c…

VSCode连接SSH发生connection timeout

想用用实验室服务器连接vscode跑HM编码,今天突然连服务器连不到,报错:[13:47:13.068] Opening exec server for ssh-remotea406-server-lan [13:47:13.082] Initizing new exec server for ssh-remotea406-server-lan [13:47:13.089] Using c…

Apple LLM: 智能基础语言模型(AFM)

今天想和大家分享一下我最近在arXiv.org上看到苹果发表的一篇技术论文 Apple Intelligence Foundation Language Models (https://arxiv.org/abs/2407.21075),概述了他们的模型训练。这虽然出乎意料,但绝对是一个积极的惊喜! 这篇论文有那么多…

Dubbo如何传递链路追踪id?

1.什么是链路追踪? 分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。 链路跟踪主要功能: 故障快速定…

ET6框架(五)ECS组件式编程

文章目录 一、什么是ECS:二、ECS编程原则:三、组件生命周期: 一、什么是ECS: ECS即Entity、Component、System的简称,遵循组合优于继承的原则 Entity(实体) : 实体是一个概念,是指存在你游戏世界中的一个独立物体,是一…

图机器学习实战:从数据源到可视化

《动手学图机器学习》并不是一本纯粹介绍图机器学习理论的著作,Alessandro Negro 博士作为科学家和 Reco4 公司的 CEO,长期维护图数据源的推荐系统。他结合机器学习工程和图机器学习方法,通过推荐引擎、欺诈检测和知识图谱等案例,…

【书生2.4】InternLM + LlamaIndex RAG 实践

InternLM LlamaIndex RAG 实践 1 环境安装2 材料准备3 还原实验4 更换问题验证rag 【Intern Studio的gpu不足。本实验使用自有服务器】 1 环境安装 conda create -n llamaindex python3.10 conda activate llamaindex conda install pytorch2.0.1 torchvision0.15.2 torchau…

新160个crackme - 042-crackme

运行分析 提示需要key.dat文件 同目录下创建一个key.dat,提示key.dat内容不对 PE分析 C程序,32位,无壳 静态分析&动态调试 ida搜索字符串,找到关键字符串双击进入关键函数 对关键函数进行分析,注释如上当满足67行公…

信息安全数学基础(4)最大公因数

前言 在信息安全数学基础中,最大公因数(Greatest Common Divisor, GCD)是一个核心概念,它在密码学、数论等多个领域都有广泛应用。以下是对最大公因数的详细阐述: 一、定义 设a和b是两个非零整数,若整数d同…

论文阅读——Compact Single-Feed Dual-Mode Antenna for Active RFID Tag Application

文章目录 摘要一、天线设计A. 天线结构B. 天线演进 二、天线仿真与测试总结 论文来源:https://ieeexplore.ieee.org/document/7247651 摘要 文章提出了一种用于主动射频识别(RFID)标签应用的紧凑型单馈双模天线。该天线由一个位于FR4基板上的…

【读点论文】Scene Text Detection and Recognition: The Deep Learning Era

Scene Text Detection and Recognition: The Deep Learning Era Abstract 随着深度学习的兴起和发展,计算机视觉发生了巨大的变革和重塑。场景文本检测与识别作为计算机视觉领域的一个重要研究领域,不可避免地受到了这波革命的影响,从而进入…

ARM32开发——(二十一)ADC系统工作原理

1. ADC硬件结构 内部结构简化框图 2. ADC转换模式 2.1 单次转换,非扫描模式 2.2 连续转换,非扫描模式 2.3 单次转换,扫描模式 2.4 连续转换,扫描模式 3. 规则组和注入组 4. ADC数据对齐 5. ADC转换时间 总转换时间采样时间12 个 CK_ADC 周期 6. ADC内部校准 ADC有一个内置自…

前端速通面经八股系列(六)—— Vue(下)

接上ueue Vue下篇 四、路由1. Vue-Router 的懒加载如何实现2. 路由的hash和history模式的区别1. hash模式2. history模式3. 两种模式对比 3. 如何获取页面的hash变化4. $route 和$router 的区别5. 如何定义动态路由?如何获取传过来的动态参数?6. Vue-rou…