OpenHarmony——包管理子系统包安装模块源码解析 原创 精华
作者:李小慧
简介
包管理子系统负责应用安装包的管理,提供安装包的信息查询、安装、更新、卸载和包信息存储等能力。
包管理子系统架构如下图所示:
代码目录
包安装类间关系及关键类介绍
类图
BaseBundleInstaller是安装流程中最重要的类,最终的安装、卸载功能都是在其中实现的。
IBundleMgr中定义了获取IBundleInstaller实例的方法GetBundleInstaller。
IBundleInstaller类是BundleInstallerProxy和BundleInstallerHost的基类,只是在类中声明了Install,Uninstall等函数,具体实现是在这两个子类中实现的。
BundleInstallerProxy类实现了Install,Uninstall功能,利用IPC Proxy向service层发送安装或卸载请求。
服务层Host接收到Proxy发送过来的请求处理消息,调用BundleInstallerHost类的Install功能,调用BundleInstallerManager类的创建安装任务CreateInstallTask函数,在此函数中调用BundleInstaller类的Install功能。
BundleInstaller类的基类是BaseBundleInstaller,它的Install功能实际上调用的是BaseBundleInstaller类的InstallBundle函数。
BMSEventHandler类是继承EventHandler类的,由它来处理系统应用包的安装。它调用SystemBundleInstaller类的InstallSystemBundle函数。
SystemBundleInstaller类也是BaseBundleInstaller的子类,所以最终调用的还是BaseBundleInstaller的InstallBundle功能。
关键类介绍
类名 | 功能简介 |
---|---|
IBundleMgr | 包管理类,声明了获取和查询APP信息、包信息等接口。 |
IBundleInstaller | 包安装类,声明了安装、卸载等接口。 |
BundleInstallerProxy | interface层包安装代理类,继承了IBundleInstaller类,实现了安装、卸载等功能。 |
BundleInstallerHost | service层host侧包安装类,继承了IBundleInstaller类,处理来自proxy的安装、卸载信息,实现了host侧安装、卸载等功能,。 |
BundleInstallerManager | 包安装服务类,创建安装、卸载等任务。 |
BundleInstaller | 包安装类,实现安装、卸载第三方应用包功能。 |
BMSEventHandler | 继承EventHandler,实现了处理系统应用包安装等功能。 |
SystemBundleInstaller | 系统应用包安装类,实现安装、卸载系统应用包功能。 |
BaseBundleInstaller | 包安装基类,实现安装、卸载包功能。 |
第三方应用包安装流程图
源码分析
由于流程较为复杂,受篇幅限制,此处摘取流程中重要的代码段进行说明。详细的代码流程需要对照OpenHarmony源码进行学习。
1. 包管理的NAPI Init()函数中注册包安装install
foundation\appexecfwk\standard\kits\appkit\napi\bundlemgr\native_module.cpp
2. 调用 bundle_mgr.c中的 Install
foundation\appexecfwk\standard\kits\appkit\napi\bundlemgr\bundle_mgr.cpp
3. IBundleInstaller的Install在继承类BundleInstallerProxy 中实现,发送安装消息
foundation\appexecfwk\standard\interfaces\innerkits\appexecfwk_core\src\bundlemgr\bundle_installer_proxy.cpp
4. 在service层host侧处理安装消息
foundation\appexecfwk\standard\services\bundlemgr\src\bundle_installer_host.cpp
5. 在service层bundlemgr侧创建安装任务
foundation\appexecfwk\standard\services\bundlemgr\src\bundle_installer_manager.cpp
6. 在service层bundlemgr侧安装第三方应用包
foundation\appexecfwk\standard\services\bundlemgr\src\bundle_installer.cpp
7. 调用BundleInstaller基类BaseBundleInstaller的InstallBundle函数
foundation\appexecfwk\standard\services\bundlemgr\src\base_bundle_installer.cpp
系统应用包安装流程图
源码分析
限于篇幅,每个调用函数只摘抄关键语句。
1. 系统应用包安装,调用EventHandler类的继承类BMSEventHandler的ProcessEvent函数
foundation\appexecfwk\standard\services\bundlemgr\src\bundle_mgr_service_event_handler.cpp
2. 调用 SystemBundleInstaller的InstallSystemBundle流程
foundation\appexecfwk\standard\services\bundlemgr\src\system_bundle_installer.cpp
3. 与第三方应用包的安装流程一样,系统应用包安装也是调用SystemBundleInstaller的基类BaseBundleInstaller的InstallBundle函数
foundation\appexecfwk\standard\services\bundlemgr\src\base_bundle_installer.cpp
总结
本文主要介绍了包管理子系统的关键实现机制、主要类关系及重要的处理流程,为开发人员维护和扩展功能提供参考。
更多原创内容请关注:深开鸿技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
赞,非常清晰的讲解,收藏了
一键三连
一键三连