鸿蒙性能优化之包体积优化

202 阅读3分钟

一、简介

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

二、减小包体积的方法

2、1 配置so压缩选项

  当前DevEco Studio默认打包应用时不压缩so库文件,配置so压缩选项后,DevEco Studio会将so库文件以压缩形式打包到包中,从而减小应用包大小。修改应用模块配置文件module.json5中的compressNativeLibs字段,将值配置为true,重新编译、打包应用。

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

2、2 删除重复依赖

  对于ohpm 1.5.0之前的版本,如果hap依赖了不同版本的har,在打包hap时,默认会两个版本的har都打包到包中。开发者可以使用ohpm的override机制,指定只打包一份。overrides 必须配置在项目级别的 oh-package.json5 中,配置在模块级别的 oh-package.json5 中将不会生效。

{
    "overrides": {
        "foo": "1.0.0"
    }
}

  若本地存在源码或者HAR包,想确保始终使用本地的版本,可以在项目级的oh-package.json5中这样配置:

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

  对于1.5.0 版本之后的ohpm,可以通过开启resolve_conflict自动解决依赖冲突,依赖冲突的处理策略为:当项目同时依赖了某个三方库的不同版本时,ohpm将选择其中的最高版本进行安装。

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

  当前系统提供了两种共享包,HAR静态共享包和HSP动态共享包。HAR与HSP都是为了实现代码和资源的共享,最大的不同之处在于:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,在运行时进程中代码和资源也只会存在一份。如果应用的多个HAP或HSP包使用HAR包实现代码和资源的共享,那么打包后的每个HAP或HSP包中都会存在一份共享HAR包的拷贝,导致App包中存在冗余代码和资源。

  在这种情况下,可以将相同的har放入到公共库hsp中,让hap或者hsp依赖公共库hsp。打包后,相同的har就只有一份。

2、4 按需分发

  对于应用中用户不常用的功能,可以考虑通过按需分发的方式,将下载时机交由用户选择,使用时从应用市场获取安装,减少用户初次下载的包大小。

三、扫描工具

  扫描工具可用于分析检测应用包,根据不同的参数设定,扫描指定路径的App、HAP、HSP包内容并输出检测结果报告,为开发者优化包结构或排查问题提供数据支撑。扫描工具app_check_tool.jar需要从SDK路径下的toolchains目录中获取。工具扫描结果默认以JSON和HTML两种文件格式输出。更多具体信息可查看扫描工具