1# bm工具 2 3 4Bundle Manager(包管理工具,简称bm)是实现应用安装、卸载、更新、查询等功能的工具,bm为开发者提供基本的应用安装包的调试能力,例如:安装应用,卸载应用,查询安装包信息等。 5 6> **说明:** 7> 8> 在使用本工具前,开发者需要先获取[hdc工具](../../device-dev/subsystems/subsys-toolchain-hdc-guide.md),执行hdc shell。 9 10 11 **表1** bm工具命令列表 12 13| 命令 | 描述 | 14| -------- | -------- | 15| help | 帮助命令,显示bm支持的命令信息 | 16| install | 安装命令,用来安装应用 | 17| uninstall | 卸载命令,用来卸载应用 | 18| dump | 查询命令,用来查询应用的相关信息 | 19| clean | 清理命令,用来清理应用的缓存和数据 | 20| enable | 使能命令,用来使能应用,使能后应用可以继续使用 | 21| disable | 禁用命令,用来禁用应用,禁用后应用无法使用 | 22| get | 获取udid命令,用来获取设备的udid | 23| quickfix | 快速修复相关命令,用来执行补丁相关操作,如补丁安装、补丁查询 | 24 25 26## 帮助命令 27 28 **表2** help命令列表 29 30| 命令 | 描述 | 31| -------- | -------- | 32| bm help | 显示bm工具的能够支持的命令信息 | 33 34示例: 35 36 37```bash 38# 显示帮助信息 39bm help 40``` 41 42 43## 安装命令 44 45```bash 46bm install [-h] [-p path] [-u userId] [-r] [-w waitting-time] 47``` 48 49 50 **表3** 安装命令列表 51 52| 命令 | 是否必选 | 描述 | 53| -------- | -------- | -------- | 54| -h | 否,默认输出帮助信息 | 显示install支持的命令信息 | 55| -p | 是 | 安装HAP路径,支持指定路径和多个HAP同时安装 | 56| -u | 否,默认安装到当前所有用户上 | 给指定用户安装一个HAP | 57| -r | 否,默认值为覆盖安装 | 覆盖安装一个HAP | 58| -w | 否,默认等待5s | 安装HAP时指定bm工具等待时间,最小的等待时长为5s,最大的等待时长为600s, 默认缺省为5s | 59 60 61示例: 62 63```bash 64bm install -p /data/app/ohosapp.hap -u 100 -w 5s -r 65// 执行结果 66install bundle successfully. 67``` 68 69 70## 卸载命令 71 72```bash 73bm uninstall [-h help] [-n bundleName] [-m moduleName] [-u userId] [-k] 74``` 75 76 77 **表4** 卸载命令列表 78 79| 命令 | 是否必选 | 描述 | 80| -------- | -------- | -------- | 81| -h | 否,默认输出帮助信息 | 显示uninstall支持的命令信息 | 82| -n | 是 | 指定Bundle名称卸载应用 | 83| -m | 否,默认卸载所有模块 | 指定卸载应用的一个模块 | 84| -u | 否,默认卸载当前所有用户下该应用 | 指定用户卸载应用 | 85| -k | 否,默认卸载应用时不保存应用数据 | 卸载应用时保存应用数据 | 86| -v | 否,默认卸载同包名的所有共享包 | 指示共享包的版本号 | 87 88 89示例: 90 91```bash 92bm uninstall -n com.ohos.app -m com.ohos.app.EntryAbility -u 100 -k 93// 执行结果 94uninstall bundle successfully. 95``` 96 97 98## 查询命令 99 100```bash 101bm dump [-h help] [-a] [-n bundleName] [-s shortcutInfo] [-u userId] [-d deviceId] 102``` 103 104 105注:-u未指定情况下,默认为所有用户。 106 107 108 **表5** 查询命令列表 109 110| 命令 | 是否必选 | 描述 | 111| -------- | -------- | -------- | 112| -h | 否,默认输出帮助信息 | 显示dump支持的命令信息 | 113| -a | 是 | 查询系统已经安装的所有应用 | 114| -n | 是 | 查询指定Bundle名称的详细信息 | 115| -s | 是 | 查询指定Bundle名称下的快捷方式信息 | 116| -d | 否,默认查询当前设备 | 查询指定设备中的包信息 | 117| -u | 否,默认查询当前设备上的所有用户 | 查询指定用户下指定Bundle名称的详细信息 | 118 119 120示例: 121 122```bash 123# 显示所有已安装的Bundle名称 124bm dump -a 125# 查询该应用的详细信息 126bm dump -n com.ohos.app -u 100 127# 查询该应用的快捷方式信息 128bm dump -s com.ohos.app -u 100 129# 查询跨设备应用信息 130bm dump -n com.ohos.app -d xxxxx 131``` 132 133 134## 清理命令 135 136```bash 137bm clean [-h] [-c] [-n bundleName] [-d] [-u userId] 138``` 139 140 141注:-u未指定情况下,默认为当前活跃用户。 142 143 144 **表6** 清理命令列表 145 146| 命令 | 描述 | 147| -------- | -------- | 148| -h | 显示clean支持的命令信息 | 149| -c -n | 清除指定Bundle名称的缓存数据 | 150| -d -n | 清除指定Bundle名称的数据目录 | 151| -u | 清除指定用户下Bundle名称的缓存数据 | 152 153 154示例: 155 156```bash 157# 清理该应用下的缓存数据 158bm clean -c -n com.ohos.app -u 100 159// 执行结果 160clean bundle cache files successfully. 161# 清理该应用下的用户数据 162bm clean -d -n com.ohos.app -u 100 163// 执行结果 164clean bundle data files successfully. 165``` 166 167 168## 使能命令 169 170```bash 171bm enable [-h] [-n bundleName] [-a abilityName] [-u userId] 172``` 173 174 175注:-u未指定情况下,默认为当前活跃用户。 176 177 178 **表7** 使能命令列表 179 180| 命令 | 描述 | 181| -------- | -------- | 182| -h | 显示enable支持的命令信息 | 183| -n | 使能指定Bundle名称的应用 | 184| -a | 使能指定Bundle名称下的元能力模块 | 185| -u | 使能指定用户和Bundle名称的应用 | 186 187 188示例: 189 190```bash 191# 使能该应用 192bm enable -n com.ohos.app -a com.ohos.app.EntryAbility -u 100 193// 执行结果 194enable bundle successfully. 195``` 196 197 198## 禁用命令 199 200```bash 201bm disable [-h] [-n bundleName] [-a abilityName] [-u userId] 202``` 203 204 205注:-u未指定情况下,默认为当前活跃用户。 206 207 208 **表8** 禁用命令列表 209 210| 命令 | 描述 | 211| -------- | -------- | 212| -h | 显示disable支持的命令信息 | 213| -n | 禁用指定Bundle名称的应用 | 214| -a | 禁用指定Bundle名称下的元能力模块 | 215| -u | 禁用指定用户和Bundle名称下的应用 | 216 217示例: 218 219```bash 220# 禁用该应用 221bm disable -n com.ohos.app -a com.ohos.app.EntryAbility -u 100 222// 执行结果 223disable bundle successfully. 224``` 225 226 227## 获取udid 228 229```bash 230bm get [-h] [-u] 231``` 232 233 234 **表9** 获取udid命令列表 235 236| 命令 | 描述 | 237| -------- | -------- | 238| -h | 显示get支持的命令信息 | 239| -u | 获取设备的udid | 240 241 242示例: 243 244```bash 245# 获取设备的udid 246bm get -u 247// 执行结果 248udid of current device is : 24923CADE0C 250``` 251 252 253## 快速修复 254 255```bash 256bm quickfix [-h] [-a -f filePath] [-q -b bundleName] 257``` 258 259 260 **表10** 快速修复命令列表 261 262| 命令 | 描述 | 263| -------- | -------- | 264| -h | 显示quickfix支持的命令信息 | 265| -a -f | 执行快速修复补丁安装命令,file-path对应hqf文件,支持传递1个或多个hqf文件,或传递hqf文件所在的目录。 | 266| -q -b | 根据包名查询补丁信息,bundle-name对应包名。 | 267 268 269示例: 270 271```bash 272# 根据包名查询补丁包信息 273bm quickfix -q -b com.ohos.app 274// 执行结果 275// Information as follows: 276// ApplicationQuickFixInfo: 277// bundle name: com.ohos.app 278// bundle version code: xxx 279// bundle version name: xxx 280// patch version code: x 281// patch version name: 282// cpu abi: 283// native library path: 284// type: 285# 快速修复补丁安装 286bm quickfix -a -f /data/app/ 287//执行结果 288apply quickfix succeed. 289``` 290 291## 共享库查询命令 292 293```bash 294bm dump-shared [-h help] [-a] [-n bundleName] [-m moudleName] 295``` 296 297 **表11** 共享库查询命令列表 298 299| 命令 | 描述 | 300| ------------------------------------------------ | -------------------------------------- | 301| bm dump-shared -h | 显示dump-shared支持的命令信息 | 302| bm dump-shared -a | 查询系统中已安装所有共享库 | 303| bm dump-shared -n | 查询指定共享库包名的详细信息 | 304| bm dump-dependencies -h | 显示bm dump-dependencies支持的命令信息 | 305| bm dump-dependencies -n bundleName -m moudleName | 查询指定应用指定模块依赖的共享库信息 | 306 307示例: 308 309```bash 310# 显示所有已安装共享库包名 311bm dump-shared -a 312# 显示该共享库的详细信息 313bm dump-shared -n com.ohos.lib 314# 显示指定应用指定模块依赖的共享库信息 315bm dump-dependencies -n com.ohos.app -m entry 316``` 317 318## 常见问题 319 320### 安装HAP时提示“code:9568320 error: no signature file” 321**问题现象** 322 323对HAP包签名后,在设备中运行HAP时提示“failed to install bundle. error: install no signature info”或“failed to install bundle. error: no signature file”。 324 325![示例图](figures/zh-cn_image_0000001389116960.png) 326 327**解决措施** 328 329该问题是由于签名工具与设备运行的镜像版本不匹配导致,需要开发者手动更新设备的镜像,可参考如下步骤进行更新。 3301. 获取[OpenHarmony 最新镜像文件](https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/Readme.md),下载对应开发板的镜像文件。 3312. 将下载的镜像文件烧录到开发板中,关于各开发板的烧录,可以使用DevEco Device Tool工具进行烧录,具体请参考[DevEco Device Tool使用指南](../../device-dev/quick-start/quickstart-ide-env-win.md)。 3323. 重新运行应用/服务。 333 334### 安装HAP时提示“code:9568347 error: install parse native so failed”错误 335**问题现象** 336 337在启动调试或运行C++应用/服务时,安装HAP出现错误,提示“error: install parse native so failed”错误信息。 338 339**解决措施** 340 341该问题可能是由于设备支持的Abi类型与C++工程中配置的Abi类型不匹配,请通过如下步骤进行解决。 342 3431. 将设备与DevEco Studio进行连接。 3442. 打开命令行工具,并进入SDK安装目录下的toolchains\{版本号}目录下。 345 ``` 346 若不清楚OpenHarmony SDK安装目录,可单击File > Settings > SDK界面查看安装路径。 347 ``` 3483. 执行如下命令,查询设备支持的Abi列表,返回结果为default/armeabi-v7a/armeabi/arm64-v8a/x86/x86_64中的一个或多个Abi类型。 349 ``` 350 hdc shell 351 param get const.product.cpu.abilist 352 ``` 3534. 根据查询返回结果,检查[模块级build-profile.json5](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V1/build_config-0000001052902431-V1#section1940185593114)文件中的“abiFilters”参数中的配置,规则如下: 354 * 若返回结果为default,请执行如下命令,查询是否存在lib64文件夹。 355 ``` 356 cd /system/ 357 ls 358 ``` 359 ![示例图](figures/zh-cn_image_0000001609001262.png) 360 * 存在lib64文件夹:则“abiFilters”参数中需要包含arm64-v8a类型。 361 * 不存在lib64文件夹:则“abiFilters”参数中需要至少包含armeabi/armeabi-v7a中的一个类型。 362 * 若返回结果为armeabi-v7a/armeabi/arm64-v8a/x86/x86_64中的一个或多个,需要在“abiFilters”参数中至少包含返回结果中的一个Abi类型。 363 364### 安装HAP时提示“code:9568344 error: install parse profile prop check error”错误 365**问题现象** 366 367在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install parse profile prop check error”错误信息。 368 369![示例图](figures/zh-cn_image_0000001585361412.png) 370 371**解决措施** 372 373该问题可能是由于应用使用了应用特权,但应用的签名文件发生变化后未将新的签名指纹重新配置到设备的特权管控白名单文件install_list_capability.json中,请通过如下步骤进行解决。 374 3751. 获取新的签名指纹。 376 377 a. 在项目级build-profile.json5文件中,signingConfigs字段内的profile的值即为签名文件的存储路径。 378 379 b. 打开该签名文件(后缀为.p7b),打开后在文件内搜索“development-certificate”,将“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”以及中间的信息拷贝到新的文本中,注意换行并去掉换行符,保存为一个新的.cer文件,如命名为xxx.cer。 380 381 新的.cer文件格式如下图(仅作为格式示意,内容以实际为准): 382 383 ![示例图](figures/zh-cn_image_0000001585521364.png) 384 385 386 387 c. 使用keytool工具(在DevEco Studio安装目录下的jbr/bin文件夹内),执行如下命令通过.cer文件获取证书指纹的SHA256值。 388 ``` 389 keytool -printcert -file xxx.cer 390 ``` 391 d. 将证书指纹中SHA256的内容去掉冒号,即为最终要获得的签名指纹。 392 393 如SHA256值为下图(仅作为格式示意,内容以实际为准): 394 ![示例图](figures/zh-cn_image_0000001635921233.png) 395 396 去掉冒号后的签名指纹为:5753DDBC1A8EF88A62058A9FC4B6AFAFC1C5D8D1A1B86FB3532739B625F8F3DB 397 3982. 获取设备的特权管控白名单文件install_list_capability.json。 399 400 a. 连接设备。 401 402 b. 执行如下命令查看设备的特权管控白名单文件install_list_capability.json。 403 ``` 404 find /system -name install_list_capability.json 405 ``` 406 HarmonyOS设备上install_list_capability.json的位置通常为以下几种,选取其中一个即可: 407 ``` 408 /system/variant/phone/base/etc/app/install_list_capability.json 409 /system/etc/app/install_list_capability.json 410 ``` 411 OpenHarmony设备上install_list_capability.json的位置通常为: 412 ``` 413 /system/etc/app/install_list_capability.json 414 ``` 415 c. 执行如下命令拉取install_list_capability.json。 416 ``` 417 hdc shell mount -o rw,remount / 418 hdc file recv /system/variant/phone/base/etc/app/install_list_capability.json 419 ``` 420 4213. 将步骤1获取到的签名指纹配置到install_list_capability.json文件的app_signature中,注意要配置到对应的bundleName下。 422![示例图](figures/zh-cn_image_0000001635641893.png) 4234. 将修改后的install_list_capability.json文件重新推到设备上,并重启设备。 424 425 ``` 426 hdc shell mount -o rw,remount / 427 hdc file send install_list_capability.json /system/variant/phone/base/etc/app/install_list_capability.json 428 hdc shell chmod 777 /system/variant/phone/base/etc/app/install_list_capability.json 429 hdc shell reboot 430 ``` 4315. 设备重启后,重新安装新的应用即可。 432 433### 安装HAP时提示“code:9568305 error: dependent module does not exist”错误 434**问题现象** 435 436在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: dependent module does not exist”错误信息。 437 438![示例图](figures/zh-cn_image_0000001560338986.png) 439 440**解决措施** 441 442该问题是由于运行/调试的应用依赖的动态共享包(SharedLibrary)模块未安装导致安装报错,您可以通过如下方式进行解决: 443 444* 先安装依赖的动态共享包(SharedLibrary)模块,再在应用运行配置页勾选Keep Application Data,点击OK保存配置,再运行/调试。 445![示例图](figures/zh-cn_image_0000001560201786.png) 446 447* 在运行配置页,选择Deploy Multi Hap标签页,勾选Deploy Multi Hap Packages,选择依赖的模块,点击OK保存配置,再进行运行/调试。 448![示例图](figures/zh-cn_image_0000001610761941.png) 449 450### 安装HAP时提示“code:9568259 error: install parse profile missing prop” 451**问题现象** 452 453在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install parse profile missing prop”错误信息。 454 455![示例图](figures/zh-cn_image_0000001559130596.png) 456 457**解决措施** 458 459出现该问题的原因是配置文件app.json5和module.json5中必填字段缺失。 460 461* 方法1:请参考[app.json5配置文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V1/app-configuration-file-0000001579865930-V1)和[module.json5配置文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V1/module-configuration-file-0000001580185138-V1)查看并补充必填字段。 462* 方法2:通过hilog日志判断缺失字段。 463 464 开启落盘命令: 465 ``` 466 hilog -w start 467 ``` 468 469 落盘位置:/data/log/hilog 470 471 打开日志查看“profile prop %{public}s is mission”。如“profile prop icon is mission”表示“icon”字段缺失。 472 473### 安装HAP时提示“code:9568258 error: install releaseType target not same” 474**问题现象** 475 476在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install releaseType target not same”错误信息。 477 478![示例图](figures/zh-cn_image_0000001609976041.png) 479 480**解决措施** 481 482出现该问题的原因是设备上已安装的旧HAP和现在要安装的新HAP所使用的SDK中的releaseType值不一样。请先卸载设备上已安装的HAP,再安装新的HAP。 483 484### 安装HAP时提示“code:9568322 error: signature verification failed due to not trusted app source” 485**问题现象** 486 487在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: signature verification failed due to not trusted app source”错误信息。 488 489![示例图](figures/zh-cn_image_0000001585042216.png) 490 491**解决措施** 492 493该问题是由于签名中未包含该调试设备的UDID,请通过如下步骤进行解决。 494 495* 使用[自动签名](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V1/signing-0000001587684945-V1#section18815157237)。在连接设备后,重新为应用进行签名。 496* 如果使用的是手动签名,对于HarmonyOS应用,请在AppGallery Connect中先将该调试设备[注册调试设备](https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-help-harmonyos-debugapp-manual-0000001177608893#section7732152932911)并在[申请Profile文件](https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-help-harmonyos-debugapp-manual-0000001177608893?ha_linker=eyJ0cyI6MTY4NzkzNDEzOTk1OSwiaWQiOiJhZjdhYzI0MDlkMGQ5MzQ1MzFlNDE3NDQ5MmY4MjJkMyJ9#section1774717395304)选择设备时添加该调试设备,重新申请Profile证书;对于OpenHarmony应用,请参考[OpenHarmony应用手动签名](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/hapsigntool-guidelines.md),在UnsgnedDebugProfileTemplate.json文件中添加该调试设备的[UDID](https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-help-harmonyos-debugapp-manual-0000001177608893#section1835412326017)。 497 498### 安装HAP时提示“code:9568289 error: install failed due to grant request permissions failed” 499**问题现象** 500 501在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install failed due to grant request permissions failed”错误信息。 502 503![示例图](figures/zh-cn_image_0000001585201996.png) 504 505**解决措施** 506 507该问题是由于默认应用等级为normal,只能使用normal等级的权限,如果使用了system_basic或system_core等级的权限,将导致报错。 508 509对于HarmonyOS应用,请参考[使用ACL签名配置指导](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V1/signing-0000001587684945-V1#section157591551175916)完成ACL提权。 510 511### 安装HAP时提示“code:9568297 error: install failed due to older sdk version in the device” 512**问题现象** 513 514在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install failed due to older sdk version in the device”错误信息。 515 516![示例图](figures/zh-cn_image_0000001635521909.png) 517 518**解决措施** 519 520该问题是由于编译打包所使用的SDK版本与设备镜像版本不匹配。不匹配的场景包括: 521 522* 场景一:设备上的镜像版本低于编译打包的SDK版本,请更新设备镜像版本。查询设备镜像版本命令: 523 ``` 524 hdc shell param get const.ohos.apiversion 525 ``` 526 如果镜像提供的api版本为10,且应用编译所使用的SDK版本也为10,仍出现该报错,可能是由于镜像版本较低,未兼容新版本SDK校验规则,请将镜像版本更新为最新版本。 527 528* 场景二:对于需要运行在OpenHarmony设备上的应用,请确认runtimeOS已改为OpenHarmony。 529 530### 安装HAP时提示“code:9568332 error: install sign info inconsistent” 531**问题现象** 532 533在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install sign info inconsistent”错误信息。 534 535![示例图](figures/zh-cn_image_0000001635761329.png) 536 537**解决措施** 538 539该问题是由于设备上已安装的应用与新安装的应用中签名不一致。如果在**Edit Configurations**中勾选了“Keep Application Data”(不卸载应用,覆盖安装),并且重新进行了签名,将导致该报错。 540 541请卸载设备上已安装的应用,或取消勾选“Keep Application Data”后,重新安装新的应用。 542 543### 安装HAP时提示“code:9568257 error: fail to verify pkcs7 file” 544**问题现象** 545 546在启动调试或者运行应用/服务时,安装HAP出现错误,提示”error: fail to verify pkcs7 file“错误信息。 547 548![示例图](figures/zh-cn_image_00000016359212344.png) 549 550**解决措施** 551 552出现该问题的原因是应用当前使用的签名不符合HarmonyOS应用签名的要求。通常是由于当前使用的是OpenHarmony应用的签名,需替换为HarmonyOS应用的签名。 553 554请在[为应用/服务签名](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V1/signing-0000001587684945-V1)时勾选”Support HarmonyOS“,完成HarmonyOS应用签名后再次启动调试或者运行应用。 555 556![示例图](figures/zh-cn_image_00000016359212311.png)