• 作者:老汪软件技巧
  • 发表时间:2024-12-21 21:07
  • 浏览量:

鸿蒙应用包大小优化全解析

鸿蒙应用开发中,减小应用包大小对于提升应用下载和安装体验起着关键作用。通过压缩、精简或复用应用中的代码与资源,能有效降低包体积,减少空间占用并加快下载与安装速度。下面详细介绍一下鸿蒙应用包大小优化的方法与策略。

一、了解 HarmonyOS 应用程序包结构

在着手优化包大小之前,深入理解 HarmonyOS 应用的程序包结构是必不可少的。这为后续精准定位和优化包内元素奠定了基础。

二、扫描工具助力分析

可借助扫描工具对 App 包进行扫描分析。依据不同参数设定,扫描指定路径的 App、HAP、HSP 包内容,输出检测结果报告。这一报告能为开发者优化包结构和排查问题提供有力的数据支撑。扫描工具的详细介绍见

/consumer/cn…

三、优化应用包大小的具体方法(一)配置 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" 

win7服务极限优化_极限竞速地平线3优化差_

// 本地存在"foo"的HAR文件,如项目根目录下的libs目录中的foo.har "foo": "file:./libs/foo.har" } }

(三)按需分发功能模块

针对应用中用户不常用的功能,采用按需分发方式。将其下载时机交由用户选择,使用时再从应用市场获取安装,从而有效减少用户初次下载的包大小。

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

系统提供了 HAR 静态共享包和 HSP 动态共享包。HAR 中的代码和资源跟随使用方编译,多使用方会产生多份相同拷贝;HSP 中的代码和资源可独立编译,运行时进程中只会存在一份。在多包场景下,如果应用的多个 HAP 或 HSP 包使用 HAR 包共享代码和资源,打包后会存在冗余代码和资源。此时推荐使用 HSP 代替 HAR,可减少 App 包中的冗余,当 HAR2、HAR3 总大小大于 HSP 时,能有效减小应用包大小。

(五)针对扫描结果的优化

重复文件处理

较大文件处理

特定类型文件处理(so 文件)通过配置 so 库压缩选项来实现压缩打包,如前文所述的在 module.json5 中配置 compressNativeLibs 字段。

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


上一条查看详情 +c++ 判断基类指针指向的真实对象类型
下一条 查看详情 +没有了