1. 框架简介
包管理子系统,是OpenHarmony为开发者提供的安装包管理框架,应用程序的安装、卸载、升级、权限管理等一系列操作都是通过包管理器完成的。包管理子系统由如下图模块组成:
· BundleKit:是包管理服务对外提供的接口,有安装/卸载接口、包信息查询接口、包状态变化监听接口。
· 包扫描器:用来解析本地预制或者安装的安装包,提取里面的各种信息,供管理子模块进行管理,持久化。
· 包安装子模块:安装,卸载,升级一个包;包安装服务一个单独进程的用于创建删除安装目录,具有较高的权限。
· 包管理子模块:管理安装包相关的信息,存储持久化包信息。
· 包安全管理子模块:签名检查、权限授予、权限管理。
2. 代码目录结构
3. 实例讲解
为了能够熟悉包管理的是如何工作的,接下来将以包安装和包信息查询来进行详解。
Ø 案例一:包安装
Install是包安装的入口函数,首先创建了GetBmsInnerClient对象,这是用于和Server端进行IPC通讯的IClientProxy,通过Invoke发送了ID为INSTALL的消息,在Server端(bundlems)将对INSTALL进行功能实现,安装结果通过BundleSelfCallback回调回来。需要注意这里的Client和Server并不是直接进行IPC通讯的,而是通过/dev/lite_ipc驱动中转调用到Server端,这个中转过程就不在本章进行详细讲解。
定义INSTALL的Invoke ID,在Server端通过ID来映射到对应的包安装接口函数,这里同时还定义了卸载、包信息查询等,GET_BUNDLE_INFO后面的包信息查询中会用到。
刚才提到了Client端IClientProxy的创建,那对应Server端则有一个IServerProxy,用于远程接口调用。g_bmsInnerImpl 就是声明了IServerProxy,当收到INSTALL的消息时,则会通过BundleMsInvokeFuc根据Invoke ID来映射到对应的函数指针InstallInnerBundle。 由于包安装是个较为耗时的操作,所以采用异步线程Request的请求方式。包安装完成后向Client端反馈包安装状态。
通过流程图总结一下调用流程:
精彩评论