• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;string&gt;, installParam: InstallParam, callback: AsyncCallback&lt;void&gt;): 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&lt;string&gt;                                  | 是   | 存储应用程序包的路径。路径应该是当前应用程序中存放HAP包的数据目录。当传入的路径是一个目录时, 该目录下只能放同一个应用的HAP包,且这些HAP包的签名需要保持一致。 |
103| installParam           | [InstallParam](#installparam)                        | 是   | 指定安装所需的其他参数。                                     |
104| callback | AsyncCallback&lt;void&gt; | 是 | 回调函数,安装应用成功,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&lt;void&gt;): 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&lt;void&gt; | 是 | 回调函数,卸载应用成功,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&lt;void&gt;): 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&lt;void&gt; | 是 | 回调函数,回滚应用成功,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/)截止日期。 |