1# 打包工具 2 3打包工具用于在程序编译完成后,对编译出的文件等进行打包,以供安装发布。开发者可以使用DevEco Studio进行打包,也可使用打包工具的JAR包进行打包,JAR包通常存放在SDK路径下的toolchains目录中。 4 5打包工具支持生成:Ability类型的模块包(HAP)、动态共享包(HSP)、应用程序包(App)、快速修复模块包(HQF)、快速修复包(APPQF)。 6 7 8## 约束与限制 9 10打包工具需要运行在Java8及其以上环境。 11 12 13## HAP打包指令 14 15开发者可以使用打包工具的JAR包对模块进行打包,通过传入打包选项、文件路径,生成所需的HAP包。 16 17- Stage模型示例: 18 19 20 ``` 21 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>] 22 ``` 23 24- FA模型示例: 25 26 27 ``` 28 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] 29 ``` 30 31**表1** HAP打包指令参数说明 32 33| 指令 | 是否必选项 | 选项 | 描述 | 备注 | 34| ---------------- | ---------- | ------------- | ------------------------------------------------------------ | --------------- | 35| --mode | 是 | hap | 打包类型。 | NA | 36| --json-path | 是 | NA | .json文件路径.FA模型文件名必须为config.json;Stage模型文件名必须为module.json。 | NA | 37| --profile-path | 否 | NA | CAPABILITY.profile文件路径。 | NA | 38| --maple-so-path | 否 | NA | maple so文件输入路径,so文件路径,文件名必须以.so为后缀。如果是多个so需要用“,”分隔。 | NA | 39| --maple-so-dir | 否 | NA | maple so目录输入路径。 | NA | 40| --dex-path | 否 | NA | dex文件路径,文件名必须以.dex为后缀。如果是多个dex需要用“,”分隔。 <br/>dex文件路径也可以为目录。 | NA | 41| --lib-path | 否 | NA | lib库文件路径。 | NA | 42| --resources-path | 否 | NA | resources资源包路径。 | NA | 43| --index-path | 否 | NA | .index文件路径,文件名必须为resources.index。 | NA | 44| --pack-info-path | 否 | NA | pack.info文件路径,文件名必须为pack.info。 | NA | 45| --rpcid-path | 否 | NA | rpcid.sc文件路径,文件名必须为rpcid.sc。 | NA | 46| --js-path | 否 | NA | 存放js文件目录路径。 | 仅stage模型生效 | 47| --ets-path | 否 | NA | 存放ets文件目录路径。 | 仅stage模型生效 | 48| --out-path | 是 | NA | 目标文件路径,文件名必须以.hap为后缀。 | NA | 49| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | NA | 50| --an-path | 否 | NA | 存放an文件的路径。 | 仅stage模型生效 | 51| --ap-path | 否 | NA | 存放ap文件的路径。 | 仅stage模型生效 | 52| --dir-list | 否 | NA | 可指定目标文件夹列表,将其打入HAP包内。 | NA | 53| --compress-level | 否 | number | 压缩等级,默认值1,可选等级1-9。在应用配置compressNativeLibs参数为true的情况下生效,数值越大压缩率越高、压缩速度越慢。 | NA | 54| --pkg-context-path | 否 | NA | 可指定语境信息表文件路径,文件名必须为pkgContextInfo.json。 | 仅stage模型生效 | 55| --hnp-path | 否 | NA | 指定native软件包文件路径,将native软件包打入HAP包内。 | NA | 56 57## HSP打包指令 58 59HSP包实现了多个HAP对文件的共享,开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的HSP包。 60 61示例: 62``` 63java -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>] 64``` 65 66**表2** HSP打包指令参数说明 67 68| 指令 | 是否必选项 | 选项 | 描述 | 69| ---------------- | ---------- | ------------- | ------------------------------------------------------------ | 70| --mode | 是 | hsp | 打包类型。 | 71| --json-path | 是 | NA | .json文件路径,文件名必须为module.json。 | 72| --profile-path | 否 | NA | CAPABILITY.profile文件路径。 | 73| --dex-path | 否 | NA | 1.dex文件路径,文件名必须以.dex为后缀。如果是多个dex需要用“,”分隔。<br/>2.dex文件路径也可以为目录。 | 74| --lib-path | 否 | NA | lib库文件路径。 | 75| --resources-path | 否 | NA | resources资源包路径。 | 76| --index-path | 否 | NA | .index文件路径,文件名必须为resources.index。 | 77| --pack-info-path | 否 | NA | pack.info文件路径,文件名必须为pack.info。 | 78| --js-path | 否 | NA | 存放js文件目录路径。 | 79| --ets-path | 否 | NA | 存放ets文件目录路径。 | 80| --out-path | 是 | NA | 目标文件路径,文件名必须以.hsp为后缀。 | 81| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 82| --compress-level | 否 | number | 压缩等级,默认值1,可选等级1-9。在应用配置compressNativeLibs参数为true的情况下生效,数值越大压缩率越高、压缩速度越慢。 | 83| --pkg-context-path | 否 | NA | 可指定语境信息表文件路径,文件名必须为pkgContextInfo.json。 | 84 85## App打包指令 86 87开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的App包。App包用于上架应用市场。 88 89**App打包时HAP合法性校验:** 在对工程内的HAP包打包生成App包时,需要保证被打包的每个HAP在json文件中配置的bundleName、versionCode、minCompatibleVersionCode、debug、minAPIVersion、targetAPIVersion相同,moduleName唯一。对于FA模型,还需要保证json文件中配置的package唯一。HAP模块之间需要保证apiReleaseType相同,HSP模块不校验apiReleaseType。 90 91**打包App时的压缩规则:** 打包App时,对release模式的HAP、HSP包会进行压缩,对debug模式的HAP、HSP包不会压缩。 92 93>**说明:** 94> 95>从API version 12开始,App打包不再对versionName校验。 96 97示例: 98 99``` 100java -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> [--force true] [--encrypt-path <path>] 101``` 102 103**表3** App打包指令参数说明 104 105| 指令 | 是否必选项 | 选项 | 描述 | 106|--------------------|-------|-------------|--------------------------------------------------------------| 107| --mode | 是 | app | 多个HAP需满足HAP的合法性校验。 | 108| --hap-path | 否 | NA | HAP包文件路径,文件名必须以.hap为后缀。如果是多个HAP包需要用“,”分隔。<br/>HAP包文件路径也可以是目录。 | 109| --hsp-path | 否 | NA | HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要用“,”分隔。<br/>HSP包文件路径也可以是目录。 | 110| --pack-info-path | 是 | NA | 文件名必须为pack.info。 | 111| --out-path | 是 | NA | 目标文件路径,文件名必须以.app为后缀。 | 112| --signature-path | 否 | NA | 签名路径。 | 113| --certificate-path | 否 | NA | 证书路径。 | 114| --pack-res-path | 否 | NA | pack.res快照文件路径。 | 115| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 116| --encrypt-path | 否 | NA | 文件名必须为encrypt.json 。 | 117 118 119 120## 多工程打包指令 121 122多工程打包适用于多个团队开发同一个应用,但不方便共享代码的情况。开发者通过传入已经打好的HAP、HSP和App包,将多个包打成一个最终的App包,并上架应用市场。 123 124**多工程打包HAP合法性校验:** 需要保证被打包的每个HAP在json文件中配置的bundleName、versionCode、minCompatibleVersionCode、debug属性相同,minAPIVersion、targetAPIVersion、compileSdkVersion、compileSdkType相同,moduleName唯一,同一设备entry唯一。对于FA模型,还需要保证json文件中配置的package唯一。HAP模块之间需要保证apiReleaseType相同,HSP模块不校验apiReleaseType。 125 126>**说明:** 127> 128>从API version 12开始,多工程打包不再对versionName校验。 129 130示例: 131 132``` 133java -jar app_packing_tool.jar --mode multiApp [--hap-list <path>] [--hsp-list <path>] [--app-list <path>] --out-path <option> [--force true] [--encrypt-path <path>] 134``` 135 136**表4** 多工程打包指令参数说明 137 138| 指令 | 是否必选项 | 选项 | 描述 | 139|------------|-------|-----------|-----------------------------------------------------------------------------------------------------| 140| --mode | 是 | multiApp | 打包类型,在将多个HAP打入同一个App时,需保证每个HAP满足合法性校验规则。 | 141| --hap-list | 否 | HAP的路径 | HAP包文件路径,文件名必须以.hap为后缀。如果是多个HAP包需要”,“分隔。<br/>HAP文件路径也可以是目录。 | 142| --hsp-list | 否 | HSP的路径 | HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要”,“分隔。<br/>HSP文件路径也可以是目录。 | 143| --app-list | 否 | App的路径 | App文件路径,文件名必须以.app为后缀。如果是多个App包需要用”,“分隔。<br/>App文件路径也可以是目录。<br/>--hap-list,--hsp-list,--app-list不可以都不传。 | 144| --out-path | 是 | NA | 目标文件路径,文件名必须以.hqf为后缀。 | 145| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 146| --encrypt-path | 否 | encrypt.json的路径 | 文件名必须为encrypt.json。 | 147 148 149 150## HQF打包指令 151 152HQF包适用于应用存在一些问题,需要紧急修复的场景。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的HQF包。 153 154示例: 155 156``` 157java -jar app_packing_tool.jar --mode hqf --json-path <path> [--lib-path <path>] [--ets-path <path>] [--resources-path <path>] --out-path <path> [--force true] 158``` 159 160**表5** HQF打包指令参数说明 161 162| 指令 | 是否必选项 | 选项 | 描述 | 163|-------------|-------|-------------|------------------------------------| 164| --mode | 是 | hqf | 打包类型。 | 165| --json-path | 是 | NA | .json文件路径,文件名必须为patch.json。 | 166| --lib-path | 否 | NA | lib库文件的路径。 | 167| --ets-path | 否 | NA | 存放ets文件目录路径。 | 168| --resources-path | 否 | NA | resources资源包路径。 | 169| --out-path | 是 | NA | 目标文件路径,文件名必须以.hqf为后缀。 | 170| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 171 172## APPQF打包指令 173 174APPQF包由一个或多个HQF文件组成。这些HQF包在应用市场会从APPQF包中拆分出来,再被分发到具体的设备上。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的APPQF包。 175 176示例: 177 178``` 179java -jar app_packing_tool.jar --mode appqf --hqf-list <path> --out-path <path> [--force true] 180``` 181 182**表6** APPQF打包指令参数说明 183 184| 指令 | 是否必选项 | 选项 | 描述 | 185|------------|-------|-------------|------------------------------------| 186| --mode | 是 | appqf | 打包类型。 | 187| --hqf-list | 是 | NA | HQF文件路径,多个HQF以英文逗号隔开。 | 188| --out-path | 是 | NA | 目标文件路径,文件名必须以.appqf为后缀。 | 189| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 190 191## 版本归一指令(versionNormalize) 192 193同一个App中,所有HAP、HSP包的versionName和versionCode需要保持一致。当只有一个HAP或HSP需要修改升级时,可以调用此命令,将多个HAP、HSP的版本统一。本命令会修改所传入的HAP、HSP的版本号和版本名称,并在指定目录生成修改后的同名HAP、HSP,以及一个version_record.json文件,用于记录所有HAP、HSP原有的版本号、版本名称。 194 195示例: 196``` 197java -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\ 198``` 199 200**表7** versionNormalize指令参数说明 201 202| 指令 | 是否必选项 | 选项 | 描述 | 203|----------------|-------|------------------|-------------------------------------------------------------------| 204| --mode | 是 | versionNormalize | 命令类型。 | 205| --input-list | 是 | HAP或HSP的路径 | 1.HAP或HSP包文件路径,文件名必须以.HAP或.HSP为后缀。如果是多个HAP或HSP包需要“,”分隔。<br/>2.传入目录时,会读取目录下所有的HAP和HSP文件。 | 206| --version-code | 是 | 版本号 | 指定的版本号,HAP、HSP的版本号会被修改为该版本。需要为整数,且不小于所有传入的HAP、HSP的版本号。 | 207| --version-name | 是 | 版本名称 | 指定的版本名称,HAP、HSP的版本名称会被修改为该版本名称。 | 208| --out-path | 是 | NA | 目标文件路径,需要为一个目录。 | 209 210## 包名归一指令(packageNormalize) 211 212此命令可以修改传入的HSP的包名和版本号,并在指定目录生成修改后的同名HSP。 213 214示例: 215``` 216java -jar path\app_packing_tool.jar --mode packageNormalize --hsp-list path\1.hsp,path\2.hsp --bundle-name com.example.myapplication --version-code 1000001 --out-path path\out\ 217``` 218 219**表8** 参数含义及规范 220 221| 指令 | 是否必选项 | 选项 | 描述 | 222|----------------|-------|---------------|-----------------------------------------------------| 223| --mode | 是 | packageNormalize | 命令类型。 | 224| --hsp-list | 是 | HSP的路径 | 1.HSP包文件路径,文件名必须以.hsp为后缀。如果是多个HSP包需要“,”分隔。<br/>2.HSP包目录。 | 225| --bundle-name | 是 | 包名 | 指定的包名,HSP的包名会被修改为指定的包名。 | 226| --version-code | 是 | 版本号 | 指定的版本号,HSP的版本号会被修改为该版本号。需要为整数,且大于0。 | 227| --out-path | 是 | NA | 目标文件路径,需要为一个目录。 | 228 229## res模式打包指令 230 231此命令用于打包元服务快照资源。 232 233示例: 234 235``` 236java -jar app_packing_tool.jar --mode res --entrycard-path <path> --pack-info-path <path> --out-path <path> [--force true] 237``` 238 239**表9** 参数含义及规范 240 241| 指令 | 是否必选项 | 选项 | 描述 | 242|------------------|-------|---------------|------------------------------------| 243| --mode | 是 | res | 命令类型。 | 244| --entrycard-path | 是 | NA | 快照目录的路径。 | 245| --pack-info-path | 是 | NA | pack.info文件路径。 | 246| --out-path | 是 | NA | 目标文件路径,文件名必须以.res为后缀。 | 247| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 248 249## fastApp模式打包指令 250 251开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、HAP、HSP包文件目录路径,生成所需的App包。App包用于上架应用市场。 252 253**App打包时HAP合法性校验:** 在对工程内的HAP包打包生成App包时,需要保证被打包的每个HAP在json文件中配置的bundleName、versionCode、minCompatibleVersionCode、debug、minAPIVersion、targetAPIVersion相同,moduleName唯一。HAP模块之间需要保证apiReleaseType相同,HSP模块不校验apiReleaseType。 254 255**打包App时的压缩规则:** 打包App时,对release模式的HAP、HSP包会进行压缩,对debug模式的HAP、HSP包不会压缩。 256 257示例: 258 259``` 260java -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>] 261``` 262 263**表10** 参数含义及规范 264 265| 指令 | 是否必选项 | 选项 | 描述 | 266|--------------------|-------|------------|-------------------------------------------------------------------------------------------------------| 267| --mode | 是 | fastApp | 多个HAP需满足HAP的合法性校验。 | 268| --hap-path | 否 | NA | HAP包文件目录路径,目录内要包含一个完整的HAP包的所有文件。允许传入多个路径,多个路径需要用英文“,”分隔。 | 269| --hsp-path | 否 | NA | 1.HSP包文件路径,文件名必须以.hsp为后缀。如果时多个HSP包需要用英文“,”分隔。2.HSP包文件目录路径,目录内要包含一个完整的HSP包的所有文件。允许传入多个路径,多个路径需要用英文“,”分隔。 | 270| --pack-info-path | 是 | NA | 文件名必须为pack.info。 | 271| --out-path | 是 | NA | 目标文件路径,文件名必须以.app为后缀。 | 272| --signature-path | 否 | NA | 签名路径。 | 273| --certificate-path | 否 | NA | 证书路径。 | 274| --pack-res-path | 否 | NA | pack.res快照文件路径。 | 275| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 276| --encrypt-path | 否 | NA | 文件名必须为encrypt.json。 |