1# 减小应用包大小
2
3## 简介
4
5减小应用包大小是提升应用下载、安装体验的重要方式之一。通过压缩、精简或者复用应用中的代码或资源,可以有效降低应用的大小,提升应用下载和安装速度,减少系统空间占用。
6
7开发者可以参考下面三种方法减小应用包大小:
8
9 - 配置so压缩选项,通过压缩so库来减小应用包大小。
10 - 应用存在多包(HAP、HSP)的场景时,可以使用[HSP(Harmony Shared Package)](../quick-start/in-app-hsp.md)动态共享包在应用的多个包(HAP、HSP)之间共享代码和资源,消除使用[HAR(Harmony Archive)](../quick-start/har-package.md)静态共享包造成的多包(HAP、HSP)间代码和资源的重复拷贝,从而减小应用包大小。
11 - 使用扫描工具扫描分析App、HAP、HSP包,根据输出的检测报告,采取相应措施优化应用。
12
13## 减小应用包大小的方法
14
15### 配置so压缩选项
16
17当前DevEco Studio默认打包应用时不压缩so库文件,配置so压缩选项后,DevEco Studio会将so库文件以压缩形式打包到包中,从而减小应用包大小。
18
19**配置方法**
20
21修改应用模块配置文件module.json5中的[compressNativeLibs](../quick-start/module-configuration-file.md)字段,将值配置为true,重新编译、打包应用。
22
23```json
24{
25  "module": {
26    // ...
27    "compressNativeLibs": true // 标识libs库以压缩存储方式打包
28  }
29}
30```
31
32**so压缩效果**
33
34以DevEco Studio中C++默认库文件为例,压缩前后的文件大小对比如下:
35
36| 文件名                                  | 原始大小       | 压缩后大小     | 压缩率  |
37| --------------------------------------- |---------------| -------------- | ----  |
38| armeabi-v7a/libc++_shared.so            |1,108k         |386k             | 34%  |
39
40### 多包场景下使用HSP共享代码和资源
41
42当前系统提供了两种共享包,[HAR(Harmony Archive)](../quick-start/har-package.md)静态共享包和[HSP(Harmony Shared Package)](../quick-start/in-app-hsp.md)动态共享包。
43
44HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C++库、资源和配置文件,最大的不同之处在于:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。
45
46在多包场景下,如果应用的多个HAP或HSP包使用HAR包实现代码和资源的共享,那么打包后的每个HAP或HSP包中都会存在一份共享HAR包的拷贝,导致App包中存在冗余代码和资源。如下图示例,应用模块HAP1和HAP2/HSP1都引用了HAR2和HAR3,打包后,App包中HAR2和HAR3存在多份重复拷贝,体积较大。
47
48![多HAP引用HAR示意图](./figures/reduce-package-size-har.PNG)
49
50这种场景下,推荐开发者使用HSP代替HAR实现代码和资源共享。如下图示例,使用HSP2对原应用进行升级改造,打包后,App包中HAR2和HAR3只存在一份拷贝,HAR2、HAR3总大小大于HSP(11k)时,可以减小应用包大小。
51
52![多HAP引用HSP示意图](./figures/reduce-package-size-hsp.PNG)
53
54### 使用扫描工具分析应用包
55
56[扫描工具](../tools/app-check-tool.md)可用于分析检测应用包,根据不同的参数设定,扫描指定路径的App、HAP、HSP包内容并输出检测结果报告,为开发者优化包结构或排查问题提供数据支撑。目前扫描工具支持以下几种分析统计:
57
58- 扫描重复文件。
59- 扫描超出指定大小的文件。
60- 统计分析各类型文件的总大小和占比。
61
62根据扫描结果按照如下方式优化应用
63
641. 重复文件
65    - 同一包内有重复资源,删除重复资源。
66    - 多包(HAP、HSP)间重复资源,可以使用HSP实现资源的复用。
67
682. 较大文件
69    - 确认是否为应用必需,是否可删除。
70    - JPG、PNG、GIF等文件,可以考虑压缩。
71
723. 特定类型文件
73    - so文件,通过配置so压缩选项来实现压缩打包。
74    - JPG、PNG、GIF等文件,可以考虑压缩。