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