1# @ohos.bundle.installer (installer模块) 2 3> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 4> 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 5 6在设备上安装、升级和卸载应用 7 8## 导入模块 9 10```js 11import installer from '@ohos.bundle.installer'; 12``` 13 14## 权限列表 15 16| 权限 | 权限等级 | 描述 | 17| ------------------------------ | ----------- | ---------------- | 18| ohos.permission.INSTALL_BUNDLE | system_core | 可安装、卸载应用。 | 19 20权限等级参考[权限等级说明](../../security/accesstoken-overview.md#权限等级说明) 21 22## BundleInstaller.getBundleInstaller 23 24getBundleInstaller(callback: AsyncCallback\<BundleInstaller>): void; 25 26获取BundleInstaller对象,使用callback形式返回结果。 27 28**系统接口:** 此接口为系统接口,三方应用不支持调用 29 30**系统能力:** SystemCapability.BundleManager.BundleFramework.Core 31 32**参数:** 33 34| 参数名 | 类型 | 必填 | 说明 | 35| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 36| callback | AsyncCallback\<[BundleInstaller](js-apis-installer.md#BundleInstaller)> | 是 | 回调函数,获取BundleInstaller对象,err为undefined,data为获取到的BundleInstaller对象;否则为错误对象。 | 37 38**示例:** 39 40```ts 41import installer from '@ohos.bundle.installer'; 42 43try { 44 installer.getBundleInstaller((err, data) => { 45 if (err) { 46 console.error('getBundleInstaller failed:' + err.message); 47 } else { 48 console.info('getBundleInstaller successfully'); 49 } 50 }); 51} catch (error) { 52 console.error('getBundleInstaller failed:' + error.message); 53} 54``` 55 56## BundleInstaller.getBundleInstaller 57 58getBundleInstaller(): Promise\<BundleInstaller>; 59 60获取BundleInstaller对象,使用callback形式返回结果。 61 62**系统接口:** 此接口为系统接口,三方应用不支持调用 63 64**系统能力:** SystemCapability.BundleManager.BundleFramework.Core 65 66**返回值:** 67| 类型 | 说明 | 68| ------------------------------------------------------------ | ------------------------------------ | 69| Promise\<[BundleInstaller](js-apis-installer.md#BundleInstaller)> | Promise对象,返回BundleInstaller对象。 | 70 71**示例:** 72 73```ts 74import installer from '@ohos.bundle.installer'; 75 76try { 77 installer.getBundleInstaller().then((data) => { 78 console.info('getBundleInstaller successfully.'); 79 }).catch((error) => { 80 console.error('getBundleInstaller failed. Cause: ' + error.message); 81 }); 82} catch (error) { 83 console.error('getBundleInstaller failed. Cause: ' + error.message); 84} 85``` 86 87## BundleInstaller.install 88install(hapFilePaths: Array<string>, installParam: InstallParam, callback: AsyncCallback<void>): void; 89 90以异步方法安装应用,使用callback形式返回结果。 91 92**系统接口:** 此接口为系统接口,三方应用不支持调用 93 94**需要权限:** ohos.permission.INSTALL_BUNDLE 95 96**系统能力:** SystemCapability.BundleManager.BundleFramework.Core 97 98**参数:** 99 100| 参数名 | 类型 | 必填 | 说明 | 101| --------------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | 102| hapFilePaths | Array<string> | 是 | 存储应用程序包的路径。路径应该是当前应用程序中存放HAP包的数据目录。当传入的路径是一个目录时, 该目录下只能放同一个应用的HAP包,且这些HAP包的签名需要保持一致。 | 103| installParam | [InstallParam](#installparam) | 是 | 指定安装所需的其他参数。 | 104| callback | AsyncCallback<void> | 是 | 回调函数,安装应用成功,err为undefined,否则为错误对象。 | 105 106**错误码:** 107 108以下错误码的详细介绍请参见[ohos.bundle错误码](../errorcodes/errorcode-bundle.md)。 109 110| 错误码ID | 错误信息 | 111| -------- | ------------------------------------------------------------ | 112| 17700004 | The specified user ID is not found. | 113| 17700010 | Failed to install the HAP because the HAP fails to be parsed. | 114| 17700011 | Failed to install the HAP because the HAP signature fails to be verified. | 115| 17700012 | Failed to install the HAP because the HAP path is invalid or the HAP is too large. | 116| 17700015 | Failed to install the HAPs because they have different configuration information. | 117| 17700016 | Failed to install the HAP because of insufficient system disk space. | 118| 17700017 | Failed to install the HAP since the version of the HAP to install is too early. | 119| 17700018 | Failed to install because the dependent module does not exist. | 120 121**示例:** 122 123```ts 124import installer from '@ohos.bundle.installer'; 125let hapFilePaths = ['/data/storage/el2/base/haps/entry/files/']; 126let installParam = { 127 userId: 100, 128 isKeepData: false, 129 installFlag: 1, 130}; 131 132try { 133 installer.getBundleInstaller().then(data => { 134 data.install(hapFilePaths, installParam, err => { 135 if (err) { 136 console.error('install failed:' + err.message); 137 } else { 138 console.info('install successfully.'); 139 } 140 }); 141 }).catch(error => { 142 console.error('getBundleInstaller failed. Cause: ' + error.message); 143 }); 144} catch (error) { 145 console.error('getBundleInstaller failed. Cause: ' + error.message); 146} 147``` 148 149## BundleInstaller.install 150 151install(hapFilePaths: Array\<string\>, installParam?: InstallParam) : Promise\<void\>; 152 153以异步方法安装应用,使用Promise形式返回结果。 154 155**系统接口:** 此接口为系统接口。 156 157**需要权限:** ohos.permission.INSTALL_BUNDLE 158 159**系统能力:** SystemCapability.BundleManager.BundleFramework.Core 160 161**参数:** 162 163| 参数名 | 类型 | 必填 | 说明 | 164| ------------ | ----------------------------- | ---- | ------------------------------------------------------------ | 165| hapFilePaths | Array\<string\> | 是 | 存储应用程序包的路径。路径应该是当前应用程序中存放HAP的数据目录。当传入的路径是一个目录时, 该目录下只能放同一个应用的HAP,且这些HAP的签名需要保持一致。 | 166| installParam | [InstallParam](#installparam) | 否 | 指定安装所需的其他参数。 | 167 168**返回值:** 169 170| 类型 | 说明 | 171| --------------- | -------------------------------------- | 172| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 173 174**错误码:** 175 176以下错误码的详细介绍请参见[ohos.bundle错误码](../errorcodes/errorcode-bundle.md)。 177 178| 错误码ID | 错误信息 | 179| -------- | ------------------------------------------------------------ | 180| 17700004 | The specified user ID is not found. | 181| 17700010 | Failed to install the HAP because the HAP fails to be parsed. | 182| 17700011 | Failed to install the HAP because the HAP signature fails to be verified. | 183| 17700012 | Failed to install the HAP because the HAP path is invalid or the HAP is too large. | 184| 17700015 | Failed to install the HAPs because they have different configuration information. | 185| 17700016 | Failed to install the HAP because of insufficient system disk space. | 186| 17700017 | Failed to install the HAP since the version of the HAP to install is too early. | 187| 17700018 | Failed to install because the dependent module does not exist. | 188 189**示例:** 190 191```ts 192import installer from '@ohos.bundle.installer'; 193let hapFilePaths = ['/data/storage/el2/base/haps/entry/files/']; 194let installParam = { 195 userId: 100, 196 isKeepData: false, 197 installFlag: 1, 198}; 199 200try { 201 installer.getBundleInstaller().then(data => { 202 data.install(hapFilePaths, installParam) 203 .then((data) => { 204 console.info('install successfully: ' + JSON.stringify(data)); 205 }).catch((error) => { 206 console.error('install failed:' + error.message); 207 }); 208 }).catch(error => { 209 console.error('getBundleInstaller failed. Cause: ' + error.message); 210 }); 211} catch (error) { 212 console.error('getBundleInstaller failed. Cause: ' + error.message); 213} 214``` 215 216## BundleInstaller.uninstall 217 218uninstall(bundleName: string, installParam: InstallParam, callback: AsyncCallback<void>): void; 219 220以异步方法卸载应用,使用callback形式返回结果。 221 222**系统接口:** 此接口为系统接口,三方应用不支持调用 223 224**需要权限:** ohos.permission.INSTALL_BUNDLE 225 226**系统能力:** SystemCapability.BundleManager.BundleFramework.Core 227 228**参数:** 229 230| 参数名 | 类型 | 必填 | 说明 | 231| ---------- | ---------------------------------------------------- | ---- | ---------------------------------------------- | 232| bundleName | string | 是 | 待卸载应用的包名。 | 233| installParam | [InstallParam](#installparam) | 是 | 指定安装所需的其他参数。 | 234| callback | AsyncCallback<void> | 是 | 回调函数,卸载应用成功,err为undefined,否则为错误对象。 | 235 236**错误码:** 237 238以下错误码的详细介绍请参见[ohos.bundle错误码](../errorcodes/errorcode-bundle.md)。 239 240| 错误码ID | 错误信息 | 241| -------- | ------------------------------------------------------------ | 242| 17700001 | The specified bundle name is not found. | 243| 17700004 | The specified user ID is not found. | 244| 17700020 | The specified bundle is pre-installed bundle which cannot be uninstalled. | 245 246**示例:** 247 248```ts 249import installer from '@ohos.bundle.installer'; 250let bundleName = 'com.ohos.demo'; 251let installParam = { 252 userId: 100, 253 isKeepData: false, 254 installFlag: 1 255}; 256 257try { 258 installer.getBundleInstaller().then(data => { 259 data.uninstall(bundleName, installParam, err => { 260 if (err) { 261 console.error('uninstall failed:' + err.message); 262 } else { 263 console.info('uninstall successfully.'); 264 } 265 }); 266 }).catch(error => { 267 console.error('getBundleInstaller failed. Cause: ' + error.message); 268 }); 269} catch (error) { 270 console.error('getBundleInstaller failed. Cause: ' + error.message); 271} 272``` 273## BundleInstaller.uninstall 274 275uninstall(bundleName: string, installParam?: InstallParam) : Promise\<void\>; 276 277以异步方法卸载应用,使用Promise形式返回结果。 278 279**系统接口:** 此接口为系统接口。 280 281**需要权限:** ohos.permission.INSTALL_BUNDLE 282 283**系统能力:** SystemCapability.BundleManager.BundleFramework.Core 284 285**参数:** 286 287| 参数名 | 类型 | 必填 | 说明 | 288| ------------ | ----------------------------- | ---- | ------------------------------------------------------------ | 289| bundleName | string | 是 | 待卸载应用的包名。 | 290| installParam | [InstallParam](#installparam) | 否 | 指定安装所需的其他参数。 | 291 292**返回值:** 293 294| 类型 | 说明 | 295| --------------- | -------------------------------------- | 296| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 297 298**错误码:** 299 300以下错误码的详细介绍请参见[ohos.bundle错误码](../errorcodes/errorcode-bundle.md)。 301 302| 错误码ID | 错误信息 | 303| -------- | ------------------------------------------------------------ | 304| 17700001 | The specified bundle name is not found. | 305| 17700004 | The specified user ID is not found. | 306| 17700020 | The specified bundle is pre-installed bundle which cannot be uninstalled. | 307 308**示例:** 309```ts 310import installer from '@ohos.bundle.installer'; 311let bundleName = 'com.ohos.demo'; 312let installParam = { 313 userId: 100, 314 isKeepData: false, 315 installFlag: 1, 316}; 317 318try { 319 installer.getBundleInstaller().then(data => { 320 data.uninstall(bundleName, installParam) 321 .then((data) => { 322 console.info('uninstall successfully: ' + JSON.stringify(data)); 323 }).catch((error) => { 324 console.error('uninstall failed:' + error.message); 325 }); 326 }).catch(error => { 327 console.error('getBundleInstaller failed. Cause: ' + error.message); 328 }); 329} catch (error) { 330 console.error('getBundleInstaller failed. Cause: ' + error.message); 331} 332``` 333 334## BundleInstaller.recover 335 336recover(bundleName: string, installParam: InstallParam, callback: AsyncCallback<void>): void; 337 338以异步方法回滚应用到初次安装时的状态,使用callback形式返回结果。 339 340**系统接口:** 此接口为系统接口,三方应用不支持调用 341 342**需要权限:** ohos.permission.INSTALL_BUNDLE 343 344**系统能力:** SystemCapability.BundleManager.BundleFramework.Core 345 346**参数:** 347 348| 参数名 | 类型 | 必填 | 说明 | 349| ---------- | ---------------------------------------------------- | ---- | ---------------------------------------------- | 350| bundleName | string | 是 | 待恢复应用的包名。 | 351| installParam | [InstallParam](#installparam) | 是 | 指定安装所需的其他参数。 | 352| callback | AsyncCallback<void> | 是 | 回调函数,回滚应用成功,err为undefined,否则为错误对象。 | 353 354**错误码:** 355 356以下错误码的详细介绍请参见[ohos.bundle错误码](../errorcodes/errorcode-bundle.md)。 357 358| 错误码ID | 错误信息 | 359| -------- | ----------------------------------- | 360| 17700001 | The specified bundle name is not found. | 361| 17700004 | The specified user ID is not found. | 362 363**示例:** 364 365```ts 366import installer from '@ohos.bundle.installer'; 367let bundleName = 'com.ohos.demo'; 368let installParam = { 369 userId: 100, 370 isKeepData: false, 371 installFlag: 1 372}; 373 374try { 375 installer.getBundleInstaller().then(data => { 376 data.recover(bundleName, installParam, err => { 377 if (err) { 378 console.error('recover failed:' + err.message); 379 } else { 380 console.info('recover successfully.'); 381 } 382 }); 383 }).catch(error => { 384 console.error('getBundleInstaller failed. Cause: ' + error.message); 385 }); 386} catch (error) { 387 console.error('getBundleInstaller failed. Cause: ' + error.message); 388} 389``` 390## BundleInstaller.recover 391 392recover(bundleName: string, installParam?: InstallParam) : Promise\<void\>; 393 394以异步方法回滚应用到初次安装时的状态,使用Promise形式返回结果。 395 396**系统接口:** 此接口为系统接口。 397 398**需要权限:** ohos.permission.INSTALL_BUNDLE 399 400**系统能力:** SystemCapability.BundleManager.BundleFramework.Core 401 402**参数:** 403 404| 参数名 | 类型 | 必填 | 说明 | 405| ------------ | ----------------------------- | ---- | ------------------------------------------------------------ | 406| bundleName | string | 是 | 待卸载应用的包名。 | 407| installParam | [InstallParam](#installparam) | 否 | 指定安装所需的其他参数。 | 408 409**返回值:** 410 411| 类型 | 说明 | 412| --------------- | -------------------------------------- | 413| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 414 415**错误码:** 416 417以下错误码的详细介绍请参见[ohos.bundle错误码](../errorcodes/errorcode-bundle.md)。 418 419| 错误码ID | 错误信息 | 420| -------- | ----------------------------------- | 421| 17700001 | The specified bundle name is not found. | 422| 17700004 | The specified user ID is not found. | 423 424**示例:** 425```ts 426import installer from '@ohos.bundle.installer'; 427let bundleName = 'com.ohos.demo'; 428let installParam = { 429 userId: 100, 430 isKeepData: false, 431 installFlag: 1, 432}; 433 434try { 435 installer.getBundleInstaller().then(data => { 436 data.recover(bundleName, installParam) 437 .then((data) => { 438 console.info('recover successfully: ' + JSON.stringify(data)); 439 }).catch((error) => { 440 console.error('recover failed:' + error.message); 441 }); 442 }).catch(error => { 443 console.error('getBundleInstaller failed. Cause: ' + error.message); 444 }); 445} catch (error) { 446 console.error('getBundleInstaller failed. Cause: ' + error.message); 447} 448``` 449## HashParam 450 451应用程序安装卸载哈希参数信息。 452 453 **系统能力:** SystemCapability.BundleManager.BundleFramework.Core 454 455 **系统接口:** 此接口为系统接口,三方应用不支持调用 456 457| 名称 | 类型 | 必填 | 说明 | 458| ---------- | ------ | ---------------- | ---------------- | 459| moduleName | string | 是 | 应用程序模块名称。 | 460| hashValue | string | 是 | 哈希值。 | 461 462## InstallParam 463 464应用程序安装、卸载或恢复需指定的参数信息。 465 466 **系统能力:** SystemCapability.BundleManager.BundleFramework.Core 467 468 **系统接口:** 此接口为系统接口,三方应用不支持调用 469 470| 名称 | 类型 | 必填 | 说明 | 471| ------------------------------ | ------------------------------ | ------------------ | ------------------ | 472| userId | number | 否 | 指示用户id,可使用[queryOsAccountLocalIdFromProcess](js-apis-osAccount.md#getOsAccountLocalId)获取当前进程所在用户。 | 473| installFlag | number | 否 | 指示安装标志,枚举值:0:应用初次安装,1:应用覆盖安装。 | 474| isKeepData | boolean | 否 | 卸载时是否保留数据目录。 | 475| hashParams | Array<[HashParam](#hashparam)> | 否 | 哈希值参数。 | 476| crowdtestDeadline| number | 否 |[众测](https://developer.huawei.com/consumer/cn/agconnect/crowd-test/)截止日期。 |