打包工具

打包工具用于在程序编译完成后,对编译出的文件等进行打包,以供安装发布。开发者可以使用DevEco Studio进行打包,也可使用打包工具的JAR包进行打包,JAR包通常存放在SDK路径下的toolchains目录中。

打包工具支持生成:Ability类型的模块包(HAP)、静态共享包(HAR)、动态共享包(HSP)、应用程序包(App)、快速修复模块包(HQF)、快速修复包(APPQF)。

HAP打包指令

开发者可以使用打包工具的JAR包对模块进行打包,通过传入打包选项、文件路径,生成所需的HAP包。

  • Stage模型示例:

    java -jar app_packing_tool.jar --mode hap --json-path <option> --resources-path <option> --ets-path <option> --index-path <option> --pack-info-path <option> --out-path <option> --force true
    
  • FA模型示例:

    java -jar app_packing_tool.jar --mode hap --json-path <option> --maple-so-path [option] --profile-path [option] --maple-so-dir [option] --dex-path [option] --lib-path [option] --resources-path [option] --index-path [option] --out-path <option> --force [option]
    

表1 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库文件路径。 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 true或者false 默认值为false,如果为true,表示当目标文件存在时,强制删除。 NA
--an-path NA 存放an文件的路径。 仅stage模型生效
--ap-path NA 存放ap文件的路径。 仅stage模型生效
--dir-list NA 可指定目标文件夹列表,将其打入HAP包内。 NA

HAR打包指令

开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的har包。

示例:

java -jar app_packing_tool.jar --mode har --json-path [option] --jar-path [option]--lib-path [option] --resources-path [option] --out-path [option] --force [option]

表2 HAR打包指令参数说明

指令 是否必选项 选项 描述
--mode har 打包类型。
--json-path NA .json文件路径,FA模型文件名必须为config.json;stage模型文件名必须为module.json。
--jar-path NA jar文件路径,文件名必须以.jar为后缀。如果是多个jar需要用“,”分隔。
jar文件路径也可以为目录。
--lib-path NA lib库文件路径。
--resource-path NA resources资源包路径。
--out-path NA 目标文件路径,文件名必须以.har为后缀。
--force true或者false 默认值为false,如果为true,表示当目标文件存在时,强制删除。

App打包指令

开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的app包。app包用于上架应用市场。

打包APP时HAP的合法性校验: 在对工程内的HAP包打包生成APP包时,需要保证被打包的每个HAP在json文件中配置的bundleName、versionCode、versionName、minCompatibleVersionCode、debug、minAPIVersion、targetAPIVersion、apiReleaseType相同,moduleName唯一。对于FA模型,还需要保证json文件中配置的package唯一。

示例:

java -jar app_packing_tool.jar --mode app --hap-path <option> --hsp-path <option> --out-path <option> --signature-path [option] --certificate-path [option] --pack-info [option]--force [option]

表3 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 证书路径。
--force true或者false 默认值为false,如果为true,表示当目标文件存在时,强制删除。

多工程打包指令

多工程打包适用于多个团队开发同一个应用,但不方便共享代码的情况。开发者通过传入已经打好的HAP、HSP和APP包,将多个包打成一个最终的App包,并上架应用市场。

多工程打包HAP合法性校验: 需要保证被打包的每个HAP在json文件中配置的bundleName、versionCode、versionName、minCompatibleVersionCode、debug属性相同,minAPIVersion、targetAPIVersion、apiReleaseType、compileSdkVersion、compileSdkType相同,moduleName唯一,同一设备entry唯一。对于FA模型,还需要保证json文件中配置的package唯一。

示例:

java -jar app_packing_tool.jar --mode multiApp --hap-list [option] --hsp-list [option] --app-list [option] --out-path <option>

表4 多工程打包指令参数说明

指令 是否必选项 选项 描述
--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 目标文件路径,文件名必须以.hqf为后缀。
--force true或者false 默认值为false,如果为true,表示当目标文件存在时,强制删除。

HQF打包指令

hqf包适用于应用存在一些问题,需要紧急修复的场景。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的hqf包。

示例:

java -jar app_packing_tool.jar --mode hqf --json-path <option> --lib-path <option> --ets-path <option> --out-path <option>

表5 HQF打包指令参数说明

指令 是否必选项 选项 描述
--mode hqf 打包类型。
--json-path NA .json文件路径,文件名必须为patch.json。
--lib-path NA lib库文件的路径。
--ets-path NA 存放ets文件目录路径。
--out-path NA 目标文件路径,文件名必须以.hqf为后缀。
--force true或者false 默认值为false,如果为true,表示当目标文件存在时,强制删除。

APPQF打包指令

appqf包由一个或多个hqf文件组成。这些hqf包在应用市场会从appqf包中拆分出来,再被分发到具体的设备上。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的appqf包。

示例:

java -jar app_packing_tool.jar --mode appqf --hqf-list <option> --out-path <option>

表6 APPQF打包指令参数说明

指令 是否必选项 选项 描述
--mode appqf 打包类型。
--hqf-list NA HQF文件路径,多个HQF以英文逗号隔开。
--out-path NA 目标文件路径,文件名必须以.appqf为后缀。
--force true或者false 默认值为false,如果为true,表示当目标文件存在时,强制删除。

HSP打包指令

hsp包实现了多个hap对文件的共享,开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的hsp包。

示例:

java -jar path\app_packing_tool.jar --mode hsp --json-path <option> --resources-path <option> --ets-path <option> --index-path <option> --pack-info-path <option> --out-path path\out\library.hsp --force true

表7 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库文件路径。
--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 true或者false 默认值为false,如果为true,表示当目标文件存在时,强制删除。

版本归一指令(versionNormalize)

同一个APP中,所有HAP、HSP包的versionName和versionCode需要保持一致。当只有一个HAP或HSP需要修改升级时,可以调用此命令,将多个HAP、HSP的版本统一。本命令会修改所传入的HAP、HSP的版本号和版本名称,并在指定目录生成修改后的同名HAP、HSP,以及一个version_record.json文件,用于记录所有HAP、HSP原有的版本号、版本名称。

示例:

java -jar path\app_packing_tool.jar --mode versionNormalize --input-list 1.hap,2.hsp --version-code 1000001 --version-name 1.0.1 --out-path path\out\

表8 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 目标文件路径,需要为一个目录。