• Home
Name Date Size #Lines LOC

..--

common/12-May-2024-1,6311,023

figures/12-May-2024-

interfaces/innerkits/12-May-2024-35,14021,974

kits/12-May-2024-21,79513,388

libs/12-May-2024-8,2624,780

sa_profile/12-May-2024-268202

services/12-May-2024-89,52059,796

test/12-May-2024-167,411129,055

tools/12-May-2024-4,8463,139

.gitattributesD12-May-2024631 1615

BUILD.gnD12-May-20242 KiB4842

LICENSED12-May-202410.1 KiB177150

OAT.xmlD12-May-20244 KiB7016

README_zh.mdD12-May-202448.8 KiB954806

appexecfwk.gniD12-May-20241.2 KiB2926

bundle.jsonD12-May-20241.3 KiB5757

ohos.buildD12-May-20245 KiB116113

README_zh.md

1# **用户程序框架子系统**
2
3## 简介
4
5用户程序框架子系统是OpenHarmony为开发者提供的一套开发OpenHarmony应用程序的框架。
6
7**包含以下模块:**
8
9- **AppKit:**是用户程序框架提供给开发者的开发包,开发者基于该开发包可以开发出基于Ability组件的应用。
10
11- **AppManagerService:**应用管理服务,用于管理应用运行关系、调度应用进程生命周期及状态的系统服务。
12
13- **BundleManagerService:**是负责管理安装包的系统服务,常见的比如包安装、更新,卸载和包信息查询等,运行在Foundation进程。
14
15应用程序框架子系统架构如下图所示:
16
17![](figures/appexecfwk.png)
18
19
20
21## 目录
22
23```
24foundation/appexecfwk/standard
25├── kits
26│   └── appkit						   # Appkit实现的核心代码
27├── common
28│   └── log							   # 日志组件目录
29├── interfaces
30│   └── innerkits					   # 内部接口存放目录
31├── services
32│   ├── appmgr						   # 用户程序管理服务框架代码
33│   └── bundlemgr	                   # 包管理服务框架代码
34├── test						       # 测试目录
35└── tools                              # bm命令存放目录
36```
37
38### 使用说明
39
40#### 根据给定的bundle名称获取ApplicationInfo
41
42* getApplicationInfo参数描述
43
44  | 名称        | 读写属性 | 类型   | 必填 | 描述                                                    |
45  | ----------- | -------- | ------ | ---- | ------------------------------------------------------- |
46  | bundleName  | 只读     | string | 是   | 应用名                                                  |
47  | bundleFlags | 只读     | number | 是   | 0:返回默认app信息<<br/>8:返回包含permissions的app信息 |
48  | userId      | 只读     | number | 是   | 用户ID                                                  |
49
50* 返回值
51
52  Promise<ApplicationInfo>:返回值为Promise对象,Promise中包含应用信息。
53
54* 示例
55
56```
57bundle.getApplicationInfo('com.example.myapplicationInstall', 8, 0).then((data) => {
58    console.info("name: for begin");
59    console.info("name:" + data.name);
60    console.info("bundleName:" + data.bundleName);
61    console.info("description:" + data.description);
62    console.info("descriptionId:" + data.descriptionId);
63    console.info("iconPath:" + data.iconPath);
64    console.info("iconId:" + data.iconId);
65    console.info("label:" + data.label);
66    console.info("labelId:" + data.labelId);
67    console.info("deviceId:" + data.deviceId);
68    console.info("signatureKey:" + data.signatureKey);
69    console.info("process:" + data.process);
70    console.info("isSystemApp:" + data.isSystemApp);
71    console.info("isLauncherApp:" + data.isLauncherApp);
72    console.info("supportedModes:" + data.supportedModes);
73
74    console.info('getApplicationInfo permissions length [' + data.permissions.length + ']');
75    for (var j = 0; j < data.permissions.length; j++) {
76        console.info("permissions[" + j + "]:" + data.permissions[j]);
77    }
78    console.info('getApplicationInfo moduleSourceDirs length [' + data.moduleSourceDirs.length + ']');
79    for (var j = 0; j < data.moduleSourceDirs.length; j++) {
80        console.info("moduleSourceDirs[" + j + "]:" + data.moduleSourceDirs[j]);
81    }
82    console.info('getApplicationInfo moduleInfos length [' + data.moduleInfos.length + ']');
83    for (var j = 0; j < data.moduleInfos.length; j++) {
84        console.info("moduleInfos[" + j + "]moduleName:" + data.moduleInfos[j].moduleName);
85        console.info("moduleInfos[" + j + "]moduleSourceDir:" + data.moduleInfos[j].moduleSourceDir);
86    }
87    console.info("entryDir:" + data.entryDir);
88    console.info("codePath:" + data.codePath);
89    console.info("dataDir:" + data.dataDir);
90    console.info("dataBaseDir:" + data.dataBaseDir);
91    console.info("cacheDir:" + data.cacheDir);
92})
93```
94根据给定的bundle名称获取ApplicationInfo(callback方式)
95
96* getApplicationInfo参数描述
97
98  | 名称        | 读写属性 | 类型                           | 必填 | 描述                                                    |
99  | ----------- | -------- | ------------------------------ | ---- | ------------------------------------------------------- |
100  | bundleName  | 只读     | string                         | 是   | 应用名                                                  |
101  | bundleFlags | 只读     | number                         | 是   | 0:返回默认app信息<<br/>8:返回包含permissions的app信息 |
102  | userId      | 只读     | number                         | 是   | 用户ID                                                  |
103  | callback    | 只读     | AsyncCallback<ApplicationInfo> | 是   | 回调方法                                                |
104
105* 返回值
106
107  void
108
109* 示例
110
111```
112bundle.getApplicationInfo('com.example.myapplicationInstall', 8, 0, OnReceiveEvent);
113
114function OnReceiveEvent(err, data) {
115    console.info("name: for begin");
116    console.info("name:" + data.name);
117    console.info("bundleName:" + data.bundleName);
118    console.info("description:" + data.description);
119    console.info("descriptionId:" + data.descriptionId);
120    console.info("iconPath:" + data.iconPath);
121    console.info("iconId:" + data.iconId);
122    console.info("label:" + data.label);
123    console.info("labelId:" + data.labelId);
124    console.info("deviceId:" + data.deviceId);
125    console.info("signatureKey:" + data.signatureKey);
126    console.info("process:" + data.process);
127    console.info("isSystemApp:" + data.isSystemApp);
128    console.info("isLauncherApp:" + data.isLauncherApp);
129    console.info("supportedModes:" + data.supportedModes);
130
131    console.info('getApplicationInfo permissions length [' + data.permissions.length + ']');
132    for (var j = 0; j < data.permissions.length; j++) {
133        console.info("permissions[" + j + "]:" + data.permissions[j]);
134    }
135    console.info('getApplicationInfo moduleSourceDirs length [' + data.moduleSourceDirs.length + ']');
136    for (var j = 0; j < data.moduleSourceDirs.length; j++) {
137        console.info("moduleSourceDirs[" + j + "]:" + data.moduleSourceDirs[j]);
138    }
139    console.info('getApplicationInfo moduleInfos length [' + data.moduleInfos.length + ']');
140    for (var j = 0; j < data.moduleInfos.length; j++) {
141        console.info("moduleInfos[" + j + "]moduleName:" + data.moduleInfos[j].moduleName);
142        console.info("moduleInfos[" + j + "]moduleSourceDir:" + data.moduleInfos[j].moduleSourceDir);
143    }
144    console.info("entryDir:" + data.entryDir);
145    console.info("codePath:" + data.codePath);
146    console.info("dataDir:" + data.dataDir);
147    console.info("dataBaseDir:" + data.dataBaseDir);
148    console.info("cacheDir:" + data.cacheDir);
149}
150```
151
152#### 获取系统中所有可用的包信息
153
154* getAllBundleInfo参数描述
155
156  | 名称       | 读写属性 | 类型       | 必填 | 描述                                                        |
157  | ---------- | -------- | ---------- | ---- | ----------------------------------------------------------- |
158  | bundleFlag | 只读     | BundleFlag | 是   | 0:返回默认BundleInfo<br>1:返回包含abilityInfo的BundleInfo |
159
160* 返回值
161
162  Promise<Array<BundleInfo>>:返回值为Promise对象,Promise中包含包信息列表。
163
164* 示例
165
166```
167bundle.getAllBundleInfo(0).then((data) => {
168    for (var i = 0; i < data.length; i++) {
169        console.info("index[" + i + "].name: for begin");
170        console.info("index[" + i + "].name:" + data[i].name);
171        console.info("index[" + i + "].label:" + data[i].label);
172        console.info("index[" + i + "].description:" + data[i].description);
173        console.info("index[" + i + "].vendor:" + data[i].vendor);
174        console.info("index[" + i + "].versionCode:" + data[i].versionCode);
175        console.info("index[" + i + "].versionName:" + data[i].versionName);
176        console.info("index[" + i + "].jointUserId:" + data[i].jointUserId);
177        console.info("index[" + i + "].minSdkVersion:" + data[i].minSdkVersion);
178        console.info("index[" + i + "].maxSdkVersion:" + data[i].maxSdkVersion);
179        console.info("index[" + i + "].mainEntry:" + data[i].mainEntry);
180        console.info("index[" + i + "].cpuAbi:" + data[i].cpuAbi);
181        console.info("index[" + i + "].appId:" + data[i].appId);
182        console.info("index[" + i + "].compatibleVersion:" + data[i].compatibleVersion);
183        console.info("index[" + i + "].targetVersion:" + data[i].targetVersion);
184        console.info("index[" + i + "].releaseType:" + data[i].releaseType);
185        console.info("index[" + i + "].uid:" + data[i].uid);
186        console.info("index[" + i + "].gid:" + data[i].gid);
187        console.info("index[" + i + "].seInfo:" + data[i].seInfo);
188        console.info("index[" + i + "].entryModuleName:" + data[i].entryModuleName);
189        console.info("index[" + i + "].isKeepAlive:" + data[i].isKeepAlive);
190        console.info("index[" + i + "].isNativeApp:" + data[i].isNativeApp);
191        console.info("index[" + i + "].installTime:" + data[i].installTime);
192        console.info("index[" + i + "].updateTime:" + data[i].updateTime);
193        console.info("index[" + i + "].appInfo.name:" + data[i].applicationInfo.name);
194        console.info("index[" + i + "].appInfo.bundleName:" + data[i].applicationInfo.bundleName);
195        console.info('getAllBundleInfo reqPermissions length [' + data[i].reqPermissions.length + ']');
196        for (var j = 0; j < data[i].reqPermissions.length; j++) {
197            console.info("index[" + i + "]reqPermissions[" + j + "]:" + data[i].reqPermissions[j]);
198        }
199        console.info('getAllBundleInfo defPermissions length [' + data[i].defPermissions.length + ']');
200        for (var j = 0; j < data[i].defPermissions.length; j++) {
201            console.info("index[" + i + "]defPermissions[" + j + "]:" + data[i].defPermissions[j]);
202        }
203
204        console.info('getAllBundleInfo hapModuleNames length [' + data[i].hapModuleNames.length + ']');
205        for (var j = 0; j < data[i].hapModuleNames.length; j++) {
206            console.info("index[" + i + "]hapModuleNames[" + j + "]:" + data[i].hapModuleNames[j]);
207        }
208        console.info('getAllBundleInfo moduleNames length [' + data[i].moduleNames.length + ']');
209        for (var j = 0; j < data[i].moduleNames.length; j++) {
210            console.info("index[" + i + "]moduleNames[" + j + "]:" + data[i].moduleNames[j]);
211        }
212        console.info('getAllBundleInfo modulePublicDirs length [' + data[i].modulePublicDirs.length + ']');
213        for (var j = 0; j < data[i].modulePublicDirs.length; j++) {
214            console.info("index[" + i + "]modulePublicDirs[" + j + "]:" + data[i].modulePublicDirs[j]);
215        }
216        console.info('getAllBundleInfo moduleDirs length [' + data[i].moduleDirs.length + ']');
217        for (var j = 0; j < data[i].moduleDirs.length; j++) {
218            console.info("index[" + i + "]moduleDirs[" + j + "]:" + data[i].moduleDirs[j]);
219        }
220        console.info('getAllBundleInfo moduleResPaths length [' + data[i].moduleResPaths.length + ']');
221        for (var j = 0; j < data[i].moduleResPaths.length; j++) {
222            console.info("index[" + i + "]moduleResPaths[" + j + "]:" + data[i].moduleResPaths[j]);
223        }
224        console.info('getAllBundleInfo abilityInfo length [' + data[i].abilityInfos.length + ']');
225        for (var j = 0; j < data[i].abilityInfos.length; j++) {
226            console.info("index[" + i + "]abilityInfos[" + j + "]name:" + data[i].abilityInfos[j].name);
227            console.info("index[" + i + "]abilityInfos[" + j + "]package:" + data[i].abilityInfos[j].package);
228        }
229    }
230})
231```
232
233获取系统中所有可用的包信息(callback形式)
234
235* getAllBundleInfo参数描述
236
237  | 名称       | 读写属性 | 类型                             | 必填 | 描述                                                         |
238  | ---------- | -------- | -------------------------------- | ---- | ------------------------------------------------------------ |
239  | bundleFlag | 只读     | BundleFlag                       | 是   | 0:返回默认BundleInfo<br/>1:返回包含abilityInfo的BundleInfo |
240  | callback   | 只读     | AsyncCallback<Array<BundleInfo>> | 是   | 回调方法                                                     |
241
242* 返回值
243
244  void
245
246* 示例
247
248```
249bundle.getAllBundleInfo(0, OnReceiveEvent);
250
251function OnReceiveEvent(err, data) {
252    console.info('xxx getAllBundleInfo data length [' + data.length + ']');
253    for (var i = 0; i < data.length; i++) {
254        console.info("index[" + i + "].name: for begin");
255        console.info("index[" + i + "].name:" + data[i].name);
256        console.info("index[" + i + "].label:" + data[i].label);
257        console.info("index[" + i + "].description:" + data[i].description);
258        console.info("index[" + i + "].vendor:" + data[i].vendor);
259        console.info("index[" + i + "].versionCode:" + data[i].versionCode);
260        console.info("index[" + i + "].versionName:" + data[i].versionName);
261        console.info("index[" + i + "].jointUserId:" + data[i].jointUserId);
262        console.info("index[" + i + "].minSdkVersion:" + data[i].minSdkVersion);
263        console.info("index[" + i + "].maxSdkVersion:" + data[i].maxSdkVersion);
264        console.info("index[" + i + "].mainEntry:" + data[i].mainEntry);
265        console.info("index[" + i + "].cpuAbi:" + data[i].cpuAbi);
266        console.info("index[" + i + "].appId:" + data[i].appId);
267        console.info("index[" + i + "].compatibleVersion:" + data[i].compatibleVersion);
268        console.info("index[" + i + "].targetVersion:" + data[i].targetVersion);
269        console.info("index[" + i + "].releaseType:" + data[i].releaseType);
270        console.info("index[" + i + "].uid:" + data[i].uid);
271        console.info("index[" + i + "].gid:" + data[i].gid);
272        console.info("index[" + i + "].seInfo:" + data[i].seInfo);
273        console.info("index[" + i + "].entryModuleName:" + data[i].entryModuleName);
274        console.info("index[" + i + "].isKeepAlive:" + data[i].isKeepAlive);
275        console.info("index[" + i + "].isNativeApp:" + data[i].isNativeApp);
276        console.info("index[" + i + "].installTime:" + data[i].installTime);
277        console.info("index[" + i + "].updateTime:" + data[i].updateTime);
278        console.info("index[" + i + "].appInfo.name:" + data[i].applicationInfo.name);
279        console.info("index[" + i + "].appInfo.bundleName:" + data[i].applicationInfo.bundleName);
280        console.info('getAllBundleInfo reqPermissions length [' + data[i].reqPermissions.length + ']');
281        for (var j = 0; j < data[i].reqPermissions.length; j++) {
282            console.info("index[" + i + "]reqPermissions[" + j + "]:" + data[i].reqPermissions[j]);
283        }
284        console.info('getAllBundleInfo defPermissions length [' + data[i].defPermissions.length + ']');
285        for (var j = 0; j < data[i].defPermissions.length; j++) {
286            console.info("index[" + i + "]defPermissions[" + j + "]:" + data[i].defPermissions[j]);
287        }
288
289        console.info('getAllBundleInfo hapModuleNames length [' + data[i].hapModuleNames.length + ']');
290        for (var j = 0; j < data[i].hapModuleNames.length; j++) {
291            console.info("index[" + i + "]hapModuleNames[" + j + "]:" + data[i].hapModuleNames[j]);
292        }
293        console.info('getAllBundleInfo moduleNames length [' + data[i].moduleNames.length + ']');
294        for (var j = 0; j < data[i].moduleNames.length; j++) {
295            console.info("index[" + i + "]moduleNames[" + j + "]:" + data[i].moduleNames[j]);
296        }
297        console.info('getAllBundleInfo modulePublicDirs length [' + data[i].modulePublicDirs.length + ']');
298        for (var j = 0; j < data[i].modulePublicDirs.length; j++) {
299            console.info("index[" + i + "]modulePublicDirs[" + j + "]:" + data[i].modulePublicDirs[j]);
300        }
301        console.info('getAllBundleInfo moduleDirs length [' + data[i].moduleDirs.length + ']');
302        for (var j = 0; j < data[i].moduleDirs.length; j++) {
303            console.info("index[" + i + "]moduleDirs[" + j + "]:" + data[i].moduleDirs[j]);
304        }
305        console.info('getAllBundleInfo moduleResPaths length [' + data[i].moduleResPaths.length + ']');
306        for (var j = 0; j < data[i].moduleResPaths.length; j++) {
307            console.info("index[" + i + "]moduleResPaths[" + j + "]:" + data[i].moduleResPaths[j]);
308        }
309        console.info('getAllBundleInfo abilityInfo length [' + data[i].abilityInfos.length + ']');
310        for (var j = 0; j < data[i].abilityInfos.length; j++) {
311            console.info("index[" + i + "]abilityInfos[" + j + "]name:" + data[i].abilityInfos[j].name);
312            console.info("index[" + i + "]abilityInfos[" + j + "]package:" + data[i].abilityInfos[j].package);
313        }
314    }
315}
316```
317
318#### 根据bundle名称获取BundleInfo
319
320* getBundleInfo参数描述
321
322  | 名称        | 读写属性 | 类型   | 必填 | 描述                                                         |
323  | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ |
324  | bundleName  | 只读     | string | 是   | 包名                                                         |
325  | bundleFlags | 只读     | number | 是   | 0:返回默认BundleInfo<br/>1:返回包含abilityInfo的BundleInfo |
326
327* 返回值
328
329  Promise<BundleInfo>:返回值为Promise对象,Promise中包含包信息。
330
331* 示例
332
333```
334bundle.getBundleInfo('com.example.myapplicationInstall', 1).then((data) => {
335    console.info("name:" + data.name);
336    console.info("label:" + data.label);
337    console.info("description:" + data.description);
338    console.info("vendor:" + data.vendor);
339    console.info("versionCode:" + data.versionCode);
340    console.info("versionName:" + data.versionName);
341    console.info("jointUserId:" + data.jointUserId);
342    console.info("minSdkVersion:" + data.minSdkVersion);
343    console.info("maxSdkVersion:" + data.maxSdkVersion);
344    console.info("mainEntry:" + data.mainEntry);
345    console.info("cpuAbi:" + data.cpuAbi);
346    console.info("appId:" + data.appId);
347    console.info("compatibleVersion:" + data.compatibleVersion);
348    console.info("targetVersion:" + data.targetVersion);
349    console.info("releaseType:" + data.releaseType);
350    console.info("uid:" + data.uid);
351    console.info("gid:" + data.gid);
352    console.info("seInfo:" + data.seInfo);
353    console.info("entryModuleName:" + data.entryModuleName);
354    console.info("isKeepAlive:" + data.isKeepAlive);
355    console.info("isNativeApp:" + data.isNativeApp);
356    console.info("installTime:" + data.installTime);
357    console.info("updateTime:" + data.updateTime);
358    console.info("appInfo.name:" + data.applicationInfo.name);
359    console.info("appInfo.bundleName:" + data.applicationInfo.bundleName);
360    console.info('getBundleInfo reqPermissions length [' + data.reqPermissions.length + ']');
361    for (var j = 0; j < data.reqPermissions.length; j++) {
362        console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]);
363    }
364    console.info('getBundleInfo defPermissions length [' + data.defPermissions.length + ']');
365    for (var j = 0; j < data.defPermissions.length; j++) {
366        console.info("defPermissions[" + j + "]:" + data.defPermissions[j]);
367    }
368
369    console.info('getBundleInfo hapModuleNames length [' + data.hapModuleNames.length + ']');
370    for (var j = 0; j < data.hapModuleNames.length; j++) {
371        console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]);
372    }
373    console.info('getBundleInfo moduleNames length [' + data.moduleNames.length + ']');
374    for (var j = 0; j < data.moduleNames.length; j++) {
375        console.info("moduleNames[" + j + "]:" + data.moduleNames[j]);
376    }
377    console.info('getBundleInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']');
378    for (var j = 0; j < data.modulePublicDirs.length; j++) {
379        console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]);
380    }
381    console.info('getBundleInfo moduleDirs length [' + data.moduleDirs.length + ']');
382    for (var j = 0; j < data.moduleDirs.length; j++) {
383        console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]);
384    }
385    console.info('getBundleInfo moduleResPaths length [' + data.moduleResPaths.length + ']');
386    for (var j = 0; j < data.moduleResPaths.length; j++) {
387        console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]);
388    }
389    console.info('getBundleInfo abilityInfo length [' + data.abilityInfos.length + ']');
390    for (var j = 0; j < data.abilityInfos.length; j++) {
391        console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name);
392        console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package);
393    }
394})
395```
396
397根据bundle名称获取BundleInfo(callback形式)
398
399* getBundleInfo参数描述
400
401  | 名称        | 读写属性 | 类型                      | 必填 | 描述                                                         |
402  | ----------- | -------- | ------------------------- | ---- | ------------------------------------------------------------ |
403  | bundleName  | 只读     | string                    | 是   | 包名                                                         |
404  | bundleFlags | 只读     | number                    | 是   | 0:返回默认BundleInfo<br/>1:返回包含abilityInfo的BundleInfo |
405  | callback    | 只读     | AsyncCallback<BundleInfo> | 是   | 回调方法                                                     |
406
407* 返回值
408
409  void
410
411* 示例
412
413```
414bundle.getBundleInfo('com.example.myapplicationInstall', 1, OnReceiveEvent);
415
416function OnReceiveEvent(err, data) {
417    console.info("name:" + data.name);
418    console.info("label:" + data.label);
419    console.info("description:" + data.description);
420    console.info("vendor:" + data.vendor);
421    console.info("versionCode:" + data.versionCode);
422    console.info("versionName:" + data.versionName);
423    console.info("jointUserId:" + data.jointUserId);
424    console.info("minSdkVersion:" + data.minSdkVersion);
425    console.info("maxSdkVersion:" + data.maxSdkVersion);
426    console.info("mainEntry:" + data.mainEntry);
427    console.info("cpuAbi:" + data.cpuAbi);
428    console.info("appId:" + data.appId);
429    console.info("compatibleVersion:" + data.compatibleVersion);
430    console.info("targetVersion:" + data.targetVersion);
431    console.info("releaseType:" + data.releaseType);
432    console.info("uid:" + data.uid);
433    console.info("gid:" + data.gid);
434    console.info("seInfo:" + data.seInfo);
435    console.info("entryModuleName:" + data.entryModuleName);
436    console.info("isKeepAlive:" + data.isKeepAlive);
437    console.info("isNativeApp:" + data.isNativeApp);
438    console.info("installTime:" + data.installTime);
439    console.info("updateTime:" + data.updateTime);
440    console.info("appInfo.name:" + data.applicationInfo.name);
441    console.info("appInfo.bundleName:" + data.applicationInfo.bundleName);
442    console.info('getBundleInfo reqPermissions length [' + data.reqPermissions.length + ']');
443    for (var j = 0; j < data.reqPermissions.length; j++) {
444        console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]);
445    }
446    console.info('getBundleInfo defPermissions length [' + data.defPermissions.length + ']');
447    for (var j = 0; j < data.defPermissions.length; j++) {
448        console.info("defPermissions[" + j + "]:" + data.defPermissions[j]);
449    }
450
451    console.info('getBundleInfo hapModuleNames length [' + data.hapModuleNames.length + ']');
452    for (var j = 0; j < data.hapModuleNames.length; j++) {
453        console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]);
454    }
455    console.info('getBundleInfo moduleNames length [' + data.moduleNames.length + ']');
456    for (var j = 0; j < data.moduleNames.length; j++) {
457        console.info("moduleNames[" + j + "]:" + data.moduleNames[j]);
458    }
459    console.info('getBundleInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']');
460    for (var j = 0; j < data.modulePublicDirs.length; j++) {
461        console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]);
462    }
463    console.info('getBundleInfo moduleDirs length [' + data.moduleDirs.length + ']');
464    for (var j = 0; j < data.moduleDirs.length; j++) {
465        console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]);
466    }
467    console.info('getBundleInfo moduleResPaths length [' + data.moduleResPaths.length + ']');
468    for (var j = 0; j < data.moduleResPaths.length; j++) {
469        console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]);
470    }
471    console.info('getBundleInfo abilityInfo length [' + data.abilityInfos.length + ']');
472    for (var j = 0; j < data.abilityInfos.length; j++) {
473        console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name);
474        console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package);
475    }
476}
477```
478
479#### 获取指定用户下所有已安装的应用信息
480
481* getAllApplicationInfo参数描述
482
483  | 名称        | 读写属性 | 类型   | 必填 | 描述                                                    |
484  | ----------- | -------- | ------ | ---- | ------------------------------------------------------- |
485  | bundleFlags | 只读     | number | 是   | 0:返回默认app信息<<br/>8:返回包含permissions的app信息 |
486  | userId      | 只读     | number | 是   | 用户ID                                                  |
487
488* 返回值
489
490  Promise<Array<ApplicationInfo>>:返回值为Promise对象,Promise中包含应用信息列表。
491
492* 示例
493
494```
495bundle.getAllApplicationInfo(8, 0).then((data) => {
496    console.info('xxx getAllApplicationInfo data length [' + data.length + ']');
497    for (var i = 0; i < data.length; i++) {
498        console.info("index[" + i + "].name: for begin");
499        console.info("index[" + i + "].name:" + data[i].name);
500        console.info("index[" + i + "].bundleName:" + data[i].bundleName);
501        console.info("index[" + i + "].description:" + data[i].description);
502        console.info("index[" + i + "].descriptionId:" + data[i].descriptionId);
503        console.info("index[" + i + "].iconPath:" + data[i].iconPath);
504        console.info("index[" + i + "].iconId:" + data[i].iconId);
505        console.info("index[" + i + "].label:" + data[i].label);
506        console.info("index[" + i + "].labelId:" + data[i].labelId);
507        console.info("index[" + i + "].deviceId:" + data[i].deviceId);
508        console.info("index[" + i + "].signatureKey:" + data[i].signatureKey);
509        console.info("index[" + i + "].process:" + data[i].process);
510        console.info("index[" + i + "].isSystemApp:" + data[i].isSystemApp);
511        console.info("index[" + i + "].isLauncherApp:" + data[i].isLauncherApp);
512        console.info("index[" + i + "].supportedModes:" + data[i].supportedModes);
513
514        console.info('getAllApplicationInfo Async permissions length [' + data[i].permissions.length + ']');
515        for (var j = 0; j < data[i].permissions.length; j++) {
516            console.info("index[" + i + "]permissions[" + j + "]:" + data[i].permissions[j]);
517        }
518        console.info('getAllApplicationInfo Async moduleSourceDirs length [' + data[i].moduleSourceDirs.length + ']');
519        for (var j = 0; j < data[i].moduleSourceDirs.length; j++) {
520            console.info("index[" + i + "]moduleSourceDirs[" + j + "]:" + data[i].moduleSourceDirs[j]);
521        }
522        console.info('getAllApplicationInfo Async moduleInfos length [' + data[i].moduleInfos.length + ']');
523        for (var j = 0; j < data[i].moduleInfos.length; j++) {
524            console.info("index[" + i + "]moduleInfos[" + j + "]moduleName:" + data[i].moduleInfos[j].moduleName);
525            console.info("index[" + i + "]moduleInfos[" + j + "]moduleSourceDir:" + data[i].moduleInfos[j].moduleSourceDir);
526        }
527        console.info("index[" + i + "].entryDir:" + data[i].entryDir);
528        console.info("index[" + i + "].codePath:" + data[i].codePath);
529        console.info("index[" + i + "].dataDir:" + data[i].dataDir);
530        console.info("index[" + i + "].dataBaseDir:" + data[i].dataBaseDir);
531        console.info("index[" + i + "].cacheDir:" + data[i].cacheDir);
532    }
533})
534```
535
536获取指定用户下所有已安装的应用信息(callback形式)
537
538* getAllApplicationInfo参数描述
539
540  | 名称        | 读写属性 | 类型                                  | 必填 | 描述                                                    |
541  | ----------- | -------- | ------------------------------------- | ---- | ------------------------------------------------------- |
542  | bundleFlags | 只读     | number                                | 是   | 0:返回默认app信息<<br/>8:返回包含permissions的app信息 |
543  | userId      | 只读     | number                                | 是   | 用户ID                                                  |
544  | callback    | 只读     | AsyncCallback<Array<ApplicationInfo>> | 是   | 回调方法                                                |
545
546* 返回值
547
548  void
549
550* 示例
551
552```
553bundle.getAllApplicationInfo(8, 0, OnReceiveEvent);
554
555function OnReceiveEvent(err, data) {
556    console.info('xxx getAllApplicationInfo data length [' + data.length + ']');
557    for (var i = 0; i < data.length; i++) {
558        console.info("index[" + i + "].name: for begin");
559        console.info("index[" + i + "].name:" + data[i].name);
560        console.info("index[" + i + "].bundleName:" + data[i].bundleName);
561        console.info("index[" + i + "].description:" + data[i].description);
562        console.info("index[" + i + "].descriptionId:" + data[i].descriptionId);
563        console.info("index[" + i + "].iconPath:" + data[i].iconPath);
564        console.info("index[" + i + "].iconId:" + data[i].iconId);
565        console.info("index[" + i + "].label:" + data[i].label);
566        console.info("index[" + i + "].labelId:" + data[i].labelId);
567        console.info("index[" + i + "].deviceId:" + data[i].deviceId);
568        console.info("index[" + i + "].signatureKey:" + data[i].signatureKey);
569        console.info("index[" + i + "].process:" + data[i].process);
570        console.info("index[" + i + "].isSystemApp:" + data[i].isSystemApp);
571        console.info("index[" + i + "].isLauncherApp:" + data[i].isLauncherApp);
572        console.info("index[" + i + "].supportedModes:" + data[i].supportedModes);
573
574        console.info('getAllApplicationInfo Async permissions length [' + data[i].permissions.length + ']');
575        for (var j = 0; j < data[i].permissions.length; j++) {
576            console.info("index[" + i + "]permissions[" + j + "]:" + data[i].permissions[j]);
577        }
578        console.info('getAllApplicationInfo Async moduleSourceDirs length [' + data[i].moduleSourceDirs.length + ']');
579        for (var j = 0; j < data[i].moduleSourceDirs.length; j++) {
580            console.info("index[" + i + "]moduleSourceDirs[" + j + "]:" + data[i].moduleSourceDirs[j]);
581        }
582        console.info('getAllApplicationInfo Async moduleInfos length [' + data[i].moduleInfos.length + ']');
583        for (var j = 0; j < data[i].moduleInfos.length; j++) {
584            console.info("index[" + i + "]moduleInfos[" + j + "]moduleName:" + data[i].moduleInfos[j].moduleName);
585            console.info("index[" + i + "]moduleInfos[" + j + "]moduleSourceDir:" + data[i].moduleInfos[j].moduleSourceDir);
586        }
587        console.info("index[" + i + "].entryDir:" + data[i].entryDir);
588        console.info("index[" + i + "].codePath:" + data[i].codePath);
589        console.info("index[" + i + "].dataDir:" + data[i].dataDir);
590        console.info("index[" + i + "].dataBaseDir:" + data[i].dataBaseDir);
591        console.info("index[" + i + "].cacheDir:" + data[i].cacheDir);
592    }
593}
594```
595
596
597#### 通过Want获取对应的Ability信息
598
599* queryAbilityInfo参数描述
600
601  | 名称        | 读写属性 | 类型   | 必填 | 描述                                                         |
602  | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ |
603  | want        | 只读     | Want   | 是   | 指定Want信息                                                 |
604  | bundleFlags | 只读     | number | 是   | 0:返回默认BundleInfo<br/>1:返回包含abilityInfo的BundleInfo |
605  | userId      | 只读     | number | 是   | 用户ID                                                       |
606
607* Want类型说明
608
609  | 名称        | 读写属性 | 类型                 | 必填 | 描述                                                         |
610  | ----------- | -------- | -------------------- | ---- | ------------------------------------------------------------ |
611  | elementName | 只读     | ElementName          | 是   | 表示运行指定Ability的ElementName。                           |
612  | uri         | 只读     | string               | 否   | 表示Uri描述。                                                |
613  | flags       | 只读     | int                  | 否   | Ability的flag,表示处理Want的方式。                          |
614  | type        | 只读     | string               | 否   | Want中的type属性是指由Want的URI所指示的资源的MIME类型。      |
615  | action      | 只读     | string               | 否   | 表示动作,通常使用系统预置Action,应用也可以自定义Action。   |
616  | want_param  | 只读     | {[key: string]: any} | 否   | want_param是一种支持自定义的数据结构,开发者可以通过want_param传递某些请求所需的额外信息。 |
617  | entities    | 只读     | Array<string>        | 否   | 表示类别,通常使用系统预置Entity,应用也可以自定义Entity。   |
618
619* ElementName类型说明
620
621  | 名称        | 读写属性 | 类型   | 必填 | 描述                                                         |
622  | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ |
623  | deviceId    | 只读     | string | 否   | 表示运行指定Ability的设备ID。                                |
624  | bundleName  | 只读     | string | 是   | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 |
625  | abilityName | 只读     | string | 是   | 表示待启动的Ability名称。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 |
626
627* 返回值
628
629  Promise<AbilityInfo>:返回值为Promise对象,Promise中包含Ability信息。
630
631* 示例
632
633```
634bundle.queryAbilityByWant({
635    want: {
636        action: "action.system.home",
637        entities: ["entity.system.home"],
638        elementName: {
639            deviceId: "0",
640            bundleName: "com.example.myapplicationInstall",
641            abilityName: "com.example.myapplication.MainAbility",
642        },
643    }
644},  1, 0,
645}).then((data) => {
646    console.info("name:" + data.name);
647    console.info("label:" + data.label);
648    console.info("description:" + data.description);
649    console.info("iconPath:" + data.iconPath);
650    console.info("visible:" + data.visible);
651    console.info("kind:" + data.kind);
652    console.info("uri:" + data.uri);
653    console.info("process:" + data.process);
654    console.info("package:" + data.package);
655    console.info("bundleName:" + data.bundleName);
656    console.info("moduleName:" + data.moduleName);
657    console.info("applicationName:" + data.applicationName);
658    console.info("deviceId:" + data.deviceId);
659    console.info("codePath:" + data.codePath);
660    console.info("resourcePath:" + data.resourcePath);
661    console.info("libPath:" + data.libPath);
662
663    console.info('queryAbilityInfo permissions length [' + data.permissions.length + ']');
664    for (var j = 0; j < data.permissions.length; j++) {
665        console.info("permissions[" + j + "]:" + data.permissions[j]);
666    }
667    console.info('queryAbilityInfo deviceTypes length [' + data.deviceTypes.length + ']');
668    for (var j = 0; j < data.deviceTypes.length; j++) {
669        console.info("deviceTypes[" + j + "]:" + data.deviceTypes[j]);
670    }
671    console.info('queryAbilityInfo deviceCapabilities length [' + data.deviceCapabilities.length + ']');
672    for (var j = 0; j < data.deviceCapabilities.length; j++) {
673        console.info("deviceCapabilities[" + j + "]:" + data.deviceCapabilities[j]);
674    }
675    console.info("appInfo.name:" + data.applicationInfo.name);
676    console.info("appInfo.bundleName:" + data.applicationInfo.bundleName);
677    // ability type: 0:UNKNOWN, 1:PAGE, 2:SERVICE, 3:DATA
678    console.info("type:" + data.type);
679    // orientation: 0:UNSPECIFIED, 1:LANDSCAPE, 2:PORTRAIT, 3:FOLLOWRECENT,
680    console.info("orientation:" + data.orientation);
681    // launchMode: 0:SINGLETON, 1:SINGLETOP, 2:STANDARD
682    console.info("launchMode:" + data.launchMode);
683
684    // the enum of AbilityType
685    console.info("AbilityType:" + bundle.AbilityType.UNKNOWN);
686    console.info("AbilityType:" + bundle.AbilityType.PAGE);
687    console.info("AbilityType:" + bundle.AbilityType.SERVICE);
688    console.info("AbilityType:" + bundle.AbilityType.DATA);
689    if (data.type == bundle.AbilityType.PAGE) {
690        console.info("this AbilityType is PAGE");
691    }
692    // the enum of DisplayOrientation
693    console.info("DisplayOrientation:" + bundle.DisplayOrientation.UNSPECIFIED);
694    console.info("DisplayOrientation:" + bundle.DisplayOrientation.LANDSCAPE);
695    console.info("DisplayOrientation:" + bundle.DisplayOrientation.PORTRAIT);
696    console.info("DisplayOrientation:" + bundle.DisplayOrientation.FOLLOWRECENT);
697    if (data.orientation == bundle.DisplayOrientation.UNSPECIFIED) {
698        console.info("this DisplayOrientation is UNSPECIFIED");
699    }
700    // the enum of LaunchMode
701    console.info("LaunchMode:" + bundle.LaunchMode.SINGLETON);
702    console.info("LaunchMode:" + bundle.LaunchMode.SINGLETOP);
703    console.info("LaunchMode:" + bundle.LaunchMode.STANDARD);
704    if (data.launchMode == bundle.LaunchMode.STANDARD) {
705        console.info("this LaunchMode is STANDARD");
706    }
707
708})
709```
710
711通过Want获取对应的Ability信息(callback形式)
712
713* queryAbilityInfo参数描述
714
715  | 名称        | 读写属性 | 类型                              | 必填 | 描述                                                         |
716  | ----------- | -------- | --------------------------------- | ---- | ------------------------------------------------------------ |
717  | want        | 只读     | Want                              | 是   | 指定Want信息                                                 |
718  | bundleFlags | 只读     | number                            | 是   | 0:返回默认BundleInfo<br/>1:返回包含abilityInfo的BundleInfo |
719  | userId      | 只读     | number                            | 是   | 用户ID                                                       |
720  | callback    | 只读     | AsyncCallback<Array<AbilityInfo>> | 是   | 回调方法                                                     |
721
722* Want类型说明
723
724  | 名称        | 读写属性 | 类型                 | 必填 | 描述                                                         |
725  | ----------- | -------- | -------------------- | ---- | ------------------------------------------------------------ |
726  | elementName | 只读     | ElementName          | 是   | 表示运行指定Ability的ElementName。                           |
727  | uri         | 只读     | string               | 否   | 表示Uri描述。                                                |
728  | flags       | 只读     | int                  | 否   | Ability的flag,表示处理Want的方式。                          |
729  | type        | 只读     | string               | 否   | Want中的type属性是指由Want的URI所指示的资源的MIME类型。      |
730  | action      | 只读     | string               | 否   | 表示动作,通常使用系统预置Action,应用也可以自定义Action。   |
731  | want_param  | 只读     | {[key: string]: any} | 否   | want_param是一种支持自定义的数据结构,开发者可以通过want_param传递某些请求所需的额外信息。 |
732  | entities    | 只读     | Array<string>        | 否   | 表示类别,通常使用系统预置Entity,应用也可以自定义Entity。   |
733
734* ElementName类型说明
735
736  | 名称        | 读写属性 | 类型   | 必填 | 描述                                                         |
737  | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ |
738  | deviceId    | 只读     | string | 否   | 表示运行指定Ability的设备ID。                                |
739  | bundleName  | 只读     | string | 是   | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 |
740  | abilityName | 只读     | string | 是   | 表示待启动的Ability名称。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 |
741
742* 返回值
743
744  void
745
746* 示例
747
748```
749bundle.queryAbilityByWant(
750    {
751        want: {
752            action: "action.system.home",
753            entities: ["entity.system.home"],
754            elementName: {
755                deviceId: "0",
756                bundleName: "com.example.myapplicationInstall",
757                abilityName: "com.example.myapplication.MainAbility",
758            },
759        }
760    }, 1, 0,
761    }, OnReceiveEvent);
762
763function OnReceiveEvent(err, data) {
764    console.info("name:" + data.name);
765    console.info("label:" + data.label);
766    console.info("description:" + data.description);
767    console.info("iconPath:" + data.iconPath);
768    console.info("visible:" + data.visible);
769    console.info("kind:" + data.kind);
770    console.info("uri:" + data.uri);
771    console.info("process:" + data.process);
772    console.info("package:" + data.package);
773    console.info("bundleName:" + data.bundleName);
774    console.info("moduleName:" + data.moduleName);
775    console.info("applicationName:" + data.applicationName);
776    console.info("deviceId:" + data.deviceId);
777    console.info("codePath:" + data.codePath);
778    console.info("resourcePath:" + data.resourcePath);
779    console.info("libPath:" + data.libPath);
780
781    console.info('queryAbilityInfo permissions length [' + data.permissions.length + ']');
782    for (var j = 0; j < data.permissions.length; j++) {
783        console.info("permissions[" + j + "]:" + data.permissions[j]);
784    }
785    console.info('queryAbilityInfo deviceTypes length [' + data.deviceTypes.length + ']');
786    for (var j = 0; j < data.deviceTypes.length; j++) {
787        console.info("deviceTypes[" + j + "]:" + data.deviceTypes[j]);
788    }
789    console.info('queryAbilityInfo deviceCapabilities length [' + data.deviceCapabilities.length + ']');
790    for (var j = 0; j < data.deviceCapabilities.length; j++) {
791        console.info("deviceCapabilities[" + j + "]:" + data.deviceCapabilities[j]);
792    }
793    console.info("appInfo.name:" + data.applicationInfo.name);
794    console.info("appInfo.bundleName:" + data.applicationInfo.bundleName);
795    // ability type: 0:UNKNOWN, 1:PAGE, 2:SERVICE, 3:DATA
796    console.info("type:" + data.type);
797    // orientation: 0:UNSPECIFIED, 1:LANDSCAPE, 2:PORTRAIT, 3:FOLLOWRECENT,
798    console.info("orientation:" + data.orientation);
799    // launchMode: 0:SINGLETON, 1:SINGLETOP, 2:STANDARD
800    console.info("launchMode:" + data.launchMode);
801
802    // the enum of AbilityType
803    console.info("AbilityType:" + bundle.AbilityType.UNKNOWN);
804    console.info("AbilityType:" + bundle.AbilityType.PAGE);
805    console.info("AbilityType:" + bundle.AbilityType.SERVICE);
806    console.info("AbilityType:" + bundle.AbilityType.DATA);
807    if (data.type == bundle.AbilityType.PAGE) {
808        console.info("this AbilityType is PAGE");
809    }
810    // the enum of DisplayOrientation
811    console.info("DisplayOrientation:" + bundle.DisplayOrientation.UNSPECIFIED);
812    console.info("DisplayOrientation:" + bundle.DisplayOrientation.LANDSCAPE);
813    console.info("DisplayOrientation:" + bundle.DisplayOrientation.PORTRAIT);
814    console.info("DisplayOrientation:" + bundle.DisplayOrientation.FOLLOWRECENT);
815    if (data.orientation == bundle.DisplayOrientation.UNSPECIFIED) {
816        console.info("this DisplayOrientation is UNSPECIFIED");
817    }
818    // the enum of LaunchMode
819    console.info("LaunchMode:" + bundle.LaunchMode.SINGLETON);
820    console.info("LaunchMode:" + bundle.LaunchMode.SINGLETOP);
821    console.info("LaunchMode:" + bundle.LaunchMode.STANDARD);
822    if (data.launchMode == bundle.LaunchMode.STANDARD) {
823        console.info("this LaunchMode is STANDARD");
824    }
825}
826```
827
828#### 安装hap包
829
830* install参数描述
831
832  | 名称            | 读写属性 | 类型                         | 必填 | 描述                                                         |
833  | --------------- | -------- | ---------------------------- | ---- | ------------------------------------------------------------ |
834  | bundleFilePaths | 只读     | Array<string>                | 是   | 安装用包路径                                                 |
835  | param           | 只读     | InstallParam                 | 是   | userId:用户ID<br/>installFlag:安装标识。<br/>      NORMAL:安装/卸载<br/>      REPLACE_EXISTING:更新<br/>isKeepData:卸载时是否保留运行时数据 |
836  | callback        | 只读     | AsyncCallback<InstallStatus> | 是   | 回调方法                                                     |
837
838* 返回值
839
840  void
841
842* InstallStatus类型说明
843
844  | 名称          | 读写属性 | 类型            | 必填 | 描述     |
845  | ------------- | -------- | --------------- | ---- | -------- |
846  | InstallStatus | 只读     | IStatusReceiver | 是   | 安装结果 |
847
848* 示例
849
850```
851bundle.getBundleInstaller().then((data) => {
852    data.install(['/data/test.hap'], {
853        param: {
854            userId: 0,
855            isKeepData: false
856        }
857    }, OnReceiveinstallEvent);
858
859    function OnReceiveinstallEvent(err, data) {
860        console.info("name: for begin");
861        console.info("install result code:" + data.status);
862        console.info("install result msg:" + data.statusMessage);
863    }
864})
865```
866
867
868#### 卸载hap包
869
870* uninstall参数描述
871
872  | 名称       | 读写属性 | 类型                         | 必填 | 描述                                                         |
873  | ---------- | -------- | ---------------------------- | ---- | ------------------------------------------------------------ |
874  | bundleName | 只读     | string                       | 是   | 卸载用包名                                                   |
875  | param      | 只读     | InstallParam                 | 是   | userId:用户ID<br/>installFlag:安装标识。<br/>      NORMAL:安装/卸载<br/>      REPLACE_EXISTING:更新<br/>isKeepData:卸载时是否保留运行时数据 |
876  | callback   | 只读     | AsyncCallback<InstallStatus> | 是   | 回调方法                                                     |
877
878* 返回值
879
880  void
881
882* InstallStatus类型说明
883
884  | 名称          | 读写属性 | 类型            | 必填 | 描述     |
885  | ------------- | -------- | --------------- | ---- | -------- |
886  | InstallStatus | 只读     | IStatusReceiver | 是   | 卸载结果 |
887
888* 示例
889
890```
891bundle.getBundleInstaller().then((data) => {
892    data.uninstall('com.example.myapplication', {
893        param: {
894            userId: 0,
895            isKeepData: false
896        }
897    }, OnReceiveinstallEvent);
898
899    function OnReceiveinstallEvent(err, data) {
900        console.info("name: for begin");
901        console.info("uninstall result code:" + data.status);
902        console.info("uninstall result msg:" + data.statusMessage);
903    }
904})
905```
906
907
908### bm命令如下
909
910**bm命令帮助**
911
912| 命令    | 描述       |
913| ------- | ---------- |
914| bm help | bm帮助命令 |
915
916**安装应用**
917
918| 命令                                | 描述                       |
919| ----------------------------------- | -------------------------- |
920| bm install -p <bundle-file-path>    | 通过指定路径安装一个应用包 |
921| bm install -r -p <bundle-file-path> | 覆盖安装一个应用包         |
922
923```
924示例如下:
925bm install -p /data/app/ohosapp.hap
926```
927
928**卸载应用**
929
930| 命令                          | 描述                     |
931| ----------------------------- | ------------------------ |
932| bm uninstall -n <bundle-name> | 通过指定包名卸载一个应用 |
933
934```
935示例如下:
936bm uninstall -n com.ohos.app
937```
938
939**查看应用安装信息**
940
941| 命令       | 描述                       |
942| ---------- | -------------------------- |
943| bm dump -a | 列出系统已经安装的所有应用 |
944
945## 相关仓
946
947用户程序框架子系统
948
949**appexecfwk_standard**
950
951aafwk_standard
952
953startup_appspawn
954