1# 打包拆包工具 2## 简介 3 4打包工具和拆包工具,在程序编译完成后,对编译出的文件等进行打包,以供安装发布。打包工具支持应用程序包(hap),上架应用市场的应用集合(app),快速修复包(hqf),上架应用市场的快速修复包集合(appqf),静态共享库(har),动态共享库(hsp)包的生成,拆包工具用于对hap,app,hqf,appqf,har,hsp包的拆包及对hap,hsp,app,appqf的解析。通常打包过程会在DevEco Studio中自动完成,但开发者也可根据需要通过打包工具的jar包进行打包,jar包通常存放在sdk路径下的toolchains目录中。 5 6## 打包指令说明 7 8### hap包模式打包指令 9 10开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的hap包。 11 12#### 示例 13 14- Stage模型的打包命令示例: 15 16 17``` 18java -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 19``` 20 21- FA模型的打包命令示例: 22 23 24``` 25java -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] 26``` 27 28#### 参数含义及规范 29 30| 指令 | 是否必选项 | 选项 | 描述 | 备注 | 31|------------------|-------|----------------------|-----------------------------------------------------------|------------| 32| --mode | 是 | hap | 打包类型。 | NA | 33| --json-path | 是 | NA | .json文件路径,FA模型文件名必须为config.json;stage模型文件名必须为module.json。 | NA | 34| --profile-path | 否 | NA | CAPABILITY.profile文件路径。 | NA | 35| --maple-so-path | 否 | NA | maple so文件输入路径,so文件路径,文件名必须以.so为后缀。如果是多个so需要用“,”分隔。 | NA | 36| --maple-so-dir | 否 | NA | maple so目录输入路径。 | NA | 37| --dex-path | 否 | NA | 1.dex文件路径,文件名必须以.dex为后缀。如果是多个dex需要用“,”分隔。 <br/>2.dex文件路径也可以为目录。 | NA | 38| --lib-path | 否 | NA | lib库文件路径。 | NA | 39| --resources-path | 否 | NA | resources资源包路径。 | NA | 40| --index-path | 否 | NA | .index文件路径,文件名必须为resources.index。 | NA | 41| --pack-info-path | 否 | NA | pack.info文件路径,文件名必须为pack.info。 | NA | 42| --rpcid-path | 否 | NA | rpcid.sc文件路径,文件名必须为rpcid.sc。 | NA | 43| --js-path | 否 | NA | 存放js文件目录路径。 | 仅stage模型生效 | 44| --ets-path | 否 | NA | 存放ets文件目录路径。 | 仅stage模型生效 | 45| --out-path | 是 | NA | 目标文件路径,文件名必须以.hap为后缀。 | NA | 46| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | NA | 47| --an-path | 否 | NA | 存放an文件的路径。 | 仅stage模型生效 | 48| --ap-path | 否 | NA | 存放ap文件的路径。 | 仅stage模型生效 | 49| --dir-list | 否 | NA | 可指定目标文件夹列表,将其打入hap包内。 | NA | 50 51### har包模式打包指令 52 53开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的har包。 54 55#### 示例 56 57``` 58java -jar app_packing_tool.jar --mode har --json-path [option] --jar-path [option]--lib-path [option] --resources-path [option] --out-path [option] --force [option] 59``` 60 61#### 参数含义及规范 62 63| 指令 | 是否必选项 | 选项 | 描述 | 64|-----------------|-------|-------------|-----------------------------------------------------------| 65| --mode | 是 | har | 打包类型。 | 66| --json-path | 是 | NA | .json文件路径,FA模型文件名必须为config.json;stage模型文件名必须为module.json。 | 67| --jar-path | 否 | NA | 1.jar文件路径,文件名必须以.jar为后缀。如果是多个jar需要用“,”分隔。<br/>2.jar文件路径也可以为目录。 | 68| --lib-path | 否 | NA | lib库文件路径。 | 69| --resource-path | 是 | NA | resources资源包路径。 | 70| --out-path | 是 | NA | 目标文件路径,文件名必须以.har为后缀。 | 71| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 72 73### app包模式打包指令 74 75开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的app包。app包用于上架应用市场。 76 77 78#### 示例 79 80``` 81java -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] 82``` 83 84#### 参数含义及规范 85 86| 指令 | 是否必选项 | 选项 | 描述 | 87|--------------------|-------|-------------|--------------------------------------------------------------| 88| --mode | 是 | app | 多个hap需满足hap的合法性校验。 | 89| --hap-path | 是 | NA | 1.hap包文件路径,文件名必须以.hap为后缀。如果是多个hap包需要用“,”分隔。<br/>2.hap包文件路径也可以是目录。 | 90| --hsp-path | 否 | NA | 1.hsp包文件路径,文件名必须以.hsp为后缀。如果是多个hsp包需要用“,”分隔。<br/>2.hsp包文件路径也可以是目录。 | 91| --pack-info-path | 是 | NA | 文件名必须为pack.info。 | 92| --out-path | 是 | NA | 目标文件路径,文件名必须以.app为后缀。 | 93| --signature-path | 否 | NA | 签名路径。 | 94| --certificate-path | 否 | NA | 证书路径。 | 95| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 96 97#### 打包app时hap的合法性校验 98 99在对工程内的hap包打包生成app包时,需要保证被打包的每个hap在json文件中配置的bundleName,versionCode,versionName,minCompatibleVersionCode,debug,minAPIVersion,targetAPIVersion,apiReleaseType相同,moduleName唯一,对于fa模型,还需要保证json文件中配置的package唯一。 100 101### 多工程打包 102 103多工程打包适用于多个团队开发同一个应用,但不方便共享代码的情况。开发者通过传入已经打好的hap、hsp和app包,将多个包打成一个最终的app包,并上架应用市场。 104 105#### 示例 106 107``` 108java -jar app_packing_tool.jar --mode multiApp --hap-list [option] --hsp-list [option] --app-list [option] --out-path <option> 109``` 110 111#### 参数含义及规范 112 113| 指令 | 是否必选项 | 选项 | 描述 | 114|------------|-------|-----------|-----------------------------------------------------------------------------------------------------| 115| --mode | 是 | multiApp | 打包类型,在将多个hap打入同一个app时,需保证每个hap满足合法性校验规则。 | 116| --hap-list | 否 | hap的路径 | 1.hap包文件路径,文件名必须以.hap为后缀。如果是多个hap包需要”,“分隔。<br/>2.hap文件路径也可以是目录。 | 117| --hsp-list | 否 | hsp的路径 | 1.hsp包文件路径,文件名必须以.hsp为后缀。如果是多个hsp包需要”,“分隔。<br/>2.hsp文件路径也可以是目录。 | 118| --app-list | 否 | app的路径 | 1.app文件路径,文件名必须以.app为后缀。如果是多个app包需要用”,“分隔。<br/>2.app文件路径也可以是目录。<br/>3.--hap-list,--hsp-list,--app-list不可以都不传。 | 119| --out-path | 是 | NA | 目标文件路径,文件名必须以.hqf为后缀。 | 120| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 121 122#### 多工程打包hap合法性校验 123 124需要保证被打包的每个hap在json文件中配置的bundleName,versionCode,versionName,minCompatibleVersionCode,debug属性相同,minAPIVersion,targetAPIVersion,apiReleaseType,compileSdkVersion,compileSdkType相同,moduleName唯一,同一设备entry唯一,对于fa模型,还需要保证json文件中配置的package唯一。 125 126### hqf模式打包指令 127 128hqf包适用于应用存在一些问题,需要紧急修复的场景。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的hqf包。 129 130#### 示例 131 132``` 133java -jar app_packing_tool.jar --mode hqf --json-path <option> --lib-path <option> --ets-path <option> --out-path <option> 134``` 135 136#### 参数含义及规范 137 138| 指令 | 是否必选项 | 选项 | 描述 | 139|-------------|-------|-------------|------------------------------------| 140| --mode | 是 | hqf | 打包类型。 | 141| --json-path | 是 | NA | .json文件路径,文件名必须为patch.json。 | 142| --lib-path | 否 | NA | lib库文件的路径。 | 143| --ets-path | 是 | NA | 存放ets文件目录路径。 | 144| --out-path | 是 | NA | 目标文件路径,文件名必须以.hqf为后缀。 | 145| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 146 147### appqf模式打包指令 148 149appqf包由一个或多个hqf文件组成。这些hqf包在应用市场会从appqf包中拆分出来,再被分发到具体的设备上。开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的appqf包。 150 151#### 示例 152 153``` 154java -jar app_packing_tool.jar --mode appqf --hqf-list <option> --out-path <option> 155``` 156 157#### 参数含义及规范 158 159| 指令 | 是否必选项 | 选项 | 描述 | 160|------------|-------|-------------|------------------------------------| 161| --mode | 是 | appqf | 打包类型。 | 162| --hqf-list | 是 | NA | hqf文件路径,多个hqf以英文逗号隔开。 | 163| --out-path | 是 | NA | 目标文件路径,文件名必须以.appqf为后缀。 | 164| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 | 165 166 167### hsp模式打包指令 168 169hsp包实现了多个hap对文件的共享,开发者可以使用打包工具的jar包对应用进行打包,通过传入打包选项、文件路径,生成所需的hsp包。 170 171#### 示例 172``` 173java -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 174``` 175 176#### 参数含义及规范 177 178| 指令 | 是否必选项 | 选项 | 描述 | 179|------------------|-------|-------------|-----------------------------------------------------------| 180| --mode | 是 | hsp | 打包类型。 | 181| --json-path | 是 | NA | .json文件路径,文件名必须为module.json。 | 182| --profile-path | 否 | NA | CAPABILITY.profile文件路径。 | 183| --dex-path | 否 | NA | 1.dex文件路径,文件名必须以.dex为后缀。如果是多个dex需要用“,”分隔。<br/>2.dex文件路径也可以为目录。 | 184| --lib-path | 否 | NA | lib库文件路径。 | 185| --resources-path | 否 | NA | resources资源包路径。 | 186| --index-path | 否 | NA | .index文件路径,文件名必须为resources.index。 | 187| --pack-info-path | 否 | NA | pack.info文件路径,文件名必须为pack.info。 | 188| --js-path | 否 | NA | 存放js文件目录路径。 | 189| --ets-path | 否 | NA | 存放ets文件目录路径。 | 190| --out-path | 是 | NA | 目标文件路径,文件名必须以.hsp为后缀。 | 191| --force | 否 | true或者false | 默认值为false,如果为true,表示当目标文件存在时,强制删除。 |