• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 打包工具
2<!--Kit: Ability Kit-->
3<!--Subsystem: BundleManager-->
4<!--Owner: @jsjzju-->
5<!--Designer: @jsjzju-->
6<!--Tester: @lixueqing513-->
7<!--Adviser: @Brilliantry_Rui-->
8
9打包工具用于在程序编译完成后,对编译出的文件等进行打包,以供安装发布。开发者可以使用DevEco Studio进行打包,也可使用打包工具的JAR包进行打包,JAR包通常存放在SDK路径下的toolchains目录中。
10
11打包工具支持生成:Ability类型的模块包(HAP)、动态共享包(HSP)、应用程序包(App)、快速修复模块包(HQF)、快速修复包(APPQF)。
12
13打包指令中的文件来源于[DevEco Studio编译构建产物](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-compile-build),文件路径查看操作如下。<br/>
141. 在DevEco Studio工程根目录下的/hvigor/hvigor-config.json5文件中,修改"logging"下的"level"字段为"debug"。<br/>
152. 在DevEco Studio菜单栏,依次选择"构建 -> 清理项目"。<br/>
163. 在DevEco Studio菜单栏,依次选择"构建 -> 构建APP(s)"。<br/>
174. 在DevEco Studio底部"构建"窗口,搜索"app_packing_tool.jar",确认打包参数中文件的路径。<br/>
18
19打包工具会对module.json文件属性进行合法性校验。module.json文件是编译构建产物,其属性值在编译构建时自动生成,与配置文件中配置项对应关系如下。
20
21**表1** module.json与配置文件属性的对照表
22
23| module.json属性          | [module.json5](../quick-start/module-configuration-file.md#配置文件标签)配置项         | [app.json5](../quick-start/app-configuration-file.md#配置文件标签)配置项            | [工程级build-profile.json5](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-build-profile-app)配置项  |
24| ------------------------ | ------------------------ | -------------------------- | --------------------------       |
25| bundleName               | -                        | bundleName                 | -                                |
26| bundleType               | -                        | bundleType                 | -                                |
27| versionCode              | -                        | versionCode                | -                                |
28| debug                    | -                        | debug                      | -                                |
29| module/name              | module/name              | -                          | -                                |
30| minCompatibleVersionCode | -                        | minCompatibleVersionCode   | -                                |
31| minAPIVersion            | -                        | minAPIVersion              | compatibleSdkVersion             |
32| targetAPIVersion         | -                        | targetAPIVersion           | targetSdkVersion/compileSdkVersion  <br/>说明:targetSdkVersion存在时,targetAPIVersion由targetSdkVersion决定;<br/>否则,targetAPIVersion由compileSdkVersion决定。               |
33
34## 约束与限制
35
36- 打包工具需要运行在Java8及其以上环境。
37- 打包指令中参数和参数值需成对出现。例如,HAP打包指令中--resources-path \<path>,其中--resources-path为指令参数,path为参数值,两者需要同时出现。
38
39## HAP打包指令
40
41开发者可以使用打包工具的JAR包对模块进行打包,通过传入打包选项、文件路径,生成所需的HAP包。
42
43**打包HAP时的压缩规则:**
44- 应用配置compressNativeLibs为true时,会按照--compress-level设置的压缩等级对--lib-path指定目录下的文件进行压缩。
45- 出于运行时性能等考量,--lib-path指定目录外的文件不会进行压缩。
46
47示例:
48- [Stage模型](../../application-dev/application-models/application-models.md#应用模型概况)示例:
49
50
51    ```
52    java -jar app_packing_tool.jar --mode hap --json-path <path> [--resources-path <path>] [--ets-path <path>] [--index-path <path>] [--pack-info-path <path>] [--lib-path <path>] --out-path <path> [--force true] [--compress-level 5] [--pkg-context-path <path>] [--hnp-path <path>]
53    ```
54
55- [FA模型](../../application-dev/application-models/application-models.md#应用模型概况)示例:
56
57
58    ```
59    java -jar app_packing_tool.jar --mode hap --json-path <path> [--maple-so-path <path>] [--profile-path <path>] [--maple-so-dir <path>] [--dex-path <path>] [--lib-path <path>] [--resources-path <path>] [--index-path <path>] --out-path <path> [--force true] [--compress-level 5]
60    ```
61
62**表2** HAP打包指令参数说明
63
64| 指令             | 是否必选项 | 选项          | 描述                                                         | 备注            |
65| ---------------- | ---------- | ------------- | ------------------------------------------------------------ | --------------- |
66| --mode           | 是         | hap           | 打包类型。                                                   | NA              |
67| --json-path      | 是         | NA            | .json文件路径。FA模型文件名必须为config.json;Stage模型文件名必须为module.json。 | NA              |
68| --profile-path   | 否         | NA            | CAPABILITY.profile文件路径。                                 | NA              |
69| --maple-so-path  | 否         | NA            | maple so文件输入路径,so文件路径,文件名必须以.so为后缀。如果是多个so需要用“,”分隔。 | NA              |
70| --maple-so-dir   | 否         | NA            | maple so目录输入路径。                                       | NA              |
71| --dex-path       | 否         | NA            | dex文件路径,文件名必须以.dex为后缀。如果是多个dex需要用“,”分隔。 <br/>dex文件路径也可以为目录。 | NA              |
72| --lib-path       | 否         | NA            | lib库文件路径。                                              | NA              |
73| --resources-path | 否         | NA            | resources资源包路径。                                        | NA              |
74| --index-path     | 否         | NA            | .index文件路径,文件名必须为resources.index。                | NA              |
75| --pack-info-path | 否         | NA            | pack.info文件路径,文件名必须为pack.info。                   | NA              |
76| --rpcid-path     | 否         | NA            | rpcid.sc文件路径,文件名必须为rpcid.sc。                     | NA              |
77| --js-path        | 否         | NA            | 存放js文件目录路径。                                         | 仅Stage模型生效。 |
78| --ets-path       | 否         | NA            | 存放ets文件目录路径。                                        | 仅Stage模型生效。 |
79| --out-path       | 是         | NA            | 目标文件路径,文件名必须以.hap为后缀。                       | NA              |
80| --force          | 否         | true或者false | 默认值为false。如果为true,表示当目标文件存在时,强制删除。  | NA              |
81| --an-path        | 否         | NA            | 存放[an文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkts-52-V5)的路径。| 仅stage模型生效。 |
82| --ap-path        | 否         | NA            | 存放[ap文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkts-52-V5)的路径。| 仅stage模型生效。 |
83| --dir-list       | 否         | NA            | 可指定目标文件夹列表,将其打入HAP包内。                      | NA              |
84| --compress-level | 否         | number        | lib库下文件压缩等级,默认值1。可选等级1-9。在应用配置compressNativeLibs参数为true的情况下生效,数值越大压缩率越高、压缩速度越慢。 | NA  |
85| --pkg-context-path      | 否         | NA            | 可指定语境信息表文件路径,文件名必须为pkgContextInfo.json。 | 仅Stage模型生效。              |
86| --hnp-path | 否 | NA | 指定native软件包文件路径,将native软件包打入HAP包内。 | NA |
87
88## HSP打包指令
89
90HSP包实现了多个HAP对文件的共享,开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的HSP包。
91
92**打包HSP时的压缩规则:**
93- 应用配置compressNativeLibs为true时,会按照--compress-level设置的压缩等级对--lib-path指定目录下的文件进行压缩。
94- 出于运行时性能等考量,--lib-path指定目录外的文件不会进行压缩。
95
96示例:
97```
98java -jar app_packing_tool.jar --mode hsp --json-path <path> [--resources-path <path>] [--ets-path <path>] [--index-path <path>] [--pack-info-path <path>] [--lib-path <path>] --out-path <path> [--force true] [--compress-level 5] [--pkg-context-path <path>]
99```
100
101**表3** HSP打包指令参数说明
102
103| 指令             | 是否必选项 | 选项          | 描述                                                         |
104| ---------------- | ---------- | ------------- | ------------------------------------------------------------ |
105| --mode           | 是         | hsp           | 打包类型。                                                   |
106| --json-path      | 是         | NA            | .json文件路径,文件名必须为module.json。                     |
107| --profile-path   | 否         | NA            | CAPABILITY.profile文件路径。                                 |
108| --dex-path       | 否         | NA            | 1. dex文件路径,文件名必须以.dex为后缀。如果是多个dex需要用“,”分隔。<br/>2. dex文件路径也可以为目录。 |
109| --lib-path       | 否         | NA            | lib库文件路径。                                              |
110| --resources-path | 否         | NA            | resources资源包路径。                                        |
111| --index-path     | 否         | NA            | .index文件路径,文件名必须为resources.index。                |
112| --pack-info-path | 否         | NA            | pack.info文件路径,文件名必须为pack.info。                   |
113| --js-path        | 否         | NA            | 存放js文件目录路径。                                         |
114| --ets-path       | 否         | NA            | 存放ets文件目录路径。                                        |
115| --out-path       | 是         | NA            | 目标文件路径,文件名必须以.hsp为后缀。                       |
116| --force          | 否         | true或者false | 默认值为false。如果为true,表示当目标文件存在时,强制删除。  |
117| --compress-level | 否         | number        | lib库下文件压缩等级,默认值1,可选等级1-9。在应用配置compressNativeLibs参数为true的情况下生效,数值越大压缩率越高、压缩速度越慢。 |
118| --pkg-context-path      | 否         | NA            | 可指定语境信息表文件路径,文件名必须为pkgContextInfo.json。 |
119
120## App打包指令
121
122开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的App包。App包用于上架应用市场。
123
124**表4** App打包合法性校验规则
125
126| HAP/HSPmodule.json中的被校验字段  | 校验规则                           |
127| --------------------------------- | --------------------------------- |
128| module下的name字段                | 要求所有HAP/HSP的name字段值均不相同。      |
129| bundleName                       | 要求所有HAP/HSP的bundleName字段值均保持一致。  |
130| bundleType                       | 要求所有HAP/HSP的bundleType字段值均保持一致。  |
131| versionCode                      | 要求所有HAP/HSP的versionCode字段值均保持一致。 |
132| debug                            | 从API version 20开始,要求所有HAP的debug字段值均保持一致,如果HAP的debug字段值为false,HSP的debug字段值也必须为false。如果HAP的debug字段值为true,对HSP的debug字段值无要求。<br/>对于API version 19及之前版本,要求所有HAP/HSP的debug字段值均保持一致。    |
133| minAPIVersion                    | 从API version 20开始,要求所有HAP的minAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 19及之前版本,要求所有HAP/HSP的minAPIVersion字段值均保持一致。    |
134| minCompatibleVersionCode         | 从API version 16开始,要求所有HAP的minCompatibleVersionCode字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 15及之前版本,要求所有HAP/HSP的minCompatibleVersionCode字段值均保持一致。    |
135| targetAPIVersion                 | 从API version 16开始,要求所有HAP的targetAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 15及之前版本,要求所有HAP/HSP的targetAPIVersion字段值均保持一致。    |
136| versionName                | 从API version 12开始,不再对versionName校验。      |
137
138> **说明:**
139>
140> - module.json文件为DevEco Studio编译构建产物,其中的字段与配置文件的对应关系,请参考[表1 module.json与配置文件属性的对照表](packing-tool.md)。
141
142**打包App时的压缩规则:** 打包App时,对release模式的HAP、HSP包会进行压缩,对debug模式的HAP、HSP包不会压缩。
143
144> **说明:**
145>
146> 若HAP/HSP中已压缩的so文件,在打包APP时再次压缩,将不会有明显体积缩减。
147
148示例:
149
150```
151java -jar app_packing_tool.jar --mode app [--hap-path <path>] [--hsp-path <path>] --out-path <path> [--signature-path <path>] [--certificate-path <path>] --pack-info-path <path> [--pack-res-path <path>] [--force true] [--encrypt-path <path>] [--pac-json-path <path>] [--atomic-service-entry-size-limit <size>] [--atomic-service-non-entry-size-limit <size>]
152```
153
154**表5** App打包指令参数说明
155
156| 指令                 | 是否必选项 | 选项          | 描述                                                           |
157|--------------------|-------|-------------|--------------------------------------------------------------|
158| --mode             | 是     | app         | 多个HAP需满足HAP的合法性校验。                                           |
159| --hap-path         | 否     | NA          | HAP包文件路径,文件名必须以.hap为后缀。如果是多个HAP包需要用“,”分隔。<br/>HAP包文件路径也可以是目录。 |
160| --hsp-path         | 否     | NA          | HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要用“,”分隔。<br/>HSP包文件路径也可以是目录。 |
161| --pack-info-path   | 是     | NA          | 文件名必须为pack.info。                                             |
162| --out-path         | 是     | NA          | 目标文件路径,文件名必须以.app为后缀。                                        |
163| --signature-path   | 否     | NA          | 签名路径。                                                        |
164| --certificate-path | 否     | NA          | 证书路径。                                                        |
165| --pack-res-path    | 否     | NA          | pack.res快照文件路径。                                 |
166| --force            | 否     | true或者false | 默认值为false。如果为true,表示当目标文件存在时,强制删除。                           |
167| --encrypt-path     | 否     | NA          | 文件名必须为encrypt.json 。                           |
168| --pac-json-path     | 否     | NA          | pac.json文件路径,文件名必须为pac.json。<br/>从API Version 20开始支持该参数。|
169| --atomic-service-entry-size-limit      | 否         | NA            | 设置元服务entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。                       |
170| --atomic-service-non-entry-size-limit  | 否         | NA            | 设置元服务非entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。                     |
171
172
173
174## 多工程打包指令
175
176多工程打包适用于多个团队开发同一个应用,但不方便共享代码的情况。开发者通过传入已经打好的HAP、HSP和App包,将多个包打成一个最终的App包,并上架应用市场。
177
178**表6** 多工程打包合法性校验规则
179
180| HAP/HSPmodule.json中的被校验字段  | 校验规则                           |
181| --------------------------------- | --------------------------------- |
182| module下的name字段                | 要求所有HAP/HSP的name字段值均不相同。      |
183| bundleName                       | 要求所有HAP/HSP的bundleName字段值均保持一致。  |
184| bundleType                       | 要求所有HAP/HSP的bundleType字段值均保持一致。  |
185| versionCode                      | 要求所有HAP/HSP的versionCode字段值均保持一致。 |
186| debug                            | 从API version 20开始,要求所有HAP的debug字段值均保持一致,如果HAP的debug字段值为false,HSP的debug字段值也必须为false。如果HAP的debug字段值为true,对HSP的debug字段值无要求。<br/>对于API version 19及之前版本,要求所有HAP/HSP的debug字段值均保持一致。    |
187| minAPIVersion                    | 从API version 20开始,要求所有HAP的minAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 19及之前版本,要求所有HAP/HSP的minAPIVersion字段值均保持一致。    |
188| minCompatibleVersionCode         | 从API version 16开始,要求所有HAP的minCompatibleVersionCode字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 15及之前版本,要求所有HAP/HSP的minCompatibleVersionCode字段值均保持一致。    |
189| targetAPIVersion                 | 从API version 16开始,要求所有HAP的targetAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 15及之前版本,要求所有HAP/HSP的targetAPIVersion字段值均保持一致。    |
190| versionName                | 从API version 12开始,不再对versionName校验。      |
191
192> **说明:**
193>
194> - module.json文件为DevEco Studio编译构建产物,其中的字段与配置文件的对应关系,请参考[表1 module.json与配置文件属性的对照表](packing-tool.md)。
195
196示例:
197
198```
199java -jar app_packing_tool.jar --mode multiApp [--hap-list <path>] [--hsp-list <path>] [--app-list <path>] --out-path <option> [--force true] [--encrypt-path <path>] [--pac-json-path <path>] [--atomic-service-entry-size-limit <size>] [--atomic-service-non-entry-size-limit <size>]
200```
201
202**表7** 多工程打包指令参数说明
203
204| 指令         | 是否必选项 | 选项        | 描述                                                        |
205|------------|-------|-----------|----------------------------------------------------------------|
206| --mode     | 是     | multiApp  | 打包类型,在将多个HAP打入同一个App时,需保证每个HAP满足合法性校验规则。                                                            |
207| --hap-list | 否     | HAP的路径    | HAP包文件路径,文件名必须以.hap为后缀。如果是多个HAP包需要“,”分隔。<br/>HAP文件路径也可以是目录。                                          |
208| --hsp-list | 否     | HSP的路径    | HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要“,”分隔。<br/>HSP文件路径也可以是目录。                                          |
209| --app-list | 否     | App的路径    | App文件路径,文件名必须以.app为后缀。如果是多个App包需要用“,”分隔。<br/>App文件路径也可以是目录。<br/>--hap-list,--hsp-list,--app-list不可以都不传。 |
210| --out-path | 是     | NA | 目标文件路径,文件名必须以.app为后缀。 |
211| --force    | 否     | true或者false | 默认值为false。如果为true,表示当目标文件存在时,强制删除。                                                                  |
212| --encrypt-path | 否     | encrypt.json的路径 | 文件名必须为encrypt.json。                                                                  |
213| --pac-json-path | 否     | NA          | pac.json文件路径,文件名必须为pac.json。<br/>最终app产物中pac.json文件只来源于该参数,不配置的话,最终app产物不包含该文件。<br/>--app-list参数指定的app包中的pac.json不会打包进最终app。<br/>从API Version 20开始支持该参数。|
214| --atomic-service-entry-size-limit      | 否         | NA            | 设置元服务entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。                       |
215| --atomic-service-non-entry-size-limit  | 否         | NA            | 设置元服务非entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。                     |
216
217
218
219## HQF打包指令
220
221HQF包适用于应用存在一些问题,需要紧急修复的场景。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的HQF包。
222
223示例:
224
225```
226java -jar app_packing_tool.jar --mode hqf --json-path <path> [--lib-path <path>] [--ets-path <path>] [--resources-path <path>] --out-path <path> [--force true]
227```
228
229**表8** HQF打包指令参数说明
230
231| 指令          | 是否必选项 | 选项          | 描述                                 |
232|-------------|-------|-------------|------------------------------------|
233| --mode      | 是     | hqf         | 打包类型。                              |
234| --json-path | 是     | NA          | .json文件路径,文件名必须为[patch.json](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-incremental-debugging#section28031446182019)。        |
235| --lib-path  | 否     | NA          | lib库文件的路径。                         |
236| --ets-path  | 否     | NA          | 存放ets文件目录路径。                       |
237| --resources-path  | 否     | NA          | resources资源包路径。                       |
238| --out-path  | 是     | NA          | 目标文件路径,文件名必须以.hqf为后缀。              |
239| --force     | 否     | true或者false | 默认值为false。如果为true,表示当目标文件存在时,强制删除。 |
240
241## APPQF打包指令
242
243APPQF包由一个或多个HQF文件组成。这些HQF包在应用市场会从APPQF包中拆分出来,再被分发到具体的设备上。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的APPQF包。
244
245**APPQF打包合法性校验**
246- 在打包生成APPQF包时,确保每个HQF的[patch.json文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-incremental-debugging#section28031446182019)中的versionName、versionCode、patchVersionName、patchVersionCode保持一致。
247- 所有HQF不得重复。HQF重复是指同时满足以下两个条件:
248	1. 两个HQF的patch.json文件中module下的name字段相同。
249	2. 两个HQF的patch.json文件中module下的deviceTypes属性相交(至少存在一个相同的设备类型)。
250
251示例:
252
253```
254java -jar app_packing_tool.jar --mode appqf --hqf-list <path> --out-path <path> [--force true]
255```
256
257**表9** APPQF打包指令参数说明
258
259| 指令         | 是否必选项 | 选项          | 描述                                 |
260|------------|-------|-------------|------------------------------------|
261| --mode     | 是     | appqf       | 打包类型。                              |
262| --hqf-list | 是     | NA          | [HQF文件](packing-tool.md#hqf打包指令)路径,多个HQF以英文逗号隔开。              |
263| --out-path | 是     | NA          | 目标文件路径,文件名必须以.appqf为后缀。            |
264| --force    | 否     | true或者false | 默认值为false。如果为true,表示当目标文件存在时,强制删除。 |
265
266## 版本归一指令(versionNormalize)
267
268同一个App中,所有HAP、HSP包的versionName和versionCode需要保持一致。当只有一个HAP或HSP需要修改升级时,可以调用此命令,将多个HAP、HSP的版本统一。本命令会修改所传入的HAP、HSP的版本号和版本名称,并在指定目录生成修改后的同名HAP、HSP,以及一个version_record.json文件,用于记录所有HAP、HSP原有的版本号、版本名称。
269
270示例:
271```
272java -jar app_packing_tool.jar --mode versionNormalize --input-list 1.hap,2.hsp --version-code 1000001 --version-name 1.0.1 --out-path out
273```
274
275**表10** versionNormalize指令参数说明
276
277| 指令             | 是否必选项 | 选项               | 描述                                                                |
278|----------------|-------|------------------|-------------------------------------------------------------------|
279| --mode         | 是     | versionNormalize | 命令类型。                                                             |
280| --input-list   | 是     | HAP或HSP的路径       | 1. HAP或HSP包文件路径,文件名必须以.HAP或.HSP为后缀。如果是多个HAP或HSP包需要“,”分隔。<br/>2. 传入目录时,会读取目录下所有的HAP和HSP文件。 |
281| --version-code | 是     | 版本号              | 指定的版本号,HAP、HSP的版本号会被修改为该版本。需要为整数,且不小于所有传入的HAP、HSP的版本号。            |
282| --version-name | 是     | 版本名称             | 指定的版本名称,HAP、HSP的版本名称会被修改为该版本名称。                                    |
283| --out-path     | 是     | NA               | 目标文件路径,需要为一个目录。                                                   |
284
285## 包名归一指令(packageNormalize)
286
287此命令可以修改传入的HSP的包名和版本号,并在指定目录生成修改后的同名HSP。
288
289示例:
290```
291java -jar app_packing_tool.jar --mode packageNormalize --hsp-list 1.hsp,2.hsp --bundle-name com.example.myapplication --version-code 1000001 --out-path out
292```
293
294**表11**  参数含义及规范
295
296| 指令             | 是否必选项 | 选项            | 描述                                                  |
297|----------------|-------|---------------|-----------------------------------------------------|
298| --mode         | 是     | packageNormalize | 命令类型。                                               |
299| --hsp-list     | 是     | HSP的路径      | 1. HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要“,”分隔。<br/>2. HSP包目录。仅处理目录内以.hsp为后缀的文件。|
300| --bundle-name  | 是     | 包名            | 指定的包名,HSP的包名会被修改为指定的包名。                             |
301| --version-code | 是     | 版本号           | 指定的版本号,HSP的版本号会被修改为该版本号。需要为整数,且大于0。                 |
302| --out-path     | 是     | NA            | 目标文件路径,需要为一个目录。                                     |
303
304## 通用归一指令(generalNormalize)
305
306此命令可以修改传入的HAP/HSPdeviceType/bundleName/versionName/versionCode/minCompatibleVersionCode/minAPIVersion/targetAPIVersion/<br/>
307apiReleaseType/bundleTypes/installationFree/deliveryWithInstall参数,并在指定目录生成修改后的同名HAP/HSP,以及一个general_record.json文件,用于记录所有HAP、HSP原有的参数名称和moduleName。上述设置的参数应符合正确打包规范,否则会在指定目录生成HAP/HSP失败,指定目录不会有文件生成。
308
309> **说明:**
310>
311> - 从API version 20开始支持通用归一化指令。
312
313示例:
314
315```
316java -jar app_packing_tool.jar --mode generalNormalize --input-list 1.hsp,2.hsp --bundle-name com.example.myapplication --version-code 1000001 --version-name 1.0.1 --min-compatible-version-code 14 --min-api-version 14 --target-api-version 14 --api-release-type Release1 --bundle-type app --installation-free false --delivery-with-install true --device-types default,tablet --out-path out
317```
318
319**表12**  参数含义及规范
320
321| 指令                          | 是否必选项 | 选项                                               | 描述                                                         |
322| ----------------------------- | ---------- | -------------------------------------------------- | ------------------------------------------------------------ |
323| --mode                        | 是         | generalNormalize                                   | 指令类型,表示通用归一化指令。                               |
324| --input-list                  | 是         | HAP或HSP的路径                                     | 1. HAP或HSP包文件路径,文件名必须以.hap或.hsp为后缀。多个HAP或HSP包文件路径之间使用“,”分隔。<br/>2. 传入目录时,会读取目录下所有的HAP和HSP文件。 |
325| --bundle-name                 | 否         | 包名                                               | 指定的Bundle名称,传入的包的Bundle名称会被修改为该Bundle名称。指定的值不能为空,该字段的详细定义和规格请参考[app.json5](../quick-start/app-configuration-file.md#配置文件标签)中的bundleName字段。 |
326| --version-code                | 否         | 版本号                                             | 指定的版本号,传入的包的版本号会被修改为该版本号。取值范围为0~2147483647的整数,指定的值不能为空值,该字段的详细定义和规格请参考[app.json5](../quick-start/app-configuration-file.md#配置文件标签)中的versionCode字段。 |
327| --version-name                | 否         | 版本名称                                           | 指定的版本名称,传入的包的版本名称会被修改为该版本名称。指定的值不能为空,该字段的详细定义和规格请参考[app.json5](../quick-start/app-configuration-file.md#配置文件标签)中的versionName字段。 |
328| --min-compatible-version-code | 否         | 能够兼容的最低历史版本号                           | 指定的最低历史版本号,传入的包的最低历史版本号会被修改为该版本号。取值范围为0~2147483647的整数,指定的值不能为空值,该字段的详细定义和规格请参考[app.json5](../quick-start/app-configuration-file.md#配置文件标签)中的minCompatibleVersionCode字段。 |
329| --min-api-version             | 否         | SDK的API最小版本                                   | 指定的SDK的API最小版本,传入的包的SDK的API最小版本会被修改为该版本。取值范围为0~2147483647的整数,指定的值不能为空值,该字段的详细定义和规格请参考[app.json5](../quick-start/app-configuration-file.md#配置文件标签)中的minAPIVersion字段。 |
330| --target-api-version          | 否         | API目标版本                                        | 指定的API目标版本,传入的包的API目标版本会被修改为该版本。取值范围为0~2147483647的整数,指定的值不能为空值,该字段的详细定义和规格请参考[app.json5](../quick-start/app-configuration-file.md#配置文件标签)中的targetAPIVersion字段。 |
331| --api-release-type            | 否         | API目标版本的类型                                  | 指定的API目标版本的类型,传入的包的API目标版本的类型会被修改为该类型。指定的值不能为空,该字段的详细定义和规格请参考[app.json5](../quick-start/app-configuration-file.md#配置文件标签)中的apiReleaseType字段。 |
332| --bundle-type                 | 否         | Bundle类型                                         | 指定的Bundle类型,传入的包的Bundle类型会被修改为该类型。指定的值不能为空,该字段的详细定义和规格请参考[app.json5](../quick-start/app-configuration-file.md#配置文件标签)中的bundleType字段。 |
333| --installation-free           | 否         | 是否支持免安装特性                                 | 指定的免安装特性,传入的包的免安装特性会被修改为该类型。指定的值不能为空,该字段的详细定义和规格请参考Stage模型[module.json5](../quick-start/module-configuration-file.md#配置文件标签)/FA模型[config.json](../quick-start/application-configuration-file-overview-fa.md)中的installationFree字段。 |
334| --delivery-with-install       | 否         | 当前HAP是否在用户主动安装HAP所在应用的时候一起安装 | 指定的HAP是否需要一起安装,传入的包的deliveryWithInstall会被修改为该类型。指定的值不能为空,该字段的详细定义和规格参考Stage模型[module.json5](../quick-start/module-configuration-file.md#配置文件标签)/FA模型[config.json](../quick-start/application-configuration-file-overview-fa.md)中的deliveryWithInstall字段。 |
335| --device-types                | 否         | 允许Ability运行的设备类型                          | 指定的设备类型,传入的包的设备类型会被修改为该类型。指定的值不能为空,该字段的详细定义和规格请参考Stage模型[module.json5](../quick-start/module-configuration-file.md#配置文件标签)/FA模型[config.json](../quick-start/application-configuration-file-overview-fa.md)中的deviceTypes字段,传入值的形式为字符串格式,多个设备类型之间使用“,”分隔。 |
336| --out-path                    | 是         | NA                                                 | 目标文件路径,需要为一个有读写权限的目录。                   |
337
338## res模式打包指令
339
340此命令用于打包元服务快照资源。
341
342示例:
343
344```
345java -jar app_packing_tool.jar --mode res --entrycard-path <path> --pack-info-path <path> --out-path <path> [--force true]
346```
347
348**表13** 参数含义及规范
349
350| 指令               | 是否必选项 | 选项            | 描述                                 |
351|------------------|-------|---------------|------------------------------------|
352| --mode           | 是     | res           | 命令类型。                              |
353| --entrycard-path | 是     | NA            | 快照目录的路径。                           |
354| --pack-info-path | 是     | NA            | pack.info文件路径。              |
355| --out-path       | 是     | NA            | 目标文件路径,文件名必须以.res为后缀。              |
356| --force          | 否     | true或者false   | 默认值为false。如果为true,表示当目标文件存在时,强制删除。 |
357
358## fastApp模式打包指令
359
360开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、HAP、HSP包文件目录路径,生成所需的App包。App包用于上架应用市场。
361
362**表14** fastApp打包合法性校验规则
363
364| HAP/HSPmodule.json中的被校验字段  | 校验规则                           |
365| --------------------------------- | --------------------------------- |
366| module下的name字段                | 要求所有HAP/HSP的name字段值均不相同。      |
367| bundleName                       | 要求所有HAP/HSP的bundleName字段值均保持一致。  |
368| bundleType                       | 要求所有HAP/HSP的bundleType字段值均保持一致。  |
369| versionCode                      | 要求所有HAP/HSP的versionCode字段值均保持一致。 |
370| debug                            | 从API version 20开始,要求所有HAP的debug字段值均保持一致,如果HAP的debug字段值为false,HSP的debug字段值也必须为false。如果HAP的debug字段值为true,对HSP的debug字段值无要求。<br/>对于API version 19及之前版本,要求所有HAP/HSP的debug字段值均保持一致。    |
371| minAPIVersion                    | 从API version 20开始,要求所有HAP的minAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 19及之前版本,要求所有HAP/HSP的minAPIVersion字段值均保持一致。    |
372| minCompatibleVersionCode         | 从API version 16开始,要求所有HAP的minCompatibleVersionCode字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 15及之前版本,要求所有HAP/HSP的minCompatibleVersionCode字段值均保持一致。    |
373| targetAPIVersion                 | 从API version 16开始,要求所有HAP的targetAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。<br/>对于API version 15及之前版本,要求所有HAP/HSP的targetAPIVersion字段值均保持一致。    |
374
375> **说明:**
376>
377> - module.json文件为DevEco Studio编译构建产物,其中的字段与配置文件的对应关系,请参考[表1 module.json与配置文件属性的对照表](packing-tool.md)。
378
379**打包App时的压缩规则:** 打包App时,对release模式的HAP、HSP包会进行压缩,对debug模式的HAP、HSP包不会压缩。
380
381> **说明:**
382>
383> 若HAP/HSP中已压缩的so文件,在打包APP时再次压缩,将不会有明显体积缩减。
384
385示例:
386
387```
388java -jar app_packing_tool.jar --mode fastApp [--hap-path <path>] [--hsp-path <path>] --out-path <path> [--signature-path <path>] [--certificate-path <path>] --pack-info-path <path> [--pack-res-path <path>] [--force true] [--encrypt-path <path>] [--pac-json-path <path>] [--atomic-service-entry-size-limit <size>] [--atomic-service-non-entry-size-limit <size>]
389```
390
391**表15** 参数含义及规范
392
393| 指令                 | 是否必选项 | 选项         | 描述                                                     |
394|--------------------|-------|------------|----------------------------------------------------|
395| --mode             | 是     | fastApp    | 多个HAP需满足HAP的合法性校验。                                      |
396| --hap-path         | 否     | NA         | HAP包文件目录路径,目录内要包含一个完整的HAP包的所有文件。允许传入多个路径,多个路径需要用英文“,”分隔。                                              |
397| --hsp-path         | 否     | NA         | 1. HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要用英文“,”分隔。<br/>2. HSP包文件目录路径,目录内要包含一个完整的HSP包的所有文件。允许传入多个路径,多个路径需要用英文“,”分隔。 |
398| --pack-info-path   | 是     | NA         | 文件名必须为pack.info。                                               |
399| --out-path         | 是     | NA         | 目标文件路径,文件名必须以.app为后缀。                                             |
400| --signature-path   | 否     | NA         | 签名路径。                                                            |
401| --certificate-path | 否     | NA         | 证书路径。                                                |
402| --pack-res-path    | 否     | NA         | pack.res快照文件路径。                   |
403| --force            | 否     | true或者false | 默认值为false。如果为true,表示当目标文件存在时,强制删除。           |
404| --encrypt-path     | 否     | NA         | 文件名必须为encrypt.json。           |
405| --pac-json-path     | 否     | NA          | pac.json文件路径,文件名必须为pac.json。<br/>从API Version 20开始支持该参数。|
406| --atomic-service-entry-size-limit      | 否         | NA            | 设置元服务entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。                      |
407| --atomic-service-non-entry-size-limit  | 否         | NA            | 设置元服务非entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。                     |
408
409## 打包工具错误码
410
411### 10010001 执行打包工具失败
412**错误信息**
413
414Execute packing tool failed.
415
416**错误描述**
417
418执行打包工具失败。
419
420**可能原因**
421
4221. 打包文件合法性校验失败。
4232. 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
424
425**处理步骤**
426
4271. 根据报错信息检查[app.json5](../quick-start/app-configuration-file.md)和[module.json5](../quick-start/module-configuration-file.md)中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
4282. 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
429
430### 10012001 执行压缩操作失败
431**错误信息**
432
433Execute compress process failed.
434
435**错误描述**
436
437执行打包操作时,例如打包HAP或App,执行压缩操作失败,导致打包中断。
438
439**可能原因**
440
4411. 打包文件合法性校验失败。
4422. 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
443
444**处理步骤**
445
4461. 根据报错信息检查[app.json5](../quick-start/app-configuration-file.md)和[module.json5](../quick-start/module-configuration-file.md)中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
4472. 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
448
449### 10012002 HAP包压缩失败
450**错误信息**
451
452Compress Stage Hap failed.
453
454**错误描述**
455
456打包HAP时,执行压缩Stage模型的HAP包操作失败。
457
458**可能原因**
459
4601. Stage模型HAP包打包文件合法性校验失败。
4612. 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
462
463**处理步骤**
464
4651. 根据报错信息检查[app.json5](../quick-start/app-configuration-file.md)和[module.json5](../quick-start/module-configuration-file.md)中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
4662. 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
467
468### 10012003 校验HAP信息失败
469**错误信息**
470
471Verify stage hap info failed.
472
473**错误描述**
474
475打包Stage模型HAP包时,配置信息校验失败。
476
477**可能原因**
478
479`module.json5`中`atomicService`或`continueBundleName`存在配置错误,或`app.json5`中`asanEnabled`或`hwasanEnabled`存在配置错误。
480
481**处理步骤**
482
483参考[asanEnabled配置错误码](#10012004-检查参数asanenabled失败)、[hwasanEnabled配置错误码](#10012005-检查参数hwasanenabled失败)、[atomicService配置错误码](#10012006-检查atomicservice失败)、[continueBundleName配置错误码](#10012007-检查continuebundlename无效),更改配置项。
484
485### 10012004 检查参数asanEnabled失败
486**错误信息**
487
488Check asanEnabled failed.
489
490**错误描述**
491
492打包HAP/HSP时,`app.json5`中`asanEnabled`配置错误。
493
494**可能原因**
495
496`asanEnabled`和`tsanEnabled`被同时设置为true。
497
498**处理步骤**
499
500检查[app.json5](../quick-start/app-configuration-file.md),修改`asanEnabled`和`tsanEnabled`,确保二者不会同时为true。
501
502### 10012005 检查参数hwasanEnabled失败
503**错误信息**
504
505Check hwasanEnabled failed.
506
507**错误描述**
508
509打包HAP/HSP时,`app.json5`中`hwasanEnabled`配置错误。
510
511**可能原因**
512
5131. `hwasanEnabled`和`asanEnabled`被同时配置为true。
5142. `hwasanEnabled`和`tsanEnabled`被同时配置为true。
5153. `hwasanEnabled`和`GWPAsanEnabled`被同时配置为true。
516
517**处理步骤**
518
519检查[app.json5](../quick-start/app-configuration-file.md),确保`asanEnabled`、`tsanEnabled`、`GWPAsanEnabled`三项的中任一项与`hwasanEnabled`,不会同时配置为true。
520
521### 10012006 检查atomicService失败
522**错误信息**
523
524Check atomicService failed.
525
526**错误描述**
527
528打包HAP/HSP时,`atomicService`配置检查失败。
529
530**可能原因**
531
5321. `module.json5`中`entry`模块未配置ability,导致`atomicService`配置检查失败。
5332. 当`app.json5`中`bundleType`配置为`atomicService`时,但`module.json5`中`installationFree`为false。
534
535**处理步骤**
536
5371. 检查[module.json5](../quick-start/module-configuration-file.md),确保`module.json5`文件中正确配置了`abilities`标签,并且至少包含一个ability,详细请参见[abilities标签](../quick-start/module-configuration-file.md#abilities标签)。
5382. 检查`module.json5`和[app.json5](../quick-start/app-configuration-file.md),当`bundleType`为`atomicService`时,确保`installationFree`配置为true,反之,需要配置为false。
539
540### 10012007 检查continueBundleName无效
541**错误信息**
542
543Check continueBundleName invalid.
544
545**错误描述**
546
547打包HAP/HSP时,`continueBundleName`配置检查失败。
548
549**可能原因**
550
551`module.json5`中的`continueBundleName`与`app.json5`中`bundleName`相同。
552
553**处理步骤**
554
555修改`continueBundleName`,确保其与[app.json5](../quick-start/app-configuration-file.md)中的`bundleName`不同。
556
557### 10012008 检查overlay失败
558**错误信息**
559
560Check whether is an overlay hsp failed.
561
562**错误描述**
563
564检查是否是overlay特性HSP包失败。
565
566**可能原因**
567
5681. 在`module.json5`中同时配置了`targetModuleName`与`requestPermissions`。
569
5702. `module.json5`中的`targetModuleName`和`module.json5`中的`name`相同。
571
5723. 在`module.json5`中配置了`targetPriority`时,未配置`targetModuleName`。
573
5744. 在`app.json5`中配置了`targetBundleName`时,`module.json5`中未配置`targetModuleName`。
575
5765. 在`app.json5`中的`targetBundleName`与`bundleName`配置相同。
577
578**处理步骤**
579
5801. 检查[module.json5](../quick-start/module-configuration-file.md),确保`targetModuleName`和`requestPermissions`不会同时出现。
5812. 检查`module.json5`,确保`targetModuleName`和`name`不同。
5823. 检查`module.json5`,确保配置`targetPriority`时,同时配置了`targetModuleName`。
5834. 检查[app.json5](../quick-start/app-configuration-file.md)和`module.json5`,确保配置`targetBundleName`时,同时配置了`targetModuleName`。
5845. 检查`app.json5`,确保`targetBundleName`与`bundleName`不同。
585
586### 10012009 执行压缩操作时异常
587**错误信息**
588
589Process compress exception.
590
591**错误描述**
592
593执行压缩HAP/HSP/App操作时存在异常。
594
595**可能原因**
596
5971. 打包文件合法性校验失败。
5982. 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
599
600**处理步骤**
601
6021. 根据报错信息检查[app.json5](../quick-start/app-configuration-file.md)和[module.json5](../quick-start/module-configuration-file.md)中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
6032. 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
604
605### 10012015 构建App包失败
606**错误信息**
607
608Compress app file failed.
609
610**错误描述**
611
612构建App包失败。
613
614**可能原因**
615
6161. App打包文件合法性校验失败。
6172. 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
618
619**处理步骤**
620
6211. 根据报错信息检查[app.json5](../quick-start/app-configuration-file.md)和[module.json5](../quick-start/module-configuration-file.md)中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
6222. 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
623
624### 10012017 检查SharedAPP无效
625**错误信息**
626
627Check shared App mode invalid.
628
629**错误描述**
630
631构建[bundleType](../quick-start/app-configuration-file.md#配置文件标签)为shared的App包时,检查HSP包无效。
632
633**可能原因**
634
6351. 存在两个以上的[HSP包](../quick-start/in-app-hsp.md)。例如下图使用DevEco Studio构建App时,工程中包含了两个HSP包library和library1,此时打包APP包失败。
636
637![alt text](figures/zh_cn_packing_tool_image_10012017_01.png)
638
6392. HSP包在`module.json5`中配置了`dependencies`。
640
641**处理步骤**
642
6431. 检查打包文件,确保`bundleType`为shared的App包中,HSP包不超过一个。
6442. 检查打包文件,删除HSP包中[module.json5](../quick-start/module-configuration-file.md)配置的`dependencies`。
645
646### 10012022 校验Stage HSP失败
647**错误信息**
648
649Verify stage hsp info failed.
650
651**错误描述**
652
653打包HSP时,校验Stage模型HSP包失败。
654
655**可能原因**
656
6571. `module.json5`中的`atomicService`、`continueBundleName`存在配置错误,或`app.json5`中的`asanEnabled`、`hwasanEnabled`存在配置错误。
6582. overlay配置出错。
659
660**处理步骤**
661
6621. 参考[asanEnabled配置错误码](#10012004-检查参数asanenabled失败)、[hwasanEnabled配置错误码](#10012005-检查参数hwasanenabled失败)、[atomicService配置错误码](#10012006-检查atomicservice失败)、[continueBundleName配置错误码](#10012007-检查continuebundlename无效),更改配置项。
6631. 参考[检查overlay失败](#10012008-检查overlay失败),更改配置项。
664
665### 10012024 校验元服务大小失败
666**错误信息**
667
668Check atomicService size failed.
669
670**错误描述**
671
672打包App时,检查元服务包的大小超出了2MB。
673
674**可能原因**
675
676元服务包及依赖的共享库或资源文件大小超出了2MB的限制。
677
678**处理步骤**
679
680优化并减少包的大小,例如删除不必要的资源、精简代码或减少依赖。
681
682### 10013005 检查模块bundleType失败
683**错误信息**
684
685Failed to parse module.json and bundleType.
686
687**错误描述**
688
689检查模块bundleType失败。
690
691**可能原因**
692
693不符合配置要求,例如:
6941. 模块的[app.json5](../quick-start/app-configuration-file.md)配置文件中`bundleType`为app,但[module.json5](../quick-start/module-configuration-file.md)中的`installationFree`属性值为true。
6952. 模块的app.json5配置文件中`bundleType`为atomicService,但module.json5中的`installationFree`属性值为false。
6963. 模块的app.json5配置文件中`bundleType`为shared,但module.json5中的`type`属性值不是shared。
697
698**处理步骤**
699
7001. 确保app.json5配置文件中`bundleType`为app时,module.json5中的`installationFree`属性值为false。
7012. 确保app.json5配置文件中`bundleType`为atomicService时,module.json5中的`installationFree`属性值为true。
7023. 确保app.json5配置文件中`bundleType`为shared时,module.json5中的`type`属性值也是shared。
7034. 当有多条报错信息时,优先根据第一条报错信息进行排查。
704
705### 10013006 检查entry模块中的ability失败
706**错误信息**
707
708check entry module at least one ability failed.
709
710**错误描述**
711
712Entry类型包中没有ability。
713
714**可能原因**
715
716Entry类型包中不存在ability,该错误可能是由于`module.json5`未配置`abilities`或者`abilities`配置为空引起。
717
718**处理步骤**
719
720检查[module.json5](../quick-start/module-configuration-file.md),确保Entry类型包`abilities`正确配置了ability。
721
722### 10013007 检查installationFree错误
723**错误信息**
724
725Check module atomicService installationFree invalid.
726
727**错误描述**
728
729打包HAP/HSP时,检查`atomicService`和`installationFree`配置出错。
730
731**可能原因**
732
7331. `app.json5`中的`bundleType`配置了无效值。
7342. 当`bundleType`为shared时,`module.json5`中`installationFree`未设置为false。
7353. 当`installationFree`为true时,`bundleType`未设置为atomicService。
736
737**处理步骤**
738
7391. 检查[app.json5](../quick-start/app-configuration-file.md),确保`bundleType`设置为app,atomicService,shared<!--Del-->,appService<!--DelEnd-->之一。
7402. 如果`bundleType`为shared,确保[module.json5](../quick-start/module-configuration-file.md)中的`installationFree`设置为false。
7413. 如果`installationFree`为true,确保`bundleType`设置为atomicService。
742
743### 10014001 未找到可用文件
744**错误信息**
745
746File available not found exception.
747
748**错误描述**
749
750使用打包工具打包时,需要打包的文件不可使用。
751
752**可能原因**
753
7541. 指定的文件路径错误或文件不存在。
7552. 文件正在被其他程序使用,例如压缩软件或文件管理器。
7563. 当前用户没有访问该文件的权限。
757
758**处理步骤**
759
7601. 确认提供的文件路径正确,并检查该文件是否存在。
7612. 检查是否有程序(如压缩软件、文件管理器)占用文件,关闭相关进程后重试。
7623. 检查并调整文件的访问权限,例如当前用户可以读取、修改、删除文件。
763
764### 10016003 分发策略相交校验失败
765**错误信息**
766
767Check two distroFilter policy disjoint invalid.
768
769**错误描述**
770
771[HAP唯一性校验](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-verification-rule)需要判断分发策略是否相交,由于分发策略配置错误,导致无法判断分发策略是否相交。
772
773**可能原因**
774
775分发策略`policy`、`value`标签为空或为无效值。
776
777**处理步骤**
778
779检查分发策略相关配置,确保`policy`的值为`include`或`exclude`,`value`取值参见[distributionFilter标签](../quick-start/module-configuration-file.md#distributionfilter标签)。
780
781### 10016006 检查HAP包无效
782**错误信息**
783
784Verify hap info is invalid.
785
786**错误描述**
787
788构建App包时,校验用于打包的HAP/HSP失败。
789
790**可能原因**
791
792多个HAP/HSP包配置之间存在冲突。
793
794**处理步骤**
795
796根据报错信息检查[app.json5](../quick-start/app-configuration-file.md)和[module.json5](../quick-start/module-configuration-file.md)中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
797
798### 10016007 检查entry模块无效
799**错误信息**
800
801Check entry module invalid.
802
803**错误描述**
804
805构建App包时,当工程中存在多个Entry类型HAP包时,检查配置信息失败。
806
807**可能原因**
808
809不符合HAP唯一性校验规则。
810
811**处理步骤**
812
813参考[HAP唯一性校验](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-verification-rule),调整工程中的Entry类型HAP配置。
814
815### 10016009 检查依赖错误
816**错误信息**
817
818Check dependency list is invalid.
819
820**错误描述**
821
822构建App包时,模块依赖关系检查失败。
823
824**可能原因**
825
8261. 模块间存在循环依赖,例如:模块library1的`module.json5`中`dependencies`配置了library2,同时模块library2中的`dependencies`配置了library1,则这两个模块之间构成循环依赖。
8272. `module.json5`配置中依赖的模块对应的`module.json5`中的`type`为entry或feature。
828
829**处理步骤**
830
8311. 检查[module.json5](../quick-start/module-configuration-file.md)中的`dependencies`,删除循环依赖,确保App中不存在循环依赖。
8322. 检查`module.json5`中的`dependencies`的配置,删除对entry或feature类型模块的依赖。
833
834### 10016010 检查元服务无效
835**错误信息**
836
837Check atomicservice is invalid.
838
839**错误描述**
840
841构建App包时,检查元服务无效。
842
843**可能原因**
844
845`module.json5`中`preloads`配置的`moduleName`错误。
846
847**处理步骤**
848
849检查[module.json5](../quick-start/module-configuration-file.md)中的[preloads属性](../quick-start/module-configuration-file.md#atomicservice标签)下的`moduleName`,不能配置为自身模块`module.json5`中的`name`,且`moduleName`对应的模块必须存在。
850
851### 10016011 检查元服务预加载无效
852**错误信息**
853
854Atomicservice preloads is invalid.
855
856**错误描述**
857
858构建bundleType为atomicService类型的App包时,检查元服务包预加载的模块无效。
859
860**可能原因**
861
8621. 元服务包`module.json5`中的`preloads`配置了重复的`moduleName`。
8632. 元服务包`preloads`配置的`moduleName`,和其他元服务包中`module.json5`中的`name`不匹配。
8643. 元服务包`preloads`配置的`moduleName`,和自身`module.json5`中的`name`相同。
865
866**处理步骤**
867
868检查[module.json5](../quick-start/module-configuration-file.md)中元服务[preloads属性](../quick-start/module-configuration-file.md#atomicservice标签),确保没有配置重复的模块,配置所有的模块都存在且不能配置自身的模块名。
869
870### 10016012 目标模块不存在
871**错误信息**
872
873TargetModuleName is not exist.
874
875**错误描述**
876
877构建App时,模块中配置了目标模块,但未找到该模块。
878
879**可能原因**
880
881`module.json5`中配置了`targetModuleName`,但和其他模块对应`module.json5`中的`name`均不同。
882
883**处理步骤**
884
885检查`targetModuleName`配置项,确保其正确配置(详细请参见[module.json5配置文件标签](../quick-start/module-configuration-file.md#配置文件标签)及targetModuleName属性),必要时创建目标模块。
886
887### 10016014 代理数据不唯一
888**错误信息**
889
890Proxy data uri is not unique.
891
892**错误描述**
893
894数据代理uri不唯一,存在重复项。
895
896**可能原因**
897
898`module.json5`中的`proxyData`配置的uri存在重复。
899
900**处理步骤**
901
902检查[module.json5](../quick-start/module-configuration-file.md),删除`proxyData`中重复的uri,确保每个uri都是唯一的(详细请参见[proxyData标签](../quick-start/module-configuration-file.md#proxydata标签))。
903
904### 10016015 ContinueType配置无效
905**错误信息**
906
907Check continueType is invalid.
908
909**错误描述**
910
911构建App时,检查continueType配置错误。
912
913**可能原因**
914
9151. `module.json5`不同的ability存在重复的`continueType`配置项。
9162. 不同的`module.json5`中同时存在重复的`deviceType`配置项和`continueType`配置项。
917
918**处理步骤**
919
920检查[module.json5](../quick-start/module-configuration-file.md),删除`continueType`或`deviceType`重复的配置项。
921
922### 10016016 文件大小检查错误
923**错误信息**
924
925Check file size failed.
926
927**错误描述**
928
929构建元服务类型App时,检查单个包大小超过2MB。
930
931**可能原因**
932
933单个包大小超过2MB,超出限制。
934
935**处理步骤**
936
937优化并减少对应单个包文件的大小,例如删除不必要的资源、精简代码或压缩文件。
938
939### 10016018 元服务模块大小检查错误
940**错误信息**
941
942Check the atomicService module size failed.
943
944**错误描述**
945
946构建元服务类型App时,检查单个包和其依赖的共享库大小超过2MB。
947
948**可能原因**
949
950单个包和其依赖的共享库总大小超过2MB,超出限制。
951
952**处理步骤**
953
954优化并减少相应包的大小,例如删除不必要的资源、精简代码或减少依赖项。
955
956### 10016019 检查分发策略无效
957**错误信息**
958
959Check the entry module distributionFilter is invalid.
960
961**错误描述**
962
963检查Entry类型模块分发策略错误。
964
965**可能原因**
966
967Entry类型模块分发策略配置存在错误。
968
969**处理步骤**
970
971检查Entry模块分发策略是否正确配置,例如`policy`的值应为`exclude`或`include`,详细请参考[distributionFilter标签](../quick-start/module-configuration-file.md#distributionfilter标签)。
972
973### 10011021 通用归一化命令失败
974
975**错误信息**
976
977Parse and check args invalid in generalNormalize mode.
978
979**错误描述**
980
981通用归一化命令失败。
982
983**可能原因**
984
9851. 传入的参数类型错误。
9862. 传入参数范围错误。
9873. 传入HAP/HSP包不完整,缺少json文件(json文件配置请参考Stage模型[module.json5](../quick-start/module-configuration-file.md#配置文件标签)/FA模型[config.json](../quick-start/application-configuration-file-overview-fa.md))。
988
989**处理步骤**
990
991检查并传入正确的命令参数和有效的包文件。