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/HSP的module.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/HSP的module.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/HSP的 deviceType/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/HSP的module.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 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检查并传入正确的命令参数和有效的包文件。