打包工具
打包工具用于在程序编译完成后,对编译出的文件等进行打包,以供安装发布。开发者可以使用DevEco Studio进行打包,也可使用打包工具的JAR包进行打包,JAR包通常存放在SDK路径下的toolchains目录中。
打包工具支持生成:Ability类型的模块包(HAP)、动态共享包(HSP)、应用程序包(App)、快速修复模块包(HQF)、快速修复包(APPQF)。
打包指令中的文件来源于DevEco Studio编译构建产物,文件路径查看操作如下。
- 在DevEco Studio工程根目录下的/hvigor/hvigor-config.json5文件中,修改"logging"下的"level"字段为"debug"。
- 在DevEco Studio菜单栏,依次选择"构建 -> 清理项目"。
- 在DevEco Studio菜单栏,依次选择"构建 -> 构建APP(s)"。
- 在DevEco Studio底部"构建"窗口,搜索"app_packing_tool.jar",确认打包参数中文件的路径。
打包工具会对module.json文件属性进行合法性校验。module.json文件是编译构建产物,其属性值在编译构建时自动生成,与配置文件中配置项对应关系如下。
表1 module.json与配置文件属性的对照表
| module.json属性 | 含义 | module.json5配置项 | app.json5配置项 | 工程级build-profile.json5配置项 |
|---|---|---|---|---|
| bundleName | 应用的Bundle名称。 | - | bundleName | - |
| bundleType | 应用的Bundle类型。 | - | bundleType | - |
| versionCode | 应用的版本号。 | - | versionCode | - |
| debug | 应用是否可调试。 | - | debug | - |
| module/name | 当前Module的名称。 | module/name | - | - |
| minCompatibleVersionCode | 应用能够兼容的最低历史版本号。 | - | minCompatibleVersionCode | - |
| minAPIVersion | 应用运行所需的最小API版本。 | - | minAPIVersion | compatibleSdkVersion |
| targetAPIVersion | 应用运行需要的API目标版本。 | - | targetAPIVersion | targetSdkVersion/compileSdkVersion 说明:targetSdkVersion存在时,targetAPIVersion由targetSdkVersion决定; 否则,targetAPIVersion由compileSdkVersion决定。 |
| querySchemes | 允许应用进行跳转查询的URL schemes。 | querySchemes | - | - |
约束与限制
- 打包工具需要运行在Java8及其以上环境。
- 打包指令中参数和参数值需成对出现。例如,HAP打包指令中--resources-path <path>,其中--resources-path为指令参数,path为参数值,两者需要同时出现。
HAP打包指令
开发者可以使用打包工具的JAR包对模块进行打包,通过传入打包选项、文件路径,生成所需的HAP包。
HAP打包时合法性校验
- 从API version 21开始,在打包entry类型的HAP时,如果module.json文件中querySchemes配置了超过50个URL scheme,则要求minAPIVersion大于等于21。
打包HAP时的压缩规则:
- 应用配置compressNativeLibs为true时,会按照--compress-level设置的压缩等级对--lib-path指定目录下的文件进行压缩。
- 出于运行时性能等考量,--lib-path指定目录外的文件不会进行压缩。
示例:
-
Stage模型示例:
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>] -
FA模型示例:
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]
表2 HAP打包指令参数说明
| 指令 | 是否必选项 | 选项 | 描述 | 备注 |
|---|---|---|---|---|
| --mode | 是 | hap | 打包类型。 | NA |
| --json-path | 是 | NA | .json文件路径。FA模型文件名必须为config.json;Stage模型文件名必须为module.json。 | NA |
| --profile-path | 否 | NA | CAPABILITY.profile文件路径。 | NA |
| --maple-so-path | 否 | NA | maple so文件输入路径,so文件路径,文件名必须以.so为后缀。如果是多个so需要用“,”分隔。 | NA |
| --maple-so-dir | 否 | NA | maple so目录输入路径。 | NA |
| --dex-path | 否 | NA | dex文件路径,文件名必须以.dex为后缀。如果是多个dex需要用“,”分隔。 dex文件路径也可以为目录。 |
NA |
| --lib-path | 否 | NA | lib库文件路径。从API version 22开始,--exist-src-path配置有效且--lib-path-retain配置为true时,对libs目录做增量打包,直接拷贝--exist-src-path配置的源HAP包中的libs目录,不再打包--lib-path配置的libs目录,--lib-path参数无效。 | NA |
| --resources-path | 否 | NA | resources资源包路径。 | NA |
| --index-path | 否 | NA | .index文件路径,文件名必须为resources.index。 | NA |
| --pack-info-path | 否 | NA | pack.info文件路径,文件名必须为pack.info。 | NA |
| --rpcid-path | 否 | NA | rpcid.sc文件路径,文件名必须为rpcid.sc。 | NA |
| --js-path | 否 | NA | 存放js文件目录路径。 | 仅Stage模型生效。 |
| --ets-path | 否 | NA | 存放ets文件目录路径。 | 仅Stage模型生效。 |
| --out-path | 是 | NA | 目标文件路径,文件名必须以.hap为后缀。 | NA |
| --force | 否 | boolean | 当目标文件路径已存在时,控制是否强制执行覆盖。当--out-path目标文件打包前已存在,该参数为true时,覆盖写入;为false时,终止打包过程并报错。当--out-path目标文件打包前不存在,正常打包,该参数无效。默认值为false。 | NA |
| --an-path | 否 | NA | 存放an文件的路径。 | 仅stage模型生效。 |
| --ap-path | 否 | NA | 存放ap文件的路径。 | 仅stage模型生效。 |
| --dir-list | 否 | NA | 可指定目标文件夹列表,将其打入HAP包内。 | NA |
| --compress-level | 否 | number | lib库下文件压缩等级,默认值1。可选等级1-9。在应用配置compressNativeLibs参数为true的情况下生效,数值越大压缩率越高、压缩速度越慢。 | NA |
| --pkg-context-path | 否 | NA | 可指定语境信息表文件路径,文件名必须为pkgContextInfo.json。当app.json5配置文件中bundleType取值不是appPlugin,且module.json5配置文件中requestPermissions取值包含"ohos.permission.kernel.SUPPORT_PLUGIN"时,该参数必填。 | 仅Stage模型生效。 |
| --hnp-path | 否 | NA | 指定native软件包文件路径,将native软件包打入HAP包内。 | NA |
| --exist-src-path | 否 | NA | 指定增量打包时的源HAP包路径,该路径必须指向一个已存在的、有效的.hap文件。当--lib-path-retain配置为true时,打包工具会直接拷贝源HAP包中的libs目录,不再打包--lib-path指定的libs目录,该特性称为增量打包。当--lib-path-retain配置为false时,正常打包--lib-path指定的libs目录,该参数无效。当libs目录中so文件压缩耗时比较久时,使用增量打包可以提升打包速度。 从API version 22开始支持该参数。 |
仅Stage模型生效。 |
| --lib-path-retain | 否 | boolean | 是否对libs目录做增量打包。为true时表示对libs目录做增量打包,直接拷贝--exist-src-path指向的源HAP中的libs目录,不再打包--lib-path指定的libs目录;为false时表示不做增量打包,打包--lib-path指向的目录。默认值为false。此参数必须与--exist-src-path配套使用,单独设置不生效。 从API version 22开始支持该参数。 |
仅Stage模型生效。 |
HSP打包指令
HSP包实现了多个HAP对文件的共享,开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的HSP包。
打包HSP时的压缩规则:
- 应用配置compressNativeLibs为true时,会按照--compress-level设置的压缩等级对--lib-path指定目录下的文件进行压缩。
- 出于运行时性能等考量,--lib-path指定目录外的文件不会进行压缩。
示例:
java -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>]
表3 HSP打包指令参数说明
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | hsp | 打包类型。 |
| --json-path | 是 | NA | .json文件路径,文件名必须为module.json。 |
| --profile-path | 否 | NA | CAPABILITY.profile文件路径。 |
| --dex-path | 否 | NA | 1. dex文件路径,文件名必须以.dex为后缀。如果是多个dex需要用“,”分隔。 2. dex文件路径也可以为目录。 |
| --lib-path | 否 | NA | lib库文件路径。从API version 22开始,--exist-src-path配置有效且--lib-path-retain配置为true时,对libs目录做增量打包,直接拷贝--exist-src-path配置的源HAP包中的libs目录,不再打包--lib-path配置的libs目录,--lib-path参数无效。 |
| --resources-path | 否 | NA | resources资源包路径。 |
| --index-path | 否 | NA | .index文件路径,文件名必须为resources.index。 |
| --pack-info-path | 否 | NA | pack.info文件路径,文件名必须为pack.info。 |
| --js-path | 否 | NA | 存放js文件目录路径。 |
| --ets-path | 否 | NA | 存放ets文件目录路径。 |
| --out-path | 是 | NA | 目标文件路径,文件名必须以.hsp为后缀。 |
| --force | 否 | boolean | 当目标文件路径已存在时,控制是否强制执行覆盖。当--out-path目标文件打包前已存在,该参数为true时,覆盖写入;为false时,终止打包过程并报错。当--out-path目标文件打包前不存在,正常打包,该参数无效。默认值为false。 |
| --compress-level | 否 | number | lib库下文件压缩等级,默认值1,可选等级1-9。在应用配置compressNativeLibs参数为true的情况下生效,数值越大压缩率越高、压缩速度越慢。 |
| --pkg-context-path | 否 | NA | 可指定语境信息表文件路径,文件名必须为pkgContextInfo.json。当app.json5配置文件中bundleType取值不是appPlugin,且module.json5配置文件中requestPermissions取值包含"ohos.permission.kernel.SUPPORT_PLUGIN"时,该参数必填。 |
| --exist-src-path | 否 | NA | 指定增量打包时的源HSP包路径,该路径必须指向一个已存在的、有效的.hsp文件。当--lib-path-retain配置为true时,打包工具会直接拷贝源HSP包中的libs目录,不再打包--lib-path指定的libs目录,该特性称为增量打包。当--lib-path-retain配置为false时,正常打包--lib-path指定的libs目录,该参数无效。当libs目录中so文件压缩耗时比较久时,使用增量打包可以提升打包速度。 从API version 22开始支持该参数。 |
| --lib-path-retain | 否 | boolean | 是否对libs目录做增量打包。为true时表示对libs目录做增量打包,直接拷贝--exist-src-path指向的源HSP中的libs目录,不再打包--lib-path指定的libs目录;为false时表示不做增量打包,打包--lib-path指向的目录。默认值为false。此参数必须与--exist-src-path配套使用,单独设置不生效。 从API version 22开始支持该参数。 |
App打包指令
开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的App包。App包用于上架应用市场。
表4 App打包合法性校验规则
| HAP/HSP的module.json中的被校验字段 | 校验规则 |
|---|---|
| module下的name字段 | 要求所有HAP/HSP的name字段值均不相同。 |
| bundleName | 要求所有HAP/HSP的bundleName字段值均保持一致。 |
| bundleType | 要求所有HAP/HSP的bundleType字段值均保持一致。 |
| versionCode | 要求所有HAP/HSP的versionCode字段值均保持一致。 |
| debug | 从API version 20开始,要求所有HAP的debug字段值均保持一致,如果HAP的debug字段值为false,HSP的debug字段值也必须为false。如果HAP的debug字段值为true,对HSP的debug字段值无要求。 对于API version 19及之前版本,要求所有HAP/HSP的debug字段值均保持一致。 |
| minAPIVersion | 从API version 20开始,要求所有HAP的minAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 19及之前版本,要求所有HAP/HSP的minAPIVersion字段值均保持一致。 |
| minCompatibleVersionCode | 从API version 16开始,要求所有HAP的minCompatibleVersionCode字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 15及之前版本,要求所有HAP/HSP的minCompatibleVersionCode字段值均保持一致。 |
| targetAPIVersion | 从API version 16开始,要求所有HAP的targetAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 15及之前版本,要求所有HAP/HSP的targetAPIVersion字段值均保持一致。 |
| versionName | 从API version 12开始,不再对versionName校验。 |
说明:
- module.json文件为DevEco Studio编译构建产物,其中的字段与配置文件的对应关系,请参考表1 module.json与配置文件属性的对照表。
打包App时的压缩规则: 打包App时,对release模式的HAP、HSP包会进行压缩,对debug模式的HAP、HSP包不会压缩。
说明:
若HAP/HSP中已压缩的so文件,在打包APP时再次压缩,将不会有明显体积缩减。
示例:
java -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>] [--replace-pack-info false]
表5 App打包指令参数说明
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | app | 多个HAP需满足HAP的合法性校验。 |
| --hap-path | 否 | NA | HAP包文件路径,文件名必须以.hap为后缀。如果是多个HAP包需要用“,”分隔。 HAP包文件路径也可以是目录。 |
| --hsp-path | 否 | NA | HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要用“,”分隔。 HSP包文件路径也可以是目录。 |
| --pack-info-path | 是 | NA | 文件名必须为pack.info。 |
| --out-path | 是 | NA | 目标文件路径,文件名必须以.app为后缀。 |
| --signature-path | 否 | NA | 签名路径。 |
| --certificate-path | 否 | NA | 证书路径。 |
| --pack-res-path | 否 | NA | pack.res快照文件路径。 |
| --force | 否 | boolean | 当目标文件路径已存在时,控制是否强制执行覆盖。当--out-path目标文件打包前已存在,该参数为true时,覆盖写入;为false时,终止打包过程并报错。当--out-path目标文件打包前不存在,正常打包,该参数无效。默认值为false。 |
| --encrypt-path | 否 | NA | 文件名必须为encrypt.json 。 |
| --pac-json-path | 否 | NA | pac.json文件路径,文件名必须为pac.json。 从API version 20开始支持该参数。 |
| --atomic-service-entry-size-limit | 否 | NA | 设置元服务entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。如果entry包是release模式(module.json5文件中type字段值为entry,且app.json5中debug字段的值为false),该限制作用于打包app时压缩后的entry包大小(包含其依赖包的大小)。 |
| --atomic-service-non-entry-size-limit | 否 | NA | 设置元服务非entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。如果非entry包是release模式(module.json5文件中type字段值不是entry,且app.json5中debug字段的值为false),该限制作用于打包app时压缩后的非entry包大小(包含其依赖包的大小)。 |
| --replace-pack-info | 否 | boolean | 打包APP时,是否使用由--pack-info-path参数指定的pack.info文件替换HAP、HSP包中的pack.info文件。如果为true表示替换,false表示不替换,默认值为true。 从API version 22开始支持该参数。 |
| --stat-duplicate | 否 | boolean | 打包完成后,是否扫描重复so文件,该参数可用于识别重复so,以减小包大小。取值为true时,执行扫描,扫描完成会在--out-path参数指定的输出文件所在目录下生成scan_report目录,其中包含文件名为scan_result的重复so文件扫描报告,并在告警中打印scan_report目录路径。取值为false时,不执行扫描。默认值为false。从API version 23开始支持该参数。 |
多工程打包指令
多工程打包适用于多个团队开发同一个应用,但不方便共享代码的情况。开发者通过传入已经打好的HAP、HSP和App包,将多个包打成一个最终的App包,并上架应用市场。
表6 多工程打包合法性校验规则
| HAP/HSP的module.json中的被校验字段 | 校验规则 |
|---|---|
| module下的name字段 | 要求所有HAP/HSP的name字段值均不相同。 |
| bundleName | 要求所有HAP/HSP的bundleName字段值均保持一致。 |
| bundleType | 要求所有HAP/HSP的bundleType字段值均保持一致。 |
| versionCode | 要求所有HAP/HSP的versionCode字段值均保持一致。 |
| debug | 从API version 20开始,要求所有HAP的debug字段值均保持一致,如果HAP的debug字段值为false,HSP的debug字段值也必须为false。如果HAP的debug字段值为true,对HSP的debug字段值无要求。 对于API version 19及之前版本,要求所有HAP/HSP的debug字段值均保持一致。 |
| minAPIVersion | 从API version 20开始,要求所有HAP的minAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 19及之前版本,要求所有HAP/HSP的minAPIVersion字段值均保持一致。 |
| minCompatibleVersionCode | 从API version 16开始,要求所有HAP的minCompatibleVersionCode字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 15及之前版本,要求所有HAP/HSP的minCompatibleVersionCode字段值均保持一致。 |
| targetAPIVersion | 从API version 16开始,要求所有HAP的targetAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 15及之前版本,要求所有HAP/HSP的targetAPIVersion字段值均保持一致。 |
| versionName | 从API version 12开始,不再对versionName校验。 |
说明:
- module.json文件为DevEco Studio编译构建产物,其中的字段与配置文件的对应关系,请参考表1 module.json与配置文件属性的对照表。
示例:
java -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>]
表7 多工程打包指令参数说明
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | multiApp | 打包类型,在将多个HAP打入同一个App时,需保证每个HAP满足合法性校验规则。 |
| --hap-list | 否 | HAP的路径 | HAP包文件路径,文件名必须以.hap为后缀。如果是多个HAP包需要“,”分隔。 HAP文件路径也可以是目录。 |
| --hsp-list | 否 | HSP的路径 | HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要“,”分隔。 HSP文件路径也可以是目录。 |
| --app-list | 否 | App的路径 | App文件路径,文件名必须以.app为后缀。如果是多个App包需要用“,”分隔。 App文件路径也可以是目录。 --hap-list,--hsp-list,--app-list不可以都不传。 |
| --out-path | 是 | NA | 目标文件路径,文件名必须以.app为后缀。 |
| --force | 否 | boolean | 当目标文件路径已存在时,控制是否强制执行覆盖。当--out-path目标文件打包前已存在,该参数为true时,覆盖写入;为false时,终止打包过程并报错。当--out-path目标文件打包前不存在,正常打包,该参数无效。默认值为false。 |
| --encrypt-path | 否 | encrypt.json的路径 | 文件名必须为encrypt.json。 |
| --pac-json-path | 否 | NA | pac.json文件路径,文件名必须为pac.json。 最终app产物中pac.json文件只来源于该参数,不配置的话,最终app产物不包含该文件。 --app-list参数指定的app包中的pac.json不会打包进最终app。 从API version 20开始支持该参数。 |
| --atomic-service-entry-size-limit | 否 | NA | 设置元服务entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。如果entry包是release模式(module.json5文件中type字段值为entry,且app.json5中debug字段的值为false),该限制作用于打包app时压缩后的entry包大小(包含其依赖包的大小)。 |
| --atomic-service-non-entry-size-limit | 否 | NA | 设置元服务非entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。如果非entry包是release模式(module.json5文件中type字段值不是entry,且app.json5中debug字段的值为false),该限制作用于打包app时压缩后的非entry包大小(包含其依赖包的大小)。 |
| --stat-duplicate | 否 | boolean | 打包完成后,是否扫描重复so文件,该参数可用于识别重复so,以减小包大小。取值为true时,执行扫描,扫描完成会在--out-path参数指定的输出文件所在目录下生成scan_report目录,其中包含文件名为scan_result的重复so文件扫描报告,并在告警中打印scan_report目录路径。取值为false时,不执行扫描。默认值为false。从API version 23开始支持该参数。 |
HQF打包指令
HQF包适用于增量调试场景。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的HQF包。
说明:
- HQF包不支持上架应用市场,仅用于增量调试。
示例:
java -jar app_packing_tool.jar --mode hqf --json-path <path> [--lib-path <path>] [--ets-path <path>] [--resources-path <path>] --out-path <path> [--force true]
表8 HQF打包指令参数说明
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | hqf | 打包类型。 |
| --json-path | 是 | NA | .json文件路径,文件名必须为patch.json。 |
| --lib-path | 否 | NA | lib库文件的路径。 |
| --ets-path | 否 | NA | 存放ets文件目录路径。 |
| --resources-path | 否 | NA | resources资源包路径。 |
| --out-path | 是 | NA | 目标文件路径,文件名必须以.hqf为后缀。 |
| --force | 否 | boolean | 当目标文件路径已存在时,控制是否强制执行覆盖。当--out-path目标文件打包前已存在,该参数为true时,覆盖写入;为false时,终止打包过程并报错。当--out-path目标文件打包前不存在,正常打包,该参数无效。默认值为false。 |
APPQF打包指令
APPQF包由一个或多个HQF文件组成。这些HQF包在应用市场会从APPQF包中拆分出来,再被分发到具体的设备上。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的APPQF包。
APPQF打包合法性校验
- 在打包生成APPQF包时,确保每个HQF的patch.json文件中的versionName、versionCode、patchVersionName、patchVersionCode保持一致。
- 所有HQF不得重复。HQF重复是指同时满足以下两个条件:
- 两个HQF的patch.json文件中module下的name字段相同。
- 两个HQF的patch.json文件中module下的deviceTypes属性相交(至少存在一个相同的设备类型)。
示例:
java -jar app_packing_tool.jar --mode appqf --hqf-list <path> --out-path <path> [--force true]
表9 APPQF打包指令参数说明
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | appqf | 打包类型。 |
| --hqf-list | 是 | NA | HQF文件路径,多个HQF以英文逗号隔开。 |
| --out-path | 是 | NA | 目标文件路径,文件名必须以.appqf为后缀。 |
| --force | 否 | boolean | 当目标文件路径已存在时,控制是否强制执行覆盖。当--out-path目标文件打包前已存在,该参数为true时,覆盖写入;为false时,终止打包过程并报错。当--out-path目标文件打包前不存在,正常打包,该参数无效。默认值为false。 |
版本归一指令(versionNormalize)
同一个App中,所有HAP、HSP包的versionName和versionCode需要保持一致。当只有一个HAP或HSP需要修改升级时,可以调用此命令,将多个HAP、HSP的版本统一。本命令会修改所传入的HAP、HSP的版本号和版本名称,并在指定目录生成修改后的同名HAP、HSP,以及一个version_record.json文件,用于记录所有HAP、HSP原有的版本号、版本名称。
示例:
java -jar app_packing_tool.jar --mode versionNormalize --input-list 1.hap,2.hsp --version-code 1000001 --version-name 1.0.1 --out-path out
表10 versionNormalize指令参数说明
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | versionNormalize | 命令类型。 |
| --input-list | 是 | HAP或HSP的路径 | 1. HAP或HSP包文件路径,文件名必须以.HAP或.HSP为后缀。如果是多个HAP或HSP包需要“,”分隔。 2. 传入目录时,会读取目录下所有的HAP和HSP文件。 |
| --version-code | 是 | 版本号 | 指定的版本号,HAP、HSP的版本号会被修改为该版本。需要为整数,且不小于所有传入的HAP、HSP的版本号。 |
| --version-name | 是 | 版本名称 | 指定的版本名称,HAP、HSP的版本名称会被修改为该版本名称。 |
| --out-path | 是 | NA | 目标文件路径,需要为一个目录。 |
包名归一指令(packageNormalize)
此命令可以修改传入的HSP的包名和版本号,并在指定目录生成修改后的同名HSP。
示例:
java -jar app_packing_tool.jar --mode packageNormalize --hsp-list 1.hsp,2.hsp --bundle-name com.example.myapplication --version-code 1000001 --out-path out
表11 参数含义及规范
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | packageNormalize | 命令类型。 |
| --hsp-list | 是 | HSP的路径 | 1. HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要“,”分隔。 2. HSP包目录。仅处理目录内以.hsp为后缀的文件。 |
| --bundle-name | 是 | 包名 | 指定的包名,HSP的包名会被修改为指定的包名。 |
| --version-code | 是 | 版本号 | 指定的版本号,HSP的版本号会被修改为该版本号。需要为整数,且大于0。 |
| --out-path | 是 | NA | 目标文件路径,需要为一个目录。 |
通用归一指令(generalNormalize)
此命令可以修改传入的HAP/HSP的 deviceType/bundleName/versionName/versionCode/minCompatibleVersionCode/minAPIVersion/targetAPIVersion/
apiReleaseType/bundleTypes/installationFree/deliveryWithInstall参数,并在指定目录生成修改后的同名HAP/HSP,以及一个general_record.json文件,用于记录所有HAP、HSP原有的参数名称和moduleName。上述设置的参数应符合正确打包规范,否则会在指定目录生成HAP/HSP失败,指定目录不会有文件生成。
说明:
- 从API version 20开始支持通用归一化指令。
示例:
java -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
表12 参数含义及规范
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | generalNormalize | 指令类型,表示通用归一化指令。 |
| --input-list | 是 | HAP或HSP的路径 | 1. HAP或HSP包文件路径,文件名必须以.hap或.hsp为后缀。多个HAP或HSP包文件路径之间使用“,”分隔。 2. 传入目录时,会读取目录下所有的HAP和HSP文件。 |
| --bundle-name | 否 | 包名 | 指定的Bundle名称,传入的包的Bundle名称会被修改为该Bundle名称。指定的值不能为空,该字段的详细定义和规格请参考app.json5中的bundleName字段。 |
| --version-code | 否 | 版本号 | 指定的版本号,传入的包的版本号会被修改为该版本号。取值范围为0~2147483647的整数,指定的值不能为空值,该字段的详细定义和规格请参考app.json5中的versionCode字段。 |
| --version-name | 否 | 版本名称 | 指定的版本名称,传入的包的版本名称会被修改为该版本名称。指定的值不能为空,该字段的详细定义和规格请参考app.json5中的versionName字段。 |
| --min-compatible-version-code | 否 | 能够兼容的最低历史版本号 | 指定的最低历史版本号,传入的包的最低历史版本号会被修改为该版本号。取值范围为0~2147483647的整数,指定的值不能为空值,该字段的详细定义和规格请参考app.json5中的minCompatibleVersionCode字段。 |
| --min-api-version | 否 | SDK的API最小版本 | 指定的SDK的API最小版本,传入的包的SDK的API最小版本会被修改为该版本。取值范围为0~2147483647的整数,指定的值不能为空值,该字段的详细定义和规格请参考app.json5中的minAPIVersion字段。 |
| --target-api-version | 否 | API目标版本 | 指定的API目标版本,传入的包的API目标版本会被修改为该版本。取值范围为0~2147483647的整数,指定的值不能为空值,该字段的详细定义和规格请参考app.json5中的targetAPIVersion字段。 |
| --api-release-type | 否 | API目标版本的类型 | 指定的API目标版本的类型,传入的包的API目标版本的类型会被修改为该类型。指定的值不能为空,该字段的详细定义和规格请参考app.json5中的apiReleaseType字段。 |
| --bundle-type | 否 | Bundle类型 | 指定的Bundle类型,传入的包的Bundle类型会被修改为该类型。指定的值不能为空,该字段的详细定义和规格请参考app.json5中的bundleType字段。 |
| --installation-free | 否 | 是否支持免安装特性 | 指定的免安装特性,传入的包的免安装特性会被修改为该类型。指定的值不能为空,该字段的详细定义和规格请参考Stage模型module.json5/FA模型config.json中的installationFree字段。 |
| --delivery-with-install | 否 | 当前HAP是否在用户主动安装HAP所在应用的时候一起安装 | 指定的HAP是否需要一起安装,传入的包的deliveryWithInstall会被修改为该类型。指定的值不能为空,该字段的详细定义和规格参考Stage模型module.json5/FA模型config.json中的deliveryWithInstall字段。 |
| --device-types | 否 | 允许Ability运行的设备类型 | 指定的设备类型,传入的包的设备类型会被修改为该类型。指定的值不能为空,该字段的详细定义和规格请参考Stage模型module.json5/FA模型config.json中的deviceTypes字段,传入值的形式为字符串格式,多个设备类型之间使用“,”分隔。 |
| --out-path | 是 | NA | 目标文件路径,需要为一个有读写权限的目录。 |
res模式打包指令
此命令用于打包元服务快照资源。
示例:
java -jar app_packing_tool.jar --mode res --entrycard-path <path> --pack-info-path <path> --out-path <path> [--force true]
表13 参数含义及规范
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | res | 命令类型。 |
| --entrycard-path | 是 | NA | 快照目录的路径。 |
| --pack-info-path | 是 | NA | pack.info文件路径。 |
| --out-path | 是 | NA | 目标文件路径,文件名必须以.res为后缀。 |
| --force | 否 | boolean | 当目标文件路径已存在时,控制是否强制执行覆盖。当--out-path目标文件打包前已存在,该参数为true时,覆盖写入;为false时,终止打包过程并报错。当--out-path目标文件打包前不存在,正常打包,该参数无效。默认值为false。 |
fastApp模式打包指令
开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、HAP、HSP包文件目录路径,生成所需的App包。App包用于上架应用市场。
表14 fastApp打包合法性校验规则
| HAP/HSP的module.json中的被校验字段 | 校验规则 |
|---|---|
| module下的name字段 | 要求所有HAP/HSP的name字段值均不相同。 |
| bundleName | 要求所有HAP/HSP的bundleName字段值均保持一致。 |
| bundleType | 要求所有HAP/HSP的bundleType字段值均保持一致。 |
| versionCode | 要求所有HAP/HSP的versionCode字段值均保持一致。 |
| debug | 从API version 20开始,要求所有HAP的debug字段值均保持一致,如果HAP的debug字段值为false,HSP的debug字段值也必须为false。如果HAP的debug字段值为true,对HSP的debug字段值无要求。 对于API version 19及之前版本,要求所有HAP/HSP的debug字段值均保持一致。 |
| minAPIVersion | 从API version 20开始,要求所有HAP的minAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 19及之前版本,要求所有HAP/HSP的minAPIVersion字段值均保持一致。 |
| minCompatibleVersionCode | 从API version 16开始,要求所有HAP的minCompatibleVersionCode字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 15及之前版本,要求所有HAP/HSP的minCompatibleVersionCode字段值均保持一致。 |
| targetAPIVersion | 从API version 16开始,要求所有HAP的targetAPIVersion字段值均保持一致,且均不低于所有HSP对应字段的最大值。 对于API version 15及之前版本,要求所有HAP/HSP的targetAPIVersion字段值均保持一致。 |
说明:
- module.json文件为DevEco Studio编译构建产物,其中的字段与配置文件的对应关系,请参考表1 module.json与配置文件属性的对照表。
打包App时的压缩规则: 打包App时,对release模式的HAP、HSP包会进行压缩,对debug模式的HAP、HSP包不会压缩。
说明:
若HAP/HSP中已压缩的so文件,在打包APP时再次压缩,将不会有明显体积缩减。
示例:
java -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>]
表15 参数含义及规范
| 指令 | 是否必选项 | 选项 | 描述 |
|---|---|---|---|
| --mode | 是 | fastApp | 多个HAP需满足HAP的合法性校验。 |
| --hap-path | 否 | NA | HAP包文件目录路径,目录内要包含一个完整的HAP包的所有文件。允许传入多个路径,多个路径需要用英文“,”分隔。 |
| --hsp-path | 否 | NA | 1. HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要用英文“,”分隔。 2. HSP包文件目录路径,目录内要包含一个完整的HSP包的所有文件。允许传入多个路径,多个路径需要用英文“,”分隔。 |
| --pack-info-path | 是 | NA | 文件名必须为pack.info。 |
| --out-path | 是 | NA | 目标文件路径,文件名必须以.app为后缀。 |
| --signature-path | 否 | NA | 签名路径。 |
| --certificate-path | 否 | NA | 证书路径。 |
| --pack-res-path | 否 | NA | pack.res快照文件路径。 |
| --force | 否 | boolean | 当目标文件路径已存在时,控制是否强制执行覆盖。当--out-path目标文件打包前已存在,该参数为true时,覆盖写入;为false时,终止打包过程并报错。当--out-path目标文件打包前不存在,正常打包,该参数无效。默认值为false。 |
| --encrypt-path | 否 | NA | 文件名必须为encrypt.json。 |
| --pac-json-path | 否 | NA | pac.json文件路径,文件名必须为pac.json。 从API version 20开始支持该参数。 |
| --atomic-service-entry-size-limit | 否 | NA | 设置元服务entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。如果entry包是release模式(module.json5文件中type字段值为entry,且app.json5中debug字段的值为false),该限制作用于打包app时压缩后的entry包大小(包含其依赖包的大小)。 |
| --atomic-service-non-entry-size-limit | 否 | NA | 设置元服务非entry包大小(包含其依赖包的大小)限制,仅Stage模型应用且bundleType为atomicService时生效。取值范围为[0,4194304]的整数,取值为0表示不限制大小,单位KB。不设置该参数时默认值为2048KB。如果非entry包是release模式(module.json5文件中type字段值不是entry,且app.json5中debug字段的值为false),该限制作用于打包app时压缩后的非entry包大小(包含其依赖包的大小)。 |
| --stat-duplicate | 否 | boolean | 打包完成后,是否扫描重复so文件,该参数可用于识别重复so,以减小包大小。取值为true时,执行扫描,扫描完成会在--out-path参数指定的输出文件所在目录下生成scan_report目录,其中包含文件名为scan_result的重复so文件扫描报告,并在告警中打印scan_report目录路径。取值为false时,不执行扫描。默认值为false。从API version 23开始支持该参数。 |
扫描重复so文件
通过app打包指令、fastApp打包指令或多工程打包指令打包生成App包时,设置--stat-duplicate为true开启扫描重复so文件,系统将在打包成功后生成扫描报告。识别重复so后,开发者可根据实际需求减小包大小。扫描报告将存放在打包生成的App包所在目录下的scan_report目录中。扫描报告的内容结构如表16所示,重复so文件的特征信息结构如表17所示。扫描报告的示例如下:
JSON统计结果:
[{
"result":[{
"md5":"975c41f5727b416b1ffefa5bb0f073b2",
"size":1108880,
"files":[
"/application-entry-default.hap/libs/armeabi-v7a/example.so",
"/entry-default.hap/libs/armeabi-v7a/example.so"
]
}],
"startTime": "2025-11-13 16:02:48.381",
"stopTime": "2025-11-13 16:02:48.381",
"taskDesc": "find the duplicated so"
}]
表16 重复so文件扫描报告字段信息
| 字段 | 类型 | 描述 |
|---|---|---|
| result | Struct | 重复so文件的特征信息,包含MD5值、文件大小和文件路径,具体内容参考表17。 |
| startTime | String | 任务开始时间。 |
| stopTime | String | 任务结束时间。 |
| taskDesc | String | 任务描述,输出"find the duplicated so"。 |
表17 重复so文件的特征字段信息
| 字段 | 类型 | 描述 |
|---|---|---|
| md5 | String | 重复so文件的MD5值。 |
| size | int | 重复so文件的大小。单位为Byte。 |
| files | Vector<String> | 重复so文件的路径。 |
打包工具错误码
10010001 执行打包工具失败
错误信息
Execute packing tool failed.
错误描述
执行打包工具失败。
可能原因
- 打包文件合法性校验失败。
- 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
处理步骤
- 根据报错信息检查app.json5和module.json5中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
- 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
10012001 执行压缩操作失败
错误信息
Execute compress process failed.
错误描述
执行打包操作时,例如打包HAP或App,执行压缩操作失败,导致打包中断。
可能原因
- 打包文件合法性校验失败。
- 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
处理步骤
- 根据报错信息检查app.json5和module.json5中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
- 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
10012002 HAP包压缩失败
错误信息
Compress Stage Hap failed.
错误描述
打包HAP时,执行压缩Stage模型的HAP包操作失败。
可能原因
- Stage模型HAP包打包文件合法性校验失败。
- 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
处理步骤
- 根据报错信息检查app.json5和module.json5中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
- 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
10012003 校验HAP信息失败
错误信息
Verify stage hap info failed.
错误描述
打包Stage模型HAP包时,配置信息校验失败。
可能原因
module.json5中atomicService或continueBundleName存在配置错误,或app.json5中asanEnabled或hwasanEnabled存在配置错误。
处理步骤
参考asanEnabled配置错误码、hwasanEnabled配置错误码、atomicService配置错误码、continueBundleName配置错误码,更改配置项。
10012004 检查参数asanEnabled失败
错误信息
Check asanEnabled failed.
错误描述
打包HAP/HSP时,app.json5中asanEnabled配置错误。
可能原因
asanEnabled和tsanEnabled被同时设置为true。
处理步骤
检查app.json5,修改asanEnabled和tsanEnabled,确保二者不会同时为true。
10012005 检查参数hwasanEnabled失败
错误信息
Check hwasanEnabled failed.
错误描述
打包HAP/HSP时,app.json5中hwasanEnabled配置错误。
可能原因
hwasanEnabled和asanEnabled被同时配置为true。hwasanEnabled和tsanEnabled被同时配置为true。hwasanEnabled和GWPAsanEnabled被同时配置为true。
处理步骤
检查app.json5,确保asanEnabled、tsanEnabled、GWPAsanEnabled三项的中任一项与hwasanEnabled,不会同时配置为true。
10012006 检查atomicService失败
错误信息
Check atomicService failed.
错误描述
打包HAP/HSP时,atomicService配置检查失败。
可能原因
module.json5中entry模块未配置ability,导致atomicService配置检查失败。- 当
app.json5中bundleType配置为atomicService时,但module.json5中installationFree为false。
处理步骤
- 检查module.json5,确保
module.json5文件中正确配置了abilities标签,并且至少包含一个ability,详细请参见abilities标签。 - 检查
module.json5和app.json5,当bundleType为atomicService时,确保installationFree配置为true,反之,需要配置为false。
10012007 检查continueBundleName无效
错误信息
Check continueBundleName invalid.
错误描述
打包HAP/HSP时,continueBundleName配置检查失败。
可能原因
module.json5中的continueBundleName与app.json5中bundleName相同。
处理步骤
修改continueBundleName,确保其与app.json5中的bundleName不同。
10012008 检查overlay失败
错误信息
Check whether is an overlay hsp failed.
错误描述
检查是否是overlay特性HSP包失败。
可能原因
-
在
module.json5中同时配置了targetModuleName与requestPermissions。 -
module.json5中的targetModuleName和module.json5中的name相同。 -
在
module.json5中配置了targetPriority时,未配置targetModuleName。 -
在
app.json5中配置了targetBundleName时,module.json5中未配置targetModuleName。 -
在
app.json5中的targetBundleName与bundleName配置相同。
处理步骤
- 检查module.json5,确保
targetModuleName和requestPermissions不会同时出现。 - 检查
module.json5,确保targetModuleName和name不同。 - 检查
module.json5,确保配置targetPriority时,同时配置了targetModuleName。 - 检查app.json5和
module.json5,确保配置targetBundleName时,同时配置了targetModuleName。 - 检查
app.json5,确保targetBundleName与bundleName不同。
10012009 执行压缩操作时异常
错误信息
Process compress exception.
错误描述
执行压缩HAP/HSP/App操作时存在异常。
可能原因
- 打包文件合法性校验失败。
- 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
处理步骤
- 根据报错信息检查app.json5和module.json5中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
- 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
10012015 构建App包失败
错误信息
Compress app file failed.
错误描述
构建App包失败。
可能原因
- App打包文件合法性校验失败。
- 需要打包的文件正在被其他程序使用,例如压缩软件或文件管理器。
处理步骤
- 根据报错信息检查app.json5和module.json5中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
- 检查是否有程序(如压缩软件、文件管理器)占用打包文件,关闭相关进程后重试。
10012017 检查SharedAPP无效
错误信息
Check shared App mode invalid.
错误描述
构建bundleType为shared的App包时,检查HSP包无效。
可能原因
-
存在两个以上的HSP包。例如下图使用DevEco Studio构建App时,工程中包含了两个HSP包library和library1,此时打包APP包失败。

-
HSP包在
module.json5中配置了dependencies。
处理步骤
- 检查打包文件,确保
bundleType为shared的App包中,HSP包不超过一个。 - 检查打包文件,删除HSP包中module.json5配置的
dependencies。
10012022 校验Stage HSP失败
错误信息
Verify stage hsp info failed.
错误描述
打包HSP时,校验Stage模型HSP包失败。
可能原因
module.json5中的atomicService、continueBundleName存在配置错误,或app.json5中的asanEnabled、hwasanEnabled存在配置错误。- overlay配置出错。
处理步骤
- 参考asanEnabled配置错误码、hwasanEnabled配置错误码、atomicService配置错误码、continueBundleName配置错误码,更改配置项。
- 参考检查overlay失败,更改配置项。
10012024 校验元服务大小失败
错误信息
Check atomicService size failed.
错误描述
打包App时,元服务包的大小超出了限制。
可能原因
元服务包及依赖的共享库或资源文件大小超出了限制。具体限制请参考表5 App打包指令参数说明中--atomic-service-entry-size-limit和--atomic-service-non-entry-size-limit参数描述。
处理步骤
优化并减少包的大小,例如删除不必要的资源、精简代码或减少依赖。
10012054 校验HAR去重属性失败
错误信息
Check deduplicateHar field failed.
错误描述
打包HSP/HAP时,校验deduplicateHar属性失败。
可能原因
HSP/HAP模块module.json文件中minAPIVersion小于21,且deduplicateHar的值为true。
处理步骤
打包HSP/HAP时,如果deduplicateHar的属性值为true时,则要求minAPIVersion大于等于21。
10013005 检查模块bundleType失败
错误信息
Failed to parse module.json and bundleType.
错误描述
检查模块bundleType失败。
可能原因
不符合配置要求,例如:
- 模块的app.json5配置文件中
bundleType为app,但module.json5中的installationFree属性值为true。 - 模块的app.json5配置文件中
bundleType为atomicService,但module.json5中的installationFree属性值为false。 - 模块的app.json5配置文件中
bundleType为shared,但module.json5中的type属性值不是shared。
处理步骤
- 确保app.json5配置文件中
bundleType为app时,module.json5中的installationFree属性值为false。 - 确保app.json5配置文件中
bundleType为atomicService时,module.json5中的installationFree属性值为true。 - 确保app.json5配置文件中
bundleType为shared时,module.json5中的type属性值也是shared。 - 当有多条报错信息时,优先根据第一条报错信息进行排查。
10013006 检查entry模块中的ability失败
错误信息
check entry module at least one ability failed.
错误描述
Entry类型包中没有ability。
可能原因
Entry类型包中不存在ability,该错误可能是由于module.json5未配置abilities或者abilities配置为空引起。
处理步骤
检查module.json5,确保Entry类型包abilities正确配置了ability。
10013007 检查installationFree错误
错误信息
Check module atomicService installationFree invalid.
错误描述
打包HAP/HSP时,检查atomicService和installationFree配置出错。
可能原因
app.json5中的bundleType配置了无效值。- 当
bundleType为shared时,module.json5中installationFree未设置为false。 - 当
installationFree为true时,bundleType未设置为atomicService。
处理步骤
- 检查app.json5,确保
bundleType设置为app,atomicService,shared,appService之一。 - 如果
bundleType为shared,确保module.json5中的installationFree设置为false。 - 如果
installationFree为true,确保bundleType设置为atomicService。
10014001 未找到可用文件
错误信息
File available not found exception.
错误描述
使用打包工具打包时,需要打包的文件不可使用。
可能原因
- 指定的文件路径错误或文件不存在。
- 文件正在被其他程序使用,例如压缩软件或文件管理器。
- 当前用户没有访问该文件的权限。
处理步骤
- 确认提供的文件路径正确,并检查该文件是否存在。
- 检查是否有程序(如压缩软件、文件管理器)占用文件,关闭相关进程后重试。
- 检查并调整文件的访问权限,例如当前用户可以读取、修改、删除文件。
10016001 校验应用属性失败
错误信息
App fields is invalid.
错误描述
打包App时,校验应用属性失败。
可能原因
- 有两个HAP的minCompatibleVersionCode属性值不相同。
- 有两个HAP的targetAPIVersion属性值不相同。
- 有两个HAP的minAPIVersion属性值不相同。
- 有两个HAP的debug属性值不相同。
- HAP的minCompatibleVersionCode/targetAPIVersion/minAPIVersion属性值小于某HSP。
- HAP的debug属性值为false时,存在HSP的debug属性值为true。
处理步骤
根据日志中“Error Message:”信息,确认错误信息及存在问题的HAP/HSP名。
- 确保参与打包的HAP的minCompatibleVersionCode属性值相同。
- 确保参与打包的HAP的targetAPIVersion属性值相同。
- 确保参与打包的HAP的minAPIVersion属性值相同。
- 确保参与打包的HAP的debug属性值相同。
- 确保HAP的minCompatibleVersionCode/targetAPIVersion/minAPIVersion属性值大于等于所有HSP的对应属性值。
- 确保HAP的debug属性值为false时,所有HSP的debug属性值为false。
10016002 HAP/HSP属性不同
错误信息
Some app variable is different.
错误描述
打包App时,HAP/HSP属性不同。
可能原因
- 当前参与打包的HAP/HSP中,存在模块的bundleName与其他模块不一致。
- 当前参与打包的HAP/HSP中,存在模块的bundleType与其他模块不一致。
- 当前参与打包的HAP/HSP中,存在模块的versionCode与其他模块不一致。
- 当前参与打包的HAP/HSP中,存在模块的apiReleaseType(app.json5配置文件中的属性)与其他模块不一致。
- 当前参与打包的HAP/HSP中,存在模块的targetBundleName(app.json5配置文件中的属性)与其他模块不一致。
- 当前参与打包的HAP/HSP中,存在模块的targetPriority(app.json5配置文件中的属性)与其他模块不一致。
- 当前参与打包的HAP中,存在模块的multiAppMode(app.json5配置文件中的属性)与其他模块不一致。
处理步骤
- 确保当前参与打包的HAP/HSP的bundleName一致。
- 确保当前参与打包的HAP/HSP的bundleType一致。
- 确保当前参与打包的HAP/HSP的versionCode一致。
- 确保当前参与打包的HAP/HSP的apiReleaseType一致。
- 确保当前参与打包的HAP/HSP的targetBundleName一致。
- 确保当前参与打包的HAP/HSP的targetPriority一致。
- 确保当前参与打包的HAP的multiAppMode一致。
10016003 分发策略相交校验失败
错误信息
Check two distroFilter policy disjoint invalid.
错误描述
HAP唯一性校验需要判断分发策略是否相交,由于分发策略配置错误,导致无法判断分发策略是否相交。
可能原因
分发策略policy、value标签为空或为无效值。
处理步骤
检查分发策略相关配置,确保policy的值为include或exclude,value取值参见distributionFilter标签。
10016006 检查HAP包无效
错误信息
Verify hap info is invalid.
错误描述
构建App包时,校验用于打包的HAP/HSP失败。
可能原因
多个HAP/HSP包配置之间存在冲突。
处理步骤
根据报错信息检查app.json5和module.json5中的配置项是否准确。当有多条报错信息时,优先根据第一条报错信息进行排查。
10016007 检查entry模块无效
错误信息
Check entry module invalid.
错误描述
构建App包时,当工程中存在多个Entry类型HAP包时,检查配置信息失败。
可能原因
不符合HAP唯一性校验规则。
处理步骤
参考HAP唯一性校验,调整工程中的Entry类型HAP配置。
10016009 检查依赖错误
错误信息
Check dependency list is invalid.
错误描述
构建App包时,模块依赖关系检查失败。
可能原因
- 模块间存在循环依赖,例如:模块library1的
module.json5中dependencies配置了library2,同时模块library2中的dependencies配置了library1,则这两个模块之间构成循环依赖。 module.json5配置中依赖的模块对应的module.json5中的type为entry或feature。
处理步骤
- 检查module.json5中的
dependencies,删除循环依赖,确保App中不存在循环依赖。 - 检查
module.json5中的dependencies的配置,删除对entry或feature类型模块的依赖。
10016010 检查元服务无效
错误信息
Check atomicservice is invalid.
错误描述
构建App包时,检查元服务无效。
可能原因
module.json5中preloads配置的moduleName错误。
处理步骤
检查module.json5中的preloads属性下的moduleName,不能配置为自身模块module.json5中的name,且moduleName对应的模块必须存在。
10016011 检查元服务预加载无效
错误信息
Atomicservice preloads is invalid.
错误描述
构建bundleType为atomicService类型的App包时,检查元服务包预加载的模块无效。
可能原因
- 元服务包
module.json5中的preloads配置了重复的moduleName。 - 元服务包
preloads配置的moduleName,和其他元服务包中module.json5中的name不匹配。 - 元服务包
preloads配置的moduleName,和自身module.json5中的name相同。
处理步骤
检查module.json5中元服务preloads属性,确保没有配置重复的模块,配置所有的模块都存在且不能配置自身的模块名。
10016012 目标模块不存在
错误信息
TargetModuleName is not exist.
错误描述
构建App时,模块中配置了目标模块,但未找到该模块。
可能原因
module.json5中配置了targetModuleName,但和其他模块对应module.json5中的name均不同。
处理步骤
检查targetModuleName配置项,确保其正确配置(详细请参见module.json5配置文件标签及targetModuleName属性),必要时创建目标模块。
10016014 代理数据不唯一
错误信息
Proxy data uri is not unique.
错误描述
数据代理uri不唯一,存在重复项。
可能原因
module.json5中的proxyData配置的uri存在重复。
处理步骤
检查module.json5,删除proxyData中重复的uri,确保每个uri都是唯一的(详细请参见proxyData标签)。
10016015 ContinueType配置无效
错误信息
Check continueType is invalid.
错误描述
构建App时,检查continueType配置错误。
可能原因
module.json5不同的ability存在重复的continueType配置项。- 不同的
module.json5中同时存在重复的deviceType配置项和continueType配置项。
处理步骤
检查module.json5,删除continueType或deviceType重复的配置项。
10016016 文件大小检查错误
错误信息
Check file size failed.
错误描述
构建元服务类型App时,单个包大小超过限制。
可能原因
单个包大小超过限制。具体限制请参考表5 App打包指令参数说明中--atomic-service-entry-size-limit和--atomic-service-non-entry-size-limit参数描述。
处理步骤
优化并减少对应单个包文件的大小,例如删除不必要的资源、精简代码或压缩文件。
10016018 元服务模块大小检查错误
错误信息
Check the atomicService module size failed.
错误描述
构建元服务类型App时,单个包和其依赖的共享库大小超过限制。
可能原因
单个包和其依赖的共享库总大小超过限制。具体限制请参考表5 App打包指令参数说明中--atomic-service-entry-size-limit和--atomic-service-non-entry-size-limit参数描述。
处理步骤
优化并减少相应包的大小,例如删除不必要的资源、精简代码或减少依赖项。
10016019 检查分发策略无效
错误信息
Check the entry module distributionFilter is invalid.
错误描述
检查Entry类型模块分发策略错误。
可能原因
Entry类型模块分发策略配置存在错误。
处理步骤
检查Entry模块分发策略是否正确配置,例如policy的值应为exclude或include,详细请参考distributionFilter标签。
10011021 通用归一化命令失败
错误信息
Parse and check args invalid in generalNormalize mode.
错误描述
通用归一化命令失败。
可能原因
- 传入的参数类型错误。
- 传入参数范围错误。
- 传入HAP/HSP包不完整,缺少json文件(json文件配置请参考Stage模型module.json5/FA模型config.json)。
处理步骤
检查并传入正确的命令参数和有效的包文件。