1# BundleInstaller 2 3> **说明:** 4> 本模块首批接口从API version 7 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 5 6本模块提供设备上安装、升级和卸载应用的能力。 7 8## BundleInstaller.install<sup>(deprecated)<sup> 9 10> 从API version 9开始不再维护,建议使用[@ohos.bundle.installer.install](js-apis-installer.md)替代。 11 12install(bundleFilePaths: Array<string>, param: InstallParam, callback: AsyncCallback<InstallStatus>): void; 13 14以异步方法在应用中安装hap,支持多hap安装。使用callback形式返回结果。 15 16**需要权限:** 17 18ohos.permission.INSTALL_BUNDLE 19 20**系统能力:** 21 22SystemCapability.BundleManager.BundleFramework 23 24**系统API:** 此接口为系统接口,三方应用不支持调用 25 26**参数:** 27 28| 参数名 | 类型 | 必填 | 说明 | 29| --------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 30| bundleFilePaths | Array<string> | 是 | 指示存储HAP的沙箱路径。沙箱路径的获取方法参见[获取应用的沙箱路径](#获取应用的沙箱路径)。 | 31| param | [InstallParam](#installparamdeprecated) | 是 | 指定安装所需的其他参数。 | 32| callback | AsyncCallback<[InstallStatus](#installstatusdeprecated)> | 是 | 程序启动作为入参的回调函数,返回安装状态信息。 | 33 34**示例:** 35 36```ts 37import bundle from '@ohos.bundle'; 38let hapFilePaths = ['/data/storage/el2/base/haps/entry/files/']; 39let installParam = { 40 userId: 100, 41 isKeepData: false, 42 installFlag: 1, 43}; 44 45bundle.getBundleInstaller().then(installer => { 46 installer.install(hapFilePaths, installParam, err => { 47 if (err) { 48 console.error('install failed:' + JSON.stringify(err)); 49 } else { 50 console.info('install successfully.'); 51 } 52 }); 53}).catch(error => { 54 console.error('getBundleInstaller failed. Cause: ' + error.message); 55}); 56``` 57 58## BundleInstaller.uninstall<sup>(deprecated)<sup> 59 60> 从API version 9开始不再维护,建议使用[uninstall](js-apis-installer.md)替代。 61 62uninstall(bundleName: string, param: InstallParam, callback: AsyncCallback<InstallStatus>): void; 63 64以异步方法卸载应用程序,使用callback异步回调,返回安装状态信息。 65 66**需要权限:** 67 68ohos.permission.INSTALL_BUNDLE 69 70**系统能力:** 71 72SystemCapability.BundleManager.BundleFramework 73 74**系统API:** 此接口为系统接口,三方应用不支持调用 75 76**参数:** 77 78| 参数名 | 类型 | 必填 | 说明 | 79| ---------- | ------------------------------------------------------------ | ---- | ---------------------------------------------- | 80| bundleName | string | 是 | 应用Bundle名称。 | 81| param | [InstallParam](#installparamdeprecated) | 是 | 指定卸载所需的其他参数。 | 82| callback | AsyncCallback<[InstallStatus](#installstatusdeprecated)> | 是 | 程序启动作为入参的回调函数,返回安装状态信息。 | 83 84**示例:** 85 86```ts 87import bundle from '@ohos.bundle'; 88let bundleName = 'com.example.myapplication'; 89let installParam = { 90 userId: 100, 91 isKeepData: false, 92 installFlag: 1, 93}; 94 95bundle.getBundleInstaller().then(installer => { 96 installer.uninstall(bundleName, installParam, err => { 97 if (err) { 98 console.error('uninstall failed:' + JSON.stringify(err)); 99 } else { 100 console.info('uninstall successfully.'); 101 } 102 }); 103}).catch(error => { 104 console.error('getBundleInstaller failed. Cause: ' + error.message); 105}); 106``` 107## BundleInstaller.recover<sup>(deprecated)<sup> 108 109> 从API version 9开始不再维护,建议使用[recover](js-apis-installer.md)替代。 110 111recover(bundleName: string, param: InstallParam, callback: AsyncCallback<InstallStatus>): void; 112 113以异步方法恢复一个应用程序,使用callback形式返回结果。当预置应用被卸载后,可以通过此接口进行恢复。 114 115**需要权限:** 116 117ohos.permission.INSTALL_BUNDLE 118 119**系统能力:** 120 121SystemCapability.BundleManager.BundleFramework 122 123**系统API:** 此接口为系统接口,三方应用不支持调用 124 125**参数:** 126 127| 参数名 | 类型 | 必填 | 说明 | 128| ---------- | ------------------------------------------------------------ | ---- | -------------------------------------------------- | 129| bundleName | string | 是 | 应用Bundle名称。 | 130| param | [InstallParam](#installparamdeprecated) | 是 | 指定应用恢复所需的其他参数。 | 131| callback | AsyncCallback<[InstallStatus](#installstatusdeprecated)> | 是 | 程序启动作为入参的回调函数,返回应用恢复状态信息。 | 132 133**示例:** 134 135```ts 136import bundle from '@ohos.bundle'; 137 138let bundleName = 'com.example.myapplication'; 139let installParam = { 140 userId: 100, 141 isKeepData: false, 142 installFlag: 1, 143}; 144 145bundle.getBundleInstaller().then(installer => { 146 installer.recover(bundleName, installParam, err => { 147 if (err) { 148 console.error('recover failed:' + JSON.stringify(err)); 149 } else { 150 console.info('recover successfully.'); 151 } 152 }); 153}).catch(error => { 154 console.error('getBundleInstaller failed. Cause: ' + error.message); 155}); 156``` 157 158## InstallParam<sup>(deprecated)<sup> 159 160安装、恢复或卸载时需要指定的参数。 161 162 **系统能力:** 以下各项对应的系统能力均为SystemCapability.BundleManager.BundleFramework 163 164 **系统API:** 此接口为系统接口,三方应用不支持调用 165 166| 名称 | 类型 | 可读 | 可写 | 说明 | 167| ----------- | ------- | ---- | ---- | ------------------ | 168| userId | number | 是 | 是 | 指示用户id, 默认值:调用方的userId | 169| installFlag | number | 是 | 是 | 指示安装标志, 默认值:1, 取值范围:</br>1: 覆盖安装, </br>16: 免安装| 170| isKeepData | boolean | 是 | 是 | 指示参数是否有数据,默认值:false | 171 172## InstallStatus<sup>(deprecated)<sup> 173 174应用程序安装卸载的结果。 175 176 **系统能力:** 以下各项对应的系统能力均为SystemCapability.BundleManager.BundleFramework 177 178 **系统API:** 此接口为系统接口,三方应用不支持调用 179 180| 名称 | 类型 | 可读 | 可写 | 说明 | 181| ------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------ | 182| status | bundle.[InstallErrorCode](js-apis-Bundle.md#installerrorcode) | 是 | 否 | 表示安装或卸载错误状态码。取值范围:枚举值[InstallErrorCode](js-apis-Bundle.md#installerrorcode) | 183| statusMessage | string | 是 | 否 | 表示安装或卸载的字符串结果信息。取值范围包括:<br/> "SUCCESS" : 安装成功,</br> "STATUS_INSTALL_FAILURE": 安装失败(不存在安装文件), </br> "STATUS_INSTALL_FAILURE_ABORTED": 安装中止, </br> "STATUS_INSTALL_FAILURE_INVALID": 安装参数无效, </br> "STATUS_INSTALL_FAILURE_CONFLICT": 安装冲突(常见于升级和已有应用基本信息不一致), </br> "STATUS_INSTALL_FAILURE_STORAGE": 存储包信息失败, </br> "STATUS_INSTALL_FAILURE_INCOMPATIBLE": 安装不兼容(常见于版本降级安装或者签名信息错误), </br> "STATUS_UNINSTALL_FAILURE": 卸载失败(不存在卸载的应用), </br> "STATUS_UNINSTALL_FAILURE_ABORTED": 卸载中止(没有使用), </br> "STATUS_UNINSTALL_FAILURE_ABORTED": 卸载冲突(卸载系统应用失败, 结束应用进程失败), </br> "STATUS_INSTALL_FAILURE_DOWNLOAD_TIMEOUT": 安装失败(下载超时), </br> "STATUS_INSTALL_FAILURE_DOWNLOAD_FAILED": 安装失败(下载失败), </br> "STATUS_RECOVER_FAILURE_INVALID": 恢复预置应用失败, </br> "STATUS_ABILITY_NOT_FOUND": Ability未找到, </br> "STATUS_BMS_SERVICE_ERROR": BMS服务错误, </br> "STATUS_FAILED_NO_SPACE_LEFT": 设备空间不足, </br> "STATUS_GRANT_REQUEST_PERMISSIONS_FAILED": 应用授权失败, </br> "STATUS_INSTALL_PERMISSION_DENIED": 缺少安装权限, </br> "STATUS_UNINSTALL_PERMISSION_DENIED": 缺少卸载权限| 184 185## 获取应用的沙箱路径 186对于FA模型,应用的沙箱路径可以通过[Context](js-apis-inner-app-context.md)中的方法获取;对于Stage模型,应用的沙箱路径可以通过[Context](js-apis-inner-application-uiAbilityContext.md#abilitycontext)中的属性获取。下面以获取沙箱文件路径为例。 187 188**示例:** 189``` ts 190// Stage模型 191import UIAbility from '@ohos.app.ability.UIAbility'; 192export default class EntryAbility extends UIAbility { 193 onWindowStageCreate(windowStage) { 194 let context = this.context; 195 let pathDir = context.filesDir; 196 console.info('sandbox path is ' + pathDir); 197 } 198} 199 200// FA模型 201import featureAbility from '@ohos.ability.featureAbility'; 202let context = featureAbility.getContext(); 203context.getFilesDir().then((data) => { 204 let pathDir = data; 205 console.info('sandbox path is ' + pathDir); 206}); 207```